From 614713f76b3e229fded8ac02b9f689f00a8eaa7b Mon Sep 17 00:00:00 2001 From: DevSoftTech Server Date: Fri, 27 Feb 2026 19:44:36 +0530 Subject: [PATCH] Implement OPD template builder, doctor template selection, and OPD print integration fixes --- .gitignore | 126 + LICENSE | 22 + README.md | 69 + WORKLOG_COPILOT.md | 521 + app/.htaccess | 6 + app/Commands/BridgeSync.php | 37 + app/Common.php | 15 + app/Config/App.php | 202 + app/Config/Auth.php | 519 + app/Config/AuthGroups.php | 149 + app/Config/AuthToken.php | 138 + app/Config/Autoload.php | 92 + app/Config/Boot/development.php | 34 + app/Config/Boot/production.php | 25 + app/Config/Boot/testing.php | 38 + app/Config/CURLRequest.php | 36 + app/Config/Cache.php | 198 + app/Config/Constants.php | 79 + app/Config/ContentSecurityPolicy.php | 216 + app/Config/Cookie.php | 107 + app/Config/Cors.php | 105 + app/Config/Database.php | 204 + app/Config/DocTypes.php | 43 + app/Config/Email.php | 126 + app/Config/Encryption.php | 109 + app/Config/Events.php | 55 + app/Config/Exceptions.php | 106 + app/Config/Feature.php | 37 + app/Config/Filters.php | 110 + app/Config/ForeignCharacters.php | 12 + app/Config/Format.php | 73 + app/Config/Generators.php | 44 + app/Config/Honeypot.php | 42 + app/Config/Hostnames.php | 40 + app/Config/Images.php | 33 + app/Config/Kint.php | 63 + app/Config/Logger.php | 151 + app/Config/Migrations.php | 65 + app/Config/Mimes.php | 534 + app/Config/Modules.php | 82 + app/Config/Optimize.php | 32 + app/Config/Pager.php | 37 + app/Config/Paths.php | 78 + app/Config/Publisher.php | 28 + app/Config/Routes.php | 811 ++ app/Config/Routing.php | 149 + app/Config/Security.php | 86 + app/Config/Services.php | 32 + app/Config/Session.php | 128 + app/Config/Toolbar.php | 147 + app/Config/UserAgents.php | 262 + app/Config/Validation.php | 83 + app/Config/View.php | 79 + app/Config/WorkerMode.php | 50 + app/Controllers/BaseController.php | 103 + app/Controllers/Billing/CaseMaster.php | 1363 ++ app/Controllers/Billing/Charges.php | 1020 ++ app/Controllers/Billing/Ipd.php | 942 ++ app/Controllers/Diagnosis.php | 1963 +++ app/Controllers/Home.php | 477 + app/Controllers/Invoice.php | 524 + app/Controllers/Item.php | 271 + app/Controllers/ItemIpd.php | 269 + app/Controllers/Medical.php | 10932 ++++++++++++++++ app/Controllers/OcasePathLap.php | 397 + app/Controllers/Opd.php | 3944 ++++++ app/Controllers/Opd_prescription.php | 6273 +++++++++ app/Controllers/Opdcase.php | 197 + app/Controllers/OrgPacking.php | 348 + app/Controllers/Package.php | 267 + app/Controllers/Patient.php | 931 ++ app/Controllers/Payment_Medical.php | 755 ++ app/Controllers/Report.php | 497 + app/Controllers/Setting/Admin.php | 13 + app/Controllers/Setting/AiSettings.php | 436 + app/Controllers/Setting/Bank.php | 209 + app/Controllers/Setting/BedManagement.php | 394 + app/Controllers/Setting/Charges.php | 13 + app/Controllers/Setting/Doctor.php | 631 + app/Controllers/Setting/Insurance.php | 113 + app/Controllers/Setting/MedicalBank.php | 208 + app/Controllers/Setting/Reffer.php | 199 + app/Controllers/Setting/Template.php | 652 + app/Controllers/Setting/UserManagement.php | 498 + app/Database/Migrations/.gitkeep | 0 ...02-06-000001_CreatePatientDuplicateLog.php | 55 + .../2026-02-08-000001_CreateDocIpdFeeType.php | 39 + ...2-08-000002_AddGstAgreementToInsurance.php | 34 + ...-000002_CreateCheckItemRequestFunction.php | 43 + ...-17-000001_BackfillMedicalInvoiceCodes.php | 40 + ...6-02-18-000001_CreateMedicalBankTables.php | 85 + ...8-000002_AddPharmacyStockReportIndexes.php | 133 + ...0003_CreateMedicalProductCategoryTable.php | 39 + ...AlignMedicalProductCategoryTableSchema.php | 60 + ...1-000001_CreateClinicalAuditTrailTable.php | 76 + ...2-21-000002_CreateOpdFhirDocumentTable.php | 69 + ...-21-000003_CreateComplaintsMasterTable.php | 135 + ...2-21-000004_CreateBridgeSyncQueueTable.php | 108 + ...-21-000005_CreateLabAiExtractionTables.php | 155 + ..._AddDoctorRegistrationNoToDoctorMaster.php | 33 + ..._CreateOpdMedicineUserPreferenceTables.php | 74 + ...003_AddDosageRestrictionToOpdMedMaster.php | 59 + ...00004_AddAiScanColumnsToFileUploadData.php | 77 + app/Database/Seeds/.gitkeep | 0 .../Seeds/ClinicalTemplateWorkspaceSeeder.php | 171 + app/Database/Seeds/ComplaintsMasterSeeder.php | 298 + app/Database/Seeds/OpdDemoCleanupSeeder.php | 58 + app/Database/Seeds/OpdDemoLargeSeeder.php | 364 + app/Database/Seeds/OpdDemoMasterSeeder.php | 256 + app/Filters/.gitkeep | 0 app/Helpers/.gitkeep | 0 app/Helpers/age_helper.php | 75 + app/Helpers/common_helper.php | 153 + app/Language/.gitkeep | 0 app/Language/en/Auth.php | 6 + app/Language/en/Validation.php | 4 + app/Libraries/.gitkeep | 0 app/Libraries/BridgeSyncService.php | 228 + app/Libraries/ClinicalAuditTrail.php | 84 + app/Libraries/FhirR4Builder.php | 202 + app/Models/.gitkeep | 0 app/Models/BankModel.php | 109 + app/Models/BedAssignmentHistoryModel.php | 45 + app/Models/BedCategoryModel.php | 26 + app/Models/BedMaintenanceLogModel.php | 33 + app/Models/BedMasterModel.php | 37 + app/Models/BloodGroupModel.php | 13 + app/Models/BridgeSyncQueueModel.php | 34 + app/Models/ClinicalAuditTrailModel.php | 34 + app/Models/DoctorModel.php | 191 + app/Models/InsuranceModel.php | 44 + app/Models/InvoiceModel.php | 159 + app/Models/IpdBillingModel.php | 494 + app/Models/IpdModel.php | 418 + app/Models/ItemIpdModel.php | 248 + app/Models/ItemModel.php | 234 + app/Models/MedicalBankModel.php | 190 + app/Models/MedicalModel.php | 57 + app/Models/OpdMedicineModel.php | 198 + app/Models/OpdModel.php | 100 + app/Models/OrganizationCaseModel.php | 36 + app/Models/PackageModel.php | 209 + app/Models/PathLabModel.php | 70 + app/Models/PatientModel.php | 162 + app/Models/PaymentModel.php | 27 + app/Models/RefferModel.php | 76 + app/Models/WardModel.php | 36 + app/ThirdParty/.gitkeep | 0 app/Validation/AbdmRules.php | 40 + app/Views/Invoice/Case_Form_V.php | 152 + app/Views/Invoice/Case_Form_profile_V.php | 195 + app/Views/Invoice/Case_List.php | 53 + app/Views/Invoice/Invoice_org_payment.php | 64 + app/Views/Invoice/Org_Contingent_bill.php | 87 + .../Invoice/Organization_Invoice_PathLab.php | 238 + .../Organization_Invoice_PathLab_final_V.php | 378 + .../Invoice/Organization_invoice_print_v.php | 181 + app/Views/Invoice/case_list_all.php | 183 + app/Views/Invoice/caseinvoice_V.php | 497 + app/Views/Invoice/caseinvoice_ipd_V.php | 148 + app/Views/Invoice/caseinvoice_print_V.php | 186 + app/Views/Invoice/org_case_payment.php | 144 + app/Views/Invoice/payment_req_panel.php | 145 + app/Views/Invoice/payment_request_list.php | 127 + app/Views/Invoice/refund_amount_panel.php | 88 + app/Views/Invoice/refund_invoice.php | 129 + .../PathLab_Report/_test_option_table.php | 38 + app/Views/PathLab_Report/lab_report_edit.php | 135 + .../PathLab_Report/lab_report_item_edit.php | 264 + app/Views/PathLab_Report/lab_report_list.php | 135 + .../PathLab_Report/lab_report_test_list.php | 80 + app/Views/PathLab_Report/lab_test_search.php | 55 + .../PathLab_Report/ultrasound_report_edit.php | 135 + .../ultrasound_template_list.php | 134 + .../Admin/Doctor/temp/Doctor_Search_V.php | 59 + .../Setting/Admin/Doctor/temp/Doctor_V.php | 105 + .../Admin/Doctor/temp/Doctor_profile_V.php | 300 + .../Setting/Admin/UserManagement/create.php | 84 + .../Setting/Admin/UserManagement/edit.php | 79 + .../Setting/Admin/UserManagement/index.php | 145 + .../Admin/UserManagement/permissions.php | 181 + .../Admin/UserManagement/reset_password.php | 106 + app/Views/Setting/Admin/ai_settings.php | 227 + app/Views/Setting/Admin/index.php | 106 + app/Views/Setting/Bank/bank_search_v.php | 339 + app/Views/Setting/Bed/assignment_history.php | 249 + app/Views/Setting/Bed/bed_list.php | 262 + app/Views/Setting/Bed/category_list.php | 213 + app/Views/Setting/Bed/index.php | 43 + app/Views/Setting/Bed/maintenance_list.php | 233 + .../Charges/IPD_Charges/item_create_V.php | 69 + .../IPD_Charges/item_insurance_list.php | 24 + .../Charges/IPD_Charges/item_item_excel.php | 33 + .../Charges/IPD_Charges/item_item_list.php | 54 + .../Charges/IPD_Charges/item_profile_V.php | 149 + .../Charges/IPD_Charges/item_search_V.php | 110 + .../Charges/IPD_Charges/item_search_adv.php | 43 + .../Charges/IPD_Charges/item_type_create.php | 54 + .../Charges/IPD_Charges/item_type_profile.php | 56 + .../IPD_Charges/item_type_search_v.php | 46 + .../Charges/OPD_Charges/item_create_V.php | 69 + .../OPD_Charges/item_insurance_list.php | 24 + .../Charges/OPD_Charges/item_item_excel.php | 33 + .../Charges/OPD_Charges/item_item_list.php | 54 + .../Charges/OPD_Charges/item_profile_V.php | 149 + .../Charges/OPD_Charges/item_search_V.php | 110 + .../Charges/OPD_Charges/item_search_adv.php | 46 + .../Charges/OPD_Charges/item_type_create.php | 62 + .../Charges/OPD_Charges/item_type_profile.php | 64 + .../OPD_Charges/item_type_search_v.php | 49 + .../Setting/Charges/Package/item_create_V.php | 69 + .../Charges/Package/item_insurance_list.php | 24 + .../Charges/Package/item_item_excel.php | 33 + .../Charges/Package/item_item_list.php | 54 + .../Charges/Package/item_profile_V.php | 139 + .../Setting/Charges/Package/item_search_V.php | 110 + .../Charges/Package/item_search_adv.php | 43 + .../Charges/Package/item_type_create.php | 54 + .../Charges/Package/item_type_profile.php | 56 + .../Charges/Package/item_type_search_v.php | 46 + app/Views/Setting/Charges/index.php | 76 + app/Views/Setting/Doctor/Doctor_Search_V.php | 51 + app/Views/Setting/Doctor/Doctor_V.php | 160 + app/Views/Setting/Doctor/Doctor_profile_V.php | 433 + app/Views/Setting/Doctor/Ipd_FeeType_List.php | 128 + app/Views/Setting/Doctor/Spec_List.php | 128 + .../Setting/Insurance/insurance_create_V.php | 72 + .../Setting/Insurance/insurance_profile_V.php | 185 + .../Setting/Insurance/insurance_search_v.php | 45 + .../Setting/MedicalBank/bank_search_v.php | 339 + app/Views/Setting/Reffer/reffer_add.php | 70 + app/Views/Setting/Reffer/reffer_edit.php | 72 + app/Views/Setting/Reffer/reffer_index.php | 72 + app/Views/Setting/Reffer/reffer_type_list.php | 128 + .../Reffer/temp/hospital_refer/reffer_add.php | 78 + .../temp/hospital_refer/reffer_edit.php | 78 + .../temp/hospital_refer/reffer_index.php | 61 + app/Views/Setting/Template/index.php | 202 + app/Views/account/my_profile.php | 144 + app/Views/auth/login.php | 147 + app/Views/auth/register.php | 65 + app/Views/billing/Patient_Cards_V.php | 127 + app/Views/billing/Patient_File_Upload_V.php | 20 + app/Views/billing/Patient_Profile_Image_V.php | 311 + app/Views/billing/Patient_Profile_Opd_V.php | 80 + app/Views/billing/Patient_Search_V.php | 45 + app/Views/billing/Patient_Search_opd.php | 50 + app/Views/billing/Patient_V.php | 468 + app/Views/billing/Person_Edit_V.php | 404 + app/Views/billing/Person_profile_V.php | 354 + .../billing/charges/charges_invoice_edit.php | 266 + .../billing/charges/charges_invoice_show.php | 520 + app/Views/billing/ipd/cash_balance.php | 116 + app/Views/billing/ipd/cash_balance_table.php | 56 + app/Views/billing/ipd/current_admission.php | 78 + app/Views/billing/ipd/dashboard.php | 22 + app/Views/billing/ipd/invoice_list.php | 180 + .../billing/ipd/ipd_model_payment_box.php | 165 + .../ipd/ipd_panel_deduction_payment.php | 133 + .../billing/ipd/ipd_panel_tpa_payment.php | 75 + .../billing/ipd/ipd_payment_receipt_print.php | 28 + app/Views/billing/ipd/panel.php | 320 + app/Views/billing/ipd/panel_admission.php | 34 + app/Views/billing/ipd/panel_bed_assign.php | 34 + app/Views/billing/ipd/panel_bill_details.php | 325 + app/Views/billing/ipd/panel_diagnosis.php | 33 + app/Views/billing/ipd/panel_discharge.php | 26 + app/Views/billing/ipd/panel_ipd_charges.php | 312 + app/Views/billing/ipd/panel_medical_bills.php | 31 + app/Views/billing/ipd/panel_package.php | 196 + app/Views/billing/ipd/panel_payments.php | 40 + app/Views/billing/ipd/panel_placeholder.php | 3 + app/Views/billing/main.php | 19 + app/Views/billing/opd_advice_workspace.php | 276 + app/Views/billing/opd_app_insurance_V.php | 150 + app/Views/billing/opd_appointment_V.php | 147 + .../billing/opd_appointment_dashboard.php | 60 + app/Views/billing/opd_appointment_list.php | 311 + .../billing/opd_appointment_list_table.php | 85 + app/Views/billing/opd_invoice_V.php | 455 + app/Views/billing/opd_invoice_pdf_v.php | 266 + app/Views/billing/opd_invoice_print_v.php | 96 + app/Views/billing/opd_letter_head.php | 237 + app/Views/billing/opd_letter_head_pdf.php | 417 + app/Views/billing/opd_medicince_workspace.php | 618 + .../billing/opd_parts/content/default.html | 13 + .../billing/opd_parts/hospital/default.html | 23 + .../billing/opd_parts/layout/default.html | 23 + .../billing/opd_parts/patient/default.html | 10 + app/Views/billing/opd_parts/patient/edit.html | 18 + app/Views/billing/opd_parts/patient/list.html | 26 + app/Views/billing/opd_prescription_basic.php | 3783 ++++++ app/Views/billing/opd_rx_group_workspace.php | 239 + app/Views/billing/opd_scan_history_panel.php | 56 + app/Views/billing/opd_scan_last_list.php | 38 + app/Views/billing/opd_scan_modal_body.php | 289 + app/Views/billing/opd_template_builder.php | 159 + .../billing/opd_template_builder_list.php | 87 + app/Views/billing/opd_template_workspace.php | 464 + .../opd_info_print_letter_head.html | 1 + .../opd_info_print_letter_head_1.html | 1 + .../opd_print_info_letter_head.html | 1 + ...opd_print_parcha_chamunda_hospital_ksp.php | 74 + .../rx_print_chamunda_plain_paper.html | 1 + .../billing/rx_group_medicine_workspace.php | 426 + app/Views/billing/search_adv_data.php | 11 + app/Views/dashboard/index.php | 315 + app/Views/diagnosis/index.php | 97 + .../diagnosis/lab_ai_extracted_values.php | 58 + app/Views/diagnosis/lab_date_show.php | 40 + app/Views/diagnosis/lab_final_report_show.php | 20 + .../diagnosis/lab_final_report_show_xray.php | 85 + .../diagnosis/lab_invoice_main_test_list.php | 145 + app/Views/diagnosis/lab_report_file_list.php | 148 + app/Views/diagnosis/lab_report_tab.php | 110 + app/Views/diagnosis/lab_report_tab_path.php | 116 + app/Views/diagnosis/pathology_detail.php | 1008 ++ app/Views/diagnosis/print_compiled_report.php | 65 + app/Views/diagnosis/print_single_report.php | 37 + app/Views/diagnosis/request_list.php | 206 + app/Views/diagnosis/test_data_entry_form.php | 51 + app/Views/diagnosis/test_data_entry_table.php | 75 + app/Views/errors/cli/error_404.php | 7 + app/Views/errors/cli/error_exception.php | 65 + app/Views/errors/cli/production.php | 5 + app/Views/errors/html/debug.css | 194 + app/Views/errors/html/debug.js | 116 + app/Views/errors/html/error_400.php | 84 + app/Views/errors/html/error_404.php | 84 + app/Views/errors/html/error_exception.php | 429 + app/Views/errors/html/production.php | 25 + app/Views/medical/company_edit.php | 70 + app/Views/medical/company_master.php | 17 + app/Views/medical/company_master_sub.php | 34 + app/Views/medical/counter_sale_form.php | 127 + app/Views/medical/dashboard.php | 40 + app/Views/medical/drug_master_list.php | 27 + app/Views/medical/expiry_stock_list.php | 139 + app/Views/medical/expiry_stock_pdf.php | 119 + app/Views/medical/invoice_edit.php | 778 ++ app/Views/medical/invoice_item_log.php | 62 + app/Views/medical/invoice_item_log_data.php | 112 + app/Views/medical/invoice_master_edit.php | 438 + app/Views/medical/invoice_med_draft.php | 115 + app/Views/medical/invoice_print.php | 116 + app/Views/medical/invoice_print_pdf.php | 194 + app/Views/medical/ipd_org_list.php | 87 + app/Views/medical/ipd_print_report.php | 607 + app/Views/medical/ipd_return_medicine.php | 143 + app/Views/medical/main_store_dashboard.php | 69 + app/Views/medical/master.php | 123 + app/Views/medical/master_report.php | 35 + app/Views/medical/med_model_payment.php | 219 + app/Views/medical/medical_final_invoice.php | 419 + app/Views/medical/medical_invoice_list.php | 298 + app/Views/medical/medical_org_invoicelist.php | 106 + app/Views/medical/medicine_category_edit.php | 57 + .../medical/medicine_category_master.php | 17 + app/Views/medical/medicine_category_sub.php | 32 + app/Views/medical/merge_product.php | 152 + app/Views/medical/mini_invoice.php | 130 + app/Views/medical/new_purchase_invoice.php | 60 + app/Views/medical/org_list.php | 60 + app/Views/medical/patient_search_result.php | 41 + app/Views/medical/payment_edit.php | 126 + app/Views/medical/payment_log.php | 71 + app/Views/medical/payment_log_data.php | 66 + app/Views/medical/payment_search.php | 113 + app/Views/medical/placeholder.php | 8 + app/Views/medical/print_bill_on_uhid.php | 80 + app/Views/medical/product_edit.php | 160 + app/Views/medical/product_search_result.php | 42 + app/Views/medical/purchase_challan_list.php | 32 + app/Views/medical/purchase_invoice_edit.php | 428 + app/Views/medical/purchase_invoice_item.php | 62 + .../medical/purchase_invoice_master_edit.php | 156 + app/Views/medical/purchase_item_old.php | 39 + app/Views/medical/purchase_supp_list.php | 57 + app/Views/medical/purchase_supplier_list.php | 27 + app/Views/medical/report_company_med_sale.php | 108 + .../medical/report_company_med_sale_data.php | 114 + app/Views/medical/report_daily_med_sale.php | 99 + .../medical/report_daily_med_sale_data.php | 117 + .../medical/report_daily_med_sale_doc.php | 109 + .../report_daily_med_sale_doc_data.php | 104 + .../medical/report_gst_invoice_hsn_data.php | 65 + app/Views/medical/report_gst_invoice_list.php | 144 + .../medical/report_gst_invoice_list_data.php | 69 + app/Views/medical/report_gst_sale.php | 132 + app/Views/medical/report_gst_sale_data.php | 54 + .../medical/report_gst_sale_data_pdf.php | 70 + app/Views/medical/report_ipd_credit.php | 116 + app/Views/medical/report_ipd_credit_data.php | 115 + app/Views/medical/report_ipd_discharge.php | 103 + .../medical/report_ipd_discharge_data.php | 100 + app/Views/medical/report_ipd_sale.php | 103 + app/Views/medical/report_ipd_sale_data.php | 123 + app/Views/medical/report_med_patient.php | 154 + app/Views/medical/report_med_patient_data.php | 81 + app/Views/medical/report_med_patient_pdf.php | 114 + app/Views/medical/report_org_bills.php | 113 + app/Views/medical/report_org_bills_data.php | 79 + app/Views/medical/report_purchase_invoice.php | 233 + .../medical/report_purchase_invoice_data.php | 108 + .../report_purchase_invoice_data_gst.php | 66 + .../report_purchase_invoice_data_gst_pdf.php | 108 + .../report_purchase_invoice_data_pdf.php | 118 + app/Views/medical/report_short_medicine.php | 119 + .../medical/report_short_medicine_data.php | 69 + app/Views/medical/search_customer.php | 62 + app/Views/medical/stock_statement.php | 109 + app/Views/medical/stock_statement_data.php | 100 + app/Views/medical/stock_transfer.php | 174 + app/Views/medical/store_stock_result.php | 478 + app/Views/medical/store_stock_search.php | 146 + app/Views/medical/supplier_account.php | 51 + .../medical/supplier_account_add_entry.php | 51 + app/Views/medical/supplier_account_detail.php | 256 + .../medical/supplier_account_edit_entry.php | 52 + .../medical/supplier_account_ledger_data.php | 35 + .../medical/supplier_account_ledger_pdf.php | 119 + app/Views/medical/supplier_edit.php | 103 + app/Views/medical/supplier_master.php | 17 + app/Views/medical/supplier_master_sub.php | 34 + app/Views/medical/uhid_report_pdf.php | 155 + app/Views/org_packing/cases_list.php | 66 + app/Views/org_packing/create.php | 122 + app/Views/org_packing/edit.php | 231 + app/Views/org_packing/index.php | 130 + app/Views/org_packing/print_ipd.php | 137 + app/Views/org_packing/print_opd.php | 133 + app/Views/org_packing/search_result.php | 67 + app/Views/partials/header.php | 78 + app/Views/partials/sidebar.php | 215 + app/Views/report/collection_report.php | 116 + app/Views/report/collection_report_table.php | 59 + app/Views/report/diagnosis_report.php | 116 + app/Views/report/diagnosis_report_table.php | 111 + .../report/insurance_combined_report.php | 111 + .../insurance_combined_report_table.php | 186 + app/Views/report/insurance_credit_main.php | 100 + app/Views/report/insurance_ipd_report.php | 112 + .../report/insurance_ipd_report_table.php | 100 + app/Views/report/insurance_opd_report.php | 112 + .../report/insurance_opd_report_table.php | 78 + app/Views/welcome_message.php | 264 + app/index.html | 11 + builds | 125 + composer.json | 46 + composer.lock | 2656 ++++ env | 69 + old_code_ci3/controllers/Auth.php | 825 ++ old_code_ci3/controllers/Auth_dst copy.php | 796 ++ old_code_ci3/controllers/Auth_dst.php | 813 ++ old_code_ci3/controllers/C_test.php | 95 + old_code_ci3/controllers/Dashboard.php | 133 + old_code_ci3/controllers/Data.php | 156 + old_code_ci3/controllers/Doc_Admin.php | 348 + old_code_ci3/controllers/Doctor.php | 303 + old_code_ci3/controllers/Document_Patient.php | 418 + old_code_ci3/controllers/DotPrint.php | 165 + old_code_ci3/controllers/IPD_Nursing.php | 139 + old_code_ci3/controllers/Insurance.php | 98 + old_code_ci3/controllers/Invoice.php | 879 ++ old_code_ci3/controllers/InvoiceShow.php | 60 + old_code_ci3/controllers/Ipd.php | 2202 ++++ old_code_ci3/controllers/Ipd2.php | 335 + old_code_ci3/controllers/IpdNew.php | 2241 ++++ old_code_ci3/controllers/Ipd_Report.php | 116 + old_code_ci3/controllers/Ipd_discharge.php | 3564 +++++ old_code_ci3/controllers/Item.php | 354 + old_code_ci3/controllers/Item_IPD.php | 354 + old_code_ci3/controllers/Lab_Admin.php | 3493 +++++ old_code_ci3/controllers/Lab_Report.php | 564 + old_code_ci3/controllers/Master_data.php | 107 + old_code_ci3/controllers/Medical.php | 5230 ++++++++ .../controllers/Medical_Invoice_PDF.php | 104 + old_code_ci3/controllers/Medical_Print.php | 1150 ++ old_code_ci3/controllers/Medical_Report.php | 3012 +++++ old_code_ci3/controllers/Medical_app.php | 453 + .../controllers/Medical_backpanel.php | 2168 +++ old_code_ci3/controllers/Mobile_app.php | 384 + old_code_ci3/controllers/OcasePathLap.php | 650 + old_code_ci3/controllers/Ocasemaster.php | 672 + old_code_ci3/controllers/Opd.php | 2186 +++ old_code_ci3/controllers/Opd2.php | 2067 +++ old_code_ci3/controllers/Opd_online_api.php | 290 + old_code_ci3/controllers/Opd_prescription.php | 2976 +++++ old_code_ci3/controllers/Opd_print.php | 904 ++ old_code_ci3/controllers/Opdcase.php | 218 + old_code_ci3/controllers/Org_Packing.php | 602 + .../controllers/OrganizationInvoice.php | 368 + old_code_ci3/controllers/Orgcase.php | 1255 ++ old_code_ci3/controllers/Package.php | 342 + old_code_ci3/controllers/PathLab.php | 1354 ++ old_code_ci3/controllers/Patient.php | 850 ++ old_code_ci3/controllers/Payment.php | 313 + old_code_ci3/controllers/Payment_Medical.php | 291 + old_code_ci3/controllers/PhoneHMS.php | 265 + old_code_ci3/controllers/PhoneSMS.php | 28 + old_code_ci3/controllers/Product_master.php | 632 + .../controllers/Product_stock_master.php | 483 + old_code_ci3/controllers/Reffer.php | 164 + old_code_ci3/controllers/Report.php | 2395 ++++ old_code_ci3/controllers/Report2.php | 1151 ++ old_code_ci3/controllers/Report3.php | 839 ++ old_code_ci3/controllers/Report4.php | 261 + old_code_ci3/controllers/Report5.php | 393 + old_code_ci3/controllers/Report6.php | 119 + old_code_ci3/controllers/ReportPanel2.php | 1998 +++ old_code_ci3/controllers/Room_bed.php | 57 + old_code_ci3/controllers/Setting.php | 16 + old_code_ci3/controllers/Stock.php | 1250 ++ old_code_ci3/controllers/Storestock.php | 2126 +++ old_code_ci3/controllers/Testcont.php | 137 + .../controllers/User_Authentication.php | 84 + old_code_ci3/controllers/Web_medical.php | 9 + old_code_ci3/controllers/Website.php | 42 + old_code_ci3/controllers/Welcome.php | 105 + old_code_ci3/controllers/Workplace.php | 14 + old_code_ci3/controllers/index.html | 11 + .../php_opd_appointment_online.php | 248 + .../helpers/commonfunction_helper.php | 217 + old_code_ci3/helpers/index.html | 11 + old_code_ci3/models/DbRemote_M.php | 0 old_code_ci3/models/DocFormat_M.php | 93 + old_code_ci3/models/Doctor_M.php | 133 + old_code_ci3/models/DotPrint_M.php | 25 + old_code_ci3/models/ECHS_M.php | 43 + old_code_ci3/models/FileMedical_M.php | 61 + old_code_ci3/models/FileOPDRec_M.php | 62 + old_code_ci3/models/File_M.php | 63 + old_code_ci3/models/Insurance_M.php | 29 + old_code_ci3/models/Invoice_M.php | 95 + old_code_ci3/models/Ion_auth_model.php | 2249 ++++ old_code_ci3/models/IpdDischarge_M.php | 416 + old_code_ci3/models/Ipd_M.php | 285 + old_code_ci3/models/Item_M.php | 109 + old_code_ci3/models/Item_ipd_M.php | 109 + old_code_ci3/models/Master_M.php | 66 + old_code_ci3/models/Medical_M.php | 610 + old_code_ci3/models/Medical_M_03062021.php | 491 + old_code_ci3/models/Ocasemaster_M.php | 53 + old_code_ci3/models/Opd_M.php | 279 + old_code_ci3/models/Package_M.php | 109 + old_code_ci3/models/PathLab_M.php | 144 + old_code_ci3/models/Patient_M.php | 136 + old_code_ci3/models/Patienttag_M.php | 46 + old_code_ci3/models/Payment_M.php | 140 + old_code_ci3/models/Prescription_M.php | 240 + old_code_ci3/models/Product_master_M.php | 205 + .../models/Product_stock_master_M.php | 175 + old_code_ci3/models/Reffer_M.php | 27 + old_code_ci3/models/SMS_M.php | 45 + old_code_ci3/models/Stock_M.php | 204 + old_code_ci3/models/Store_M.php | 11 + old_code_ci3/models/index.html | 11 + old_code_ci3/views/AdminMain.php | 8 + old_code_ci3/views/ControlSide.php | 193 + .../views/DocAdmin/doc_input_list.php | 103 + old_code_ci3/views/DocAdmin/doc_item_edit.php | 139 + .../views/DocAdmin/doc_letterhead_print.php | 51 + old_code_ci3/views/DocAdmin/doc_list.php | 59 + .../views/DocAdmin/doc_master_edit.php | 157 + .../views/Doctor_Profile/Doctor_Search_V.php | 59 + .../views/Doctor_Profile/Doctor_V.php | 105 + .../views/Doctor_Profile/Doctor_profile_V.php | 300 + old_code_ci3/views/Doctor_Search_V.php | 59 + old_code_ci3/views/Doctor_V.php | 108 + old_code_ci3/views/Doctor_profile_V.php | 313 + .../DocumentPatient/Doc_update_pre_value.php | 134 + .../DocumentPatient/Patient_Doc_Edit.php | 104 + .../DocumentPatient/Patient_Doc_master.php | 139 + old_code_ci3/views/Footer.php | 345 + old_code_ci3/views/Header.php | 219 + old_code_ci3/views/IPD/Bed_panel.php | 127 + old_code_ci3/views/IPD/IPDList_V.php | 63 + .../views/IPD/IPD_Medical_Invoice_Panel.php | 87 + old_code_ci3/views/IPD/IPD_View.php | 271 + old_code_ci3/views/IPD/Ipd_Registration_V.php | 244 + old_code_ci3/views/IPD/Ipd_invoice_V.php | 206 + .../views/IPD/Ipd_invoice_print_V.php | 280 + .../views/IPD/Ipd_invoice_short_all.php | 77 + old_code_ci3/views/IPD/Ipdpanel_V.php | 233 + old_code_ci3/views/IPD/ipd_account_panel.php | 48 + old_code_ci3/views/IPD/ipd_all_list.php | 173 + old_code_ci3/views/IPD/ipd_bed_assign.php | 103 + old_code_ci3/views/IPD/ipd_bed_status.php | 58 + old_code_ci3/views/IPD/ipd_dashboard.php | 38 + old_code_ci3/views/IPD/ipd_discharge.php | 306 + .../views/IPD/ipd_discharged_status.php | 90 + .../views/IPD/ipd_invoice_error_v.php | 3 + old_code_ci3/views/IPD/ipd_invoice_items.php | 696 + .../IPD/ipd_invoice_print_wo_payment.php | 260 + old_code_ci3/views/IPD/ipd_main_panel.php | 407 + .../views/IPD/ipd_medical_invoice_short.php | 43 + .../views/IPD/ipd_model_payment_box.php | 307 + old_code_ci3/views/IPD/ipd_package.php | 194 + .../views/IPD/ipd_panel_deduction_payment.php | 174 + old_code_ci3/views/IPD/ipd_panel_refund.php | 131 + old_code_ci3/views/IPD/ipd_payment.php | 169 + .../views/IPD/ipd_payment_receipt_print.php | 109 + old_code_ci3/views/IPD/ipd_room.php | 5 + old_code_ci3/views/IPD/print_ipd_form1.php | 138 + .../views/IPD/print_payment_receipt_ipd.php | 73 + old_code_ci3/views/IPD/test.php | 173 + old_code_ci3/views/IPD2/IPDList_V.php | 63 + .../views/IPD2/IPD_Medical_Invoice_Panel.php | 90 + old_code_ci3/views/IPD2/IPD_View.php | 197 + .../views/IPD2/Ipd_Registration_V.php | 272 + old_code_ci3/views/IPD2/Ipd_invoice_V.php | 340 + .../views/IPD2/Ipd_invoice_print_TPA_V.php | 401 + .../views/IPD2/Ipd_invoice_print_V.php | 362 + .../views/IPD2/Ipd_invoice_short_all.php | 77 + old_code_ci3/views/IPD2/Ipdpanel_V.php | 249 + old_code_ci3/views/IPD2/TPA_Payment.php | 79 + old_code_ci3/views/IPD2/ipd_account_panel.php | 19 + old_code_ci3/views/IPD2/ipd_all_list.php | 178 + old_code_ci3/views/IPD2/ipd_bed_assign.php | 106 + old_code_ci3/views/IPD2/ipd_bed_list.php | 39 + old_code_ci3/views/IPD2/ipd_bed_status.php | 58 + old_code_ci3/views/IPD2/ipd_dashboard.php | 38 + .../views/IPD2/ipd_diagnosis_charges.php | 75 + .../IPD2/ipd_diagnosis_invoice_items.php | 93 + old_code_ci3/views/IPD2/ipd_discharge.php | 308 + .../views/IPD2/ipd_discharged_status.php | 93 + old_code_ci3/views/IPD2/ipd_dues_form.php | 151 + .../views/IPD2/ipd_invoice_doc_wise.php | 221 + .../views/IPD2/ipd_invoice_error_v.php | 3 + old_code_ci3/views/IPD2/ipd_invoice_items.php | 1167 ++ .../IPD2/ipd_invoice_print_on_letterhead.php | 299 + ...invoice_print_on_letterhead_wo_payment.php | 331 + .../IPD2/ipd_invoice_print_wo_payment.php | 325 + old_code_ci3/views/IPD2/ipd_main_panel.php | 602 + .../views/IPD2/ipd_medical_invoice_short.php | 43 + .../views/IPD2/ipd_model_payment_box.php | 219 + old_code_ci3/views/IPD2/ipd_package.php | 201 + .../IPD2/ipd_panel_deduction_payment.php | 180 + old_code_ci3/views/IPD2/ipd_panel_refund.php | 131 + old_code_ci3/views/IPD2/ipd_payment.php | 85 + .../views/IPD2/ipd_payment_receipt_print.php | 74 + old_code_ci3/views/IPD2/ipd_room.php | 5 + old_code_ci3/views/IPD2/print_ipd_form1.php | 134 + old_code_ci3/views/IPD2/print_ipd_form2.php | 140 + .../views/IPD2/print_ipd_form2_khrc.php | 144 + old_code_ci3/views/IPD2/print_ipd_form3.php | 132 + old_code_ci3/views/IPD2/print_ipd_form4.php | 94 + .../views/IPD2/print_payment_receipt_ipd.php | 72 + old_code_ci3/views/IPD2/test.php | 173 + .../IPD_Discharge/EJA_discharge_template.php | 43 + .../EJA_discharge_template_html.php | 158 + .../IPD_Discharge/SVH_discharge_template.php | 43 + .../SVH_discharge_template_html.php | 158 + .../chamunda_discharge_template.php | 48 + .../chamunda_discharge_template_html.php | 129 + .../IPD_Discharge/ipd_discharge_edit.php | 2361 ++++ .../IPD_Discharge/ipd_discharge_edit1.php | 1558 +++ .../IPD_Discharge/ipd_discharge_preview.php | 80 + .../IPD_Discharge/ipd_discharge_print.php | 342 + .../ipd_discharge_print_format.php | 100 + .../views/IPD_Discharge/ipd_prescription.php | 30 + .../views/IPD_Discharge/ipd_procedure.php | 42 + .../views/IPD_Discharge/ipd_surgery.php | 42 + old_code_ci3/views/IPD_Discharge/main.php | 25 + .../radiant_discharge_template.php | 43 + .../radiant_discharge_template_html.php | 158 + .../views/IPD_Discharge/search_ipd_result.php | 45 + ..._admission_histroy_phusical_assessment.php | 343 + .../views/IPD_Format/form_fluid_in_out.php | 83 + .../views/IPD_Format/form_progress_notes.php | 64 + .../views/IPD_Format/form_treatment_chart.php | 281 + .../views/IPD_Format/form_vitals_chart.php | 80 + .../views/IPD_Format/ipd_sticker_print.php | 273 + .../views/IPD_Format/ipd_sticker_print_2.php | 379 + .../views/IPD_Format/ipd_sticker_print_3.php | 52 + old_code_ci3/views/IPD_Nursing/IPDList_V.php | 60 + old_code_ci3/views/IPD_Nursing/IPD_Panel.php | 101 + .../views/IPD_Nursing/ipd_main_panel.php | 175 + .../views/IPD_Nursing/ipd_treatment.php | 188 + .../views/IPD_Package/item_create_V.php | 77 + .../views/IPD_Package/item_item_list.php | 69 + .../views/IPD_Package/item_list_all.php | 71 + .../views/IPD_Package/item_profile_V.php | 168 + .../views/IPD_Package/item_search_V.php | 127 + .../views/IPD_Package/item_type_create.php | 63 + .../views/IPD_Package/item_type_profile.php | 68 + .../views/IPD_Package/item_type_search_v.php | 66 + .../views/IPD_Report/ipd_balance_report.php | 85 + old_code_ci3/views/Invoice/Case_Form_V.php | 150 + .../views/Invoice/Case_Form_profile_V.php | 193 + old_code_ci3/views/Invoice/Case_List.php | 53 + .../Invoice/Invoice_Charges_correction.php | 212 + .../views/Invoice/Invoice_charges.php | 27 + .../views/Invoice/Invoice_charges_list.php | 61 + old_code_ci3/views/Invoice/Invoice_opd.php | 29 + .../views/Invoice/Invoice_opd_correction.php | 155 + .../views/Invoice/Invoice_opd_list.php | 48 + .../views/Invoice/Invoice_org_payment.php | 66 + .../views/Invoice/Org_Contingent_bill.php | 82 + .../Invoice/Organization_Invoice_PathLab.php | 224 + ...rganization_Invoice_PathLab_correction.php | 204 + .../Organization_Invoice_PathLab_final_V.php | 364 + .../Invoice/Organization_invoice_print_v.php | 181 + .../Invoice/Organization_invoice_show.php | 137 + old_code_ci3/views/Invoice/case_list_all.php | 159 + old_code_ci3/views/Invoice/caseinvoice_V.php | 422 + .../views/Invoice/caseinvoice_ipd_V.php | 146 + .../views/Invoice/caseinvoice_print_V.php | 186 + old_code_ci3/views/Invoice/invoice_print.php | 183 + .../views/Invoice/invoice_print_a4_double.php | 1 + .../views/Invoice/invoice_print_a5.php | 379 + .../views/Invoice/org_case_payment.php | 142 + old_code_ci3/views/Invoice/payment_edit.php | 202 + .../views/Invoice/payment_req_panel.php | 203 + .../views/Invoice/payment_request_list.php | 103 + old_code_ci3/views/Invoice/payment_search.php | 25 + .../Invoice/print_payment_receipt_org.php | 71 + .../views/Invoice/refund_amount_panel.php | 91 + old_code_ci3/views/Invoice/refund_invoice.php | 106 + old_code_ci3/views/Invoice_PathLab.php | 306 + .../views/Invoice_PathLab_final_V.php | 531 + old_code_ci3/views/Invoice_ipd_credit.php | 275 + .../views/Lab_Panel/lab_date_show.php | 55 + .../views/Lab_Panel/lab_invoice_main.php | 505 + .../Lab_Panel/lab_invoice_main_test_list.php | 93 + .../lab_invoice_main_xray_test_list.php | 59 + .../views/Lab_Panel/lab_invoice_xray.php | 394 + old_code_ci3/views/Lab_Panel/lab_main.php | 95 + .../views/Lab_Panel/lab_report_file_list.php | 20 + .../views/Lab_Panel/lab_report_tab_1.php | 112 + .../views/Lab_Panel/lab_report_tab_path.php | 113 + .../views/Lab_Panel/pathlab_request_list.php | 87 + .../views/Lab_Panel/patient_lab_report.php | 82 + .../views/Lab_Panel/patient_lab_report_1.php | 89 + .../Lab_Panel/patient_lab_report_apollo.php | 147 + .../Lab_Panel/patient_lab_report_bajaj.php | 58 + .../patient_lab_report_bajaj_plain.php | 60 + .../Lab_Panel/patient_lab_report_svh.php | 74 + .../patient_lab_report_svh_plain.php | 90 + .../patient_lab_xray_report copy.php | 100 + .../Lab_Panel/patient_lab_xray_report_amh.php | 103 + old_code_ci3/views/LeftSide.php | 107 + .../views/MasterData/emp_master_add.php | 75 + .../views/MasterData/emp_master_edit.php | 77 + .../views/MasterData/employee_master_list.php | 52 + .../views/MasterData/location_master_add.php | 56 + .../views/MasterData/location_master_edit.php | 56 + old_code_ci3/views/MasterData/tag_master.php | 0 .../views/MasterData/tag_master_add.php | 55 + .../views/MasterData/tag_master_index.php | 58 + old_code_ci3/views/Medical/Dashboard.php | 64 + .../views/Medical/Draft_Med_Invoice.php | 128 + .../Medical/Draft_Med_Return_Invoice.php | 132 + old_code_ci3/views/Medical/Drug_Details.php | 110 + .../views/Medical/Drug_Details_all.php | 46 + old_code_ci3/views/Medical/Drug_Stock.php | 123 + old_code_ci3/views/Medical/Drug_Stock_Add.php | 292 + .../views/Medical/IPD_return_medicine.php | 207 + .../views/Medical/Invoice_OLD_Master.php | 200 + .../views/Medical/Invoice_med_list.php | 117 + old_code_ci3/views/Medical/Med_Item_List.php | 112 + .../views/Medical/Med_Item_old_list.php | 46 + .../views/Medical/Med_Model_Payment.php | 326 + old_code_ci3/views/Medical/Med_Payment.php | 308 + .../views/Medical/Med_Payment_Receipt.php | 113 + .../Medical/Med_Return_Invoice_search.php | 67 + old_code_ci3/views/Medical/Med_back_Panel.php | 177 + .../views/Medical/Med_old_invoice_list.php | 65 + .../views/Medical/Medical_Final_Invoice.php | 471 + .../views/Medical/Medical_Invoice_Return.php | 212 + .../Medical/Medical_Invoice_Return_V.php | 294 + .../Medical/Medical_Invoice_Return_list.php | 45 + .../Medical/Medical_Invoice_Return_pre.php | 148 + .../Medical/Medical_Invoice_Return_print.php | 142 + .../views/Medical/Medical_Invoice_V copy.php | 567 + .../views/Medical/Medical_Invoice_V.php | 627 + .../views/Medical/Medical_invoice_list.php | 353 + .../views/Medical/Medical_invoice_print.php | 174 + .../views/Medical/Medical_invoice_print_1.php | 176 + .../views/Medical/Medical_invoice_print_2.php | 172 + .../Medical/Medical_invoice_print_all.php | 191 + .../Medical_invoice_print_all_provisional.php | 173 + .../views/Medical/Medical_ipd_org_list.php | 65 + .../views/Medical/Medical_org_invoicelist.php | 97 + .../views/Medical/Medical_org_list.php | 49 + .../views/Medical/Medical_stock_drug.php | 116 + .../views/Medical/Patient_Search_Result.php | 48 + .../Medical/Print/Medical_return_medicine.php | 128 + .../views/Medical/Print/Medicine_List.php | 84 + .../Print/Medicine_consolidated_List.php | 101 + .../Medical/Print/medical_bill_print_a5.php | 220 + .../Print/medical_bill_print_a5_discount.php | 228 + .../Print/medical_bill_print_a5_old.php | 209 + .../Medical/Print/medical_bill_print_a6.php | 211 + .../Print/medical_bill_print_format.php | 206 + .../medical_bill_print_format_newpage.php | 150 + .../medical_bill_print_format_single.php | 208 + .../medical_bill_print_format_with_return.php | 280 + .../Print/medical_cash_received_bill.php | 84 + .../views/Medical/Purchase/company_Edit.php | 76 + .../views/Medical/Purchase/company_list.php | 60 + .../Medical/Purchase/company_list_sub.php | 27 + .../Medical/Purchase/drug_master_list.php | 30 + .../Medical/Purchase/indent_req_list.php | 30 + .../Purchase/indent_req_list_search.php | 57 + .../Medical/Purchase/indent_request_edit.php | 203 + .../Purchase/indent_request_item_list.php | 43 + .../Medical/Purchase/indent_request_view.php | 60 + .../Medical/Purchase/ledger_add_entry.php | 85 + .../views/Medical/Purchase/ledger_data.php | 61 + .../Medical/Purchase/ledger_data_print.php | 114 + .../Medical/Purchase/ledger_edit_entry.php | 87 + .../Purchase/ledger_payment_data_print.php | 103 + .../Purchase/ledger_payment_data_show.php | 57 + .../Medical/Purchase/med_product_cat_list.php | 57 + .../Purchase/medicine_category_Sub.php | 25 + .../Purchase/medicine_category_edit.php | 59 + .../Medical/Purchase/new_indent_request.php | 56 + .../Medical/Purchase/new_purchase_invoice.php | 78 + .../views/Medical/Purchase/product_edit.php | 388 + .../views/Medical/Purchase/product_new.php | 247 + .../Purchase/product_search_result.php | 51 + .../Purchase/purchase_challan_list.php | 37 + .../Medical/Purchase/purchase_file_show.php | 70 + .../Purchase/purchase_invoice_edit.php | 533 + .../Purchase/purchase_invoice_item.php | 79 + .../Purchase/purchase_invoice_master_edit.php | 286 + .../Purchase/purchase_invoice_scan.php | 112 + .../Medical/Purchase/purchase_item_old.php | 37 + .../Medical/Purchase/purchase_supp_list.php | 74 + .../Medical/Purchase/scan_purchase_list.php | 31 + .../views/Medical/Purchase/supplier_Edit.php | 139 + .../Medical/Purchase/supplier_account.php | 61 + .../Purchase/supplier_account_detail.php | 91 + .../Purchase/supplier_account_payment.php | 89 + .../views/Medical/Purchase/supplier_list.php | 32 + .../Medical/Purchase/supplier_master.php | 60 + .../Medical/Purchase/supplier_master_sub.php | 30 + .../views/Medical/Purchase_Invoice_Edit.php | 386 + .../Medical/Report/IPD_Discharge_Report.php | 79 + .../Medical/Report/Med_Payment_Recevie.php | 105 + .../views/Medical/Report/Med_Report_1.php | 80 + .../views/Medical/Report/Med_Report_2.php | 77 + .../Medical/Report/Med_Report_2_Pending.php | 86 + .../Report/Med_Report_2_Pending_paid.php | 51 + .../views/Medical/Report/Med_Report_3.php | 79 + .../views/Medical/Report/Med_Report_4.php | 80 + .../views/Medical/Report/Med_Report_5.php | 101 + .../views/Medical/Report/Med_Report_7.php | 106 + .../Report/Med_Report_Doc_med_sale.php | 100 + .../Medical/Report/Med_Report_IPD_Credit.php | 91 + .../Report/Med_Report_company_med_sale.php | 119 + .../Report/Med_Report_daily_med_doc_sale.php | 110 + .../Report/Med_Report_daily_med_sale.php | 79 + .../views/Medical/Report/Med_high_pending.php | 69 + .../views/Medical/Report/Purchase_Invoice.php | 120 + .../Medical/Report/Report_Med_patient.php | 127 + .../Report/Report_Med_patient_result.php | 67 + .../views/Medical/Report/Report_gst_1.php | 79 + .../Report/Report_org_invoice_list.php | 96 + old_code_ci3/views/Medical/Search_Patient.php | 22 + .../views/Medical/Stock/Lost_medicine.php | 80 + .../views/Medical/Stock/Short_medicine.php | 106 + .../Medical/Stock/Stock_search_qty_result.php | 96 + .../Medical/Stock/Stock_search_result.php | 120 + .../views/Medical/Stock/expiry_stock_list.php | 51 + .../Stock/indent_accept_items_list.php | 86 + .../Medical/Stock/indent_counter_edit.php | 213 + .../Stock/indent_counter_item_list.php | 36 + .../Medical/Stock/indent_counter_list.php | 41 + .../Stock/indent_counter_search_result.php | 58 + .../views/Medical/Stock/indent_issue.php | 0 .../Medical/Stock/indent_issue_item_view.php | 38 + .../Medical/Stock/indent_issue_items.php | 78 + .../Stock/indent_req_view_with_store.php | 65 + .../views/Medical/Stock/indent_request.php | 30 + .../Stock/indent_request_search_result.php | 56 + .../views/Medical/Stock/indent_stock_list.php | 61 + .../views/Medical/Stock/invoice_item_log.php | 80 + .../Medical/Stock/invoice_item_log_data.php | 123 + .../Medical/Stock/main_store_dashboard.php | 75 + .../views/Medical/Stock/merge_product.php | 109 + .../Stock/new_purchase_return_invoice.php | 63 + .../Stock/purchase_invoice_item_print.php | 131 + .../Medical/Stock/purchase_invoice_list.php | 68 + .../Medical/Stock/purchase_product_search.php | 120 + .../views/Medical/Stock/purchase_return.php | 29 + .../Stock/purchase_return_invoice_edit.php | 161 + .../Stock/purchase_return_invoice_item.php | 50 + .../purchase_return_invoice_item_print.php | 114 + .../Medical/Stock/purchase_supp_list.php | 61 + .../views/Medical/Stock/stock_search.php | 58 + .../views/Medical/Stock/stock_transfer.php | 158 + old_code_ci3/views/Medical/Stock_Update.php | 211 + .../Medical/Store/Stock_Item_history.php | 58 + .../Store/Stock_Item_history_removed.php | 60 + .../Store/Stock_Item_history_return.php | 96 + .../Medical/Store/Stock_search_result.php | 208 + .../Medical/Store/stock_store_statement.php | 147 + .../Store/stock_store_statement_data.php | 197 + .../stock_store_statement_data_excel.php | 43 + .../Medical/Store/store_stock_search.php | 143 + .../views/Medical/Store_Dashboard.php | 45 + .../Medical/Storestock/drug_master_list.php | 30 + .../views/Medical/Storestock/product_edit.php | 255 + .../views/Medical/Storestock/product_new.php | 167 + .../Storestock/product_search_result.php | 51 + old_code_ci3/views/Medical/Supplier_Edit.php | 111 + .../views/Medical/Supplier_master.php | 60 + .../views/Medical/Supplier_master_sub.php | 30 + .../views/Medical/check_med_invoice.php | 104 + .../views/Medical/invoice_master_edit.php | 408 + old_code_ci3/views/Medical/mini_invoice.php | 62 + .../views/Medical/new_purchase_invoice.php | 70 + old_code_ci3/views/Medical/payment_edit.php | 208 + old_code_ci3/views/Medical/payment_log.php | 80 + .../views/Medical/payment_log_data.php | 53 + old_code_ci3/views/Medical/payment_search.php | 25 + .../views/Medical/print_bill_on_uhid.php | 88 + .../views/Medical/purchase_invoice_item.php | 62 + .../views/Medical/purchase_supp_list.php | 47 + .../views/Medical/sale_item_list_for_add.php | 30 + old_code_ci3/views/Medical/supplier_list.php | 30 + old_code_ci3/views/Medical_app/dash_main.php | 41 + old_code_ci3/views/Medical_app/index.php | 378 + old_code_ci3/views/Medical_app/ipd_panel.php | 77 + .../views/Medical_app/ipd_panel_search.php | 58 + .../views/Medical_app/ipd_panel_sub.php | 53 + old_code_ci3/views/Medical_app/login.php | 76 + .../views/Medical_app/select_doctor.php | 20 + old_code_ci3/views/Mobile_app/dash_main.php | 76 + old_code_ci3/views/Mobile_app/index.php | 365 + old_code_ci3/views/Mobile_app/ipd_panel.php | 41 + old_code_ci3/views/Mobile_app/login.php | 76 + old_code_ci3/views/Mobile_app/opd_scan.php | 98 + old_code_ci3/views/Mobile_app/opd_scan1.php | 160 + .../views/Mobile_app/patient_opd_profile.php | 138 + .../views/Mobile_app/patient_page.php | 70 + .../views/Mobile_app/patient_search_v.php | 49 + .../views/Mobile_app/person_file_show.php | 206 + .../views/Mobile_app/select_doctor.php | 20 + old_code_ci3/views/OPD/opd_medicince.php | 83 + old_code_ci3/views/OPD/opd_medicince_add.php | 69 + old_code_ci3/views/OPD/opd_medicince_edit.php | 66 + old_code_ci3/views/Org/Org_item_Edit.php | 121 + old_code_ci3/views/Org/Org_packing.php | 32 + old_code_ci3/views/Org/Search_result.php | 53 + old_code_ci3/views/Org/edit_Org_Packing.php | 64 + old_code_ci3/views/Org/new_Org_Packing.php | 63 + old_code_ci3/views/Org/org_list.php | 53 + old_code_ci3/views/Org/org_packing_list.php | 38 + .../views/PathLab_Report/lab_file_scan.php | 73 + .../PathLab_Report/lab_file_scan_whole.php | 73 + .../views/PathLab_Report/lab_file_show.php | 20 + .../views/PathLab_Report/lab_file_upload.php | 26 + .../lab_file_upload_complete.php | 26 + .../views/PathLab_Report/lab_final_print.php | 38 + .../PathLab_Report/lab_final_report_show.php | 56 + .../lab_final_report_show_xray.php | 125 + .../views/PathLab_Report/lab_main.php | 73 + .../views/PathLab_Report/lab_report_edit.php | 174 + .../lab_report_edit_request.php | 49 + .../PathLab_Report/lab_report_file_show.php | 59 + .../PathLab_Report/lab_report_item_edit.php | 376 + .../views/PathLab_Report/lab_report_list.php | 60 + .../views/PathLab_Report/lab_report_print.php | 105 + .../views/PathLab_Report/lab_report_show.php | 55 + .../views/PathLab_Report/lab_report_tab_1.php | 74 + .../PathLab_Report/lab_report_tab_1_1.php | 142 + .../views/PathLab_Report/lab_report_tab_2.php | 170 + .../PathLab_Report/lab_report_tab_2_1.php | 209 + .../views/PathLab_Report/lab_report_tab_3.php | 126 + .../views/PathLab_Report/lab_report_tab_4.php | 129 + .../PathLab_Report/lab_report_tab_4_1.php | 182 + .../PathLab_Report/lab_report_tab_4_2.php | 28 + .../PathLab_Report/lab_report_test_list.php | 103 + .../views/PathLab_Report/lab_test_entry.php | 131 + .../views/PathLab_Report/lab_test_search.php | 70 + .../PathLab_Report/pathlab_request_list.php | 45 + .../PathLab_Report/ultrasound_report_edit.php | 146 + .../ultrasound_template_list.php | 59 + old_code_ci3/views/Patient_Search_V.php | 45 + old_code_ci3/views/Patient_Search_opd.php | 51 + old_code_ci3/views/Patient_V.php | 458 + old_code_ci3/views/Person/OPD_file_upload.php | 114 + old_code_ci3/views/Person/Person_Profile.php | 177 + old_code_ci3/views/Person/opd_file_show.php | 76 + .../views/Person/opd_scan_desktop.php | 149 + old_code_ci3/views/Person/opd_scan_search.php | 40 + .../views/Person/opd_scanfile_upload.php | 27 + .../views/Person/person_file_show.php | 181 + .../views/Person/person_profile_photo.php | 100 + old_code_ci3/views/Person/scan_opd_list.php | 29 + old_code_ci3/views/Person_Edit_V.php | 349 + old_code_ci3/views/Person_profile_V.php | 359 + .../views/Person_profile_V_backup.php | 359 + old_code_ci3/views/Person_profile_V_test.php | 683 + .../views/Report/IPD_Current_List.php | 111 + .../views/Report/OPD_Report_Doctor.php | 97 + old_code_ci3/views/Report/ReportMain.php | 201 + old_code_ci3/views/Report/Report_IPD.php | 200 + old_code_ci3/views/Report/Report_medical.php | 153 + .../views/Report/Report_medical_template.php | 41 + .../views/Report/Report_refer_ipd.php | 126 + .../views/Report/Report_refer_template.php | 35 + .../views/Report/ipd_payment_report.php | 158 + old_code_ci3/views/Report/new 1.php | 60 + old_code_ci3/views/Report/new 1.txt | 143 + .../views/Report/opd_report_total.php | 128 + old_code_ci3/views/Report/opd_report_v.php | 160 + .../views/Report/rep_collocation_emp.php | 156 + old_code_ci3/views/Report/rep_diagnosis.php | 129 + .../views/Report/rep_diagnosis_cash.php | 153 + .../views/Report/rep_diagnosis_empwise.php | 121 + .../views/Report/rep_diagnosis_empwise_2.php | 121 + old_code_ci3/views/Report/rep_lab_item.php | 121 + old_code_ci3/views/Report/rep_opd_p.php | 160 + .../views/Report/rep_other_charge.php | 161 + .../views/Report/rep_total_bank_payment.php | 118 + .../views/Report/rep_total_payment.php | 135 + .../Report/report_Diagnosis_Emp_total_3.php | 11 + old_code_ci3/views/Report3/ECHS_IPD.php | 118 + old_code_ci3/views/Report3/ECHS_OPD.php | 137 + old_code_ci3/views/Report3/diagnosis_qty.php | 116 + .../views/Report4/Report_echs_opd.php | 128 + .../views/Report5/Report_Document.php | 109 + .../views/Report5/Report_XRay_chest.php | 79 + .../views/Report5/Report_corona_suspected.php | 79 + old_code_ci3/views/Report5/Report_dengue.php | 79 + .../Report5/Report_pregnancy_suspected.php | 79 + old_code_ci3/views/Report6/Report_Lab_Log.php | 109 + old_code_ci3/views/ReportMain.php | 124 + old_code_ci3/views/Storestock/Dashboard.php | 37 + .../views/Storestock/Draft_indent.php | 117 + .../views/Storestock/Medical_stock_drug.php | 116 + .../Purchase/new_purchase_invoice.php | 78 + .../Purchase/purchase_challan_list.php | 37 + .../Purchase/purchase_invoice_edit.php | 531 + .../Purchase/purchase_invoice_item.php | 79 + .../Purchase/purchase_invoice_item_print.php | 130 + .../Purchase/purchase_invoice_master_edit.php | 231 + .../Storestock/Purchase/purchase_item_old.php | 31 + .../Purchase/purchase_supp_list.php | 74 + .../Storestock/Purchase/supplier_Edit.php | 120 + .../Storestock/Purchase/supplier_list.php | 32 + .../Storestock/Purchase/supplier_master.php | 60 + .../Purchase/supplier_master_sub.php | 30 + .../Storestock/Stock/location_master_list.php | 52 + .../Storestock/Stock/main_store_dashboard.php | 70 + .../views/Storestock/Stock_Item_history.php | 58 + .../Storestock/Stock_search_qty_result.php | 190 + .../views/Storestock/Store_Final_Invoice.php | 308 + old_code_ci3/views/Storestock/Store_Print.php | 103 + old_code_ci3/views/Storestock/indent_edit.php | 444 + .../views/Storestock/indent_item_list.php | 108 + old_code_ci3/views/Storestock/new_indent.php | 88 + .../views/Storestock/store_stock_search.php | 143 + old_code_ci3/views/TestForm.php | 66 + old_code_ci3/views/TestForm2.php | 405 + old_code_ci3/views/Website.php | 42 + old_code_ci3/views/auth_dst/create_group.php | 43 + old_code_ci3/views/auth_dst/create_user.php | 95 + old_code_ci3/views/auth_dst/edit_group.php | 20 + old_code_ci3/views/auth_dst/edit_user.php | 119 + old_code_ci3/views/auth_dst/index.php | 52 + old_code_ci3/views/auth_dst/login.php | 100 + .../views/auth_dst/profile_update.php | 64 + .../views/center_room/center_room.php | 75 + .../views/dashboard/Investigation_history.php | 69 + .../views/dashboard/OPDPrescription.php | 1203 ++ .../views/dashboard/OPD_old_prescription.php | 195 + old_code_ci3/views/dashboard/appointment.php | 48 + old_code_ci3/views/dashboard/dash1.php | 158 + .../views/dashboard/day_care_format.php | 65 + .../dashboard/invoice_print_a4_double.php | 1 + old_code_ci3/views/dashboard/jkhospital.php | 21 + .../views/dashboard/khrc_opd_parcha.php | 82 + .../dashboard/khrc_opd_parcha_drManmeet.php | 82 + .../dashboard/khrc_opd_parcha_drRahul.php | 82 + .../views/dashboard/opd_appointment_panel.php | 36 + .../views/dashboard/opd_blank_print_ssc.php | 50 + old_code_ci3/views/dashboard/opd_display.php | 166 + .../views/dashboard/opd_invoice_print.php | 44 + .../views/dashboard/opd_letter_head_print.php | 45 + ...opd_letter_head_print_agarwal_hospital.php | 44 + .../opd_letter_head_print_bajaj_neuro.php | 61 + ...pd_letter_head_print_chamunda_hospital.php | 44 + .../dashboard/opd_letter_head_print_khrc.php | 51 + ...pd_letter_head_print_mehrotra_hospital.php | 44 + .../opd_letter_head_print_radiant.php | 55 + ...opd_letter_head_print_radiant_drpoonam.php | 164 + ...d_letter_head_print_radiant_drpoonam_1.php | 22 + ...r_head_print_radiant_drpoonam_21052025.php | 168 + ...opd_letter_head_print_radiant_drpuneet.php | 164 + ...d_letter_head_print_radiant_drvk blank.php | 20 + .../opd_letter_head_print_radiant_drvk.php | 54 + .../dashboard/opd_letter_head_print_ssc.php | 20 + ...opd_letter_head_print_vedanta_hospital.php | 44 + .../opd_letter_head_singhal_drparul.php | 59 + .../opd_letter_head_singhal_drrahul.php | 50 + .../views/dashboard/opd_line_list.php | 48 + old_code_ci3/views/dashboard/opd_list_doc.php | 194 + .../views/dashboard/opd_medical_bill.php | 40 + .../views/dashboard/opd_parcha_ent_care.php | 85 + .../views/dashboard/opd_parcha_radiant.php | 85 + .../views/dashboard/opd_prescribed_advice.php | 13 + .../views/dashboard/opd_prescribed_dose.php | 563 + .../dashboard/opd_prescription_med_list.php | 29 + .../dashboard/opd_prescription_print.php | 87 + .../opd_medicine_edit.php | 127 + .../opd_medicine_panel.php | 175 + .../rx_group_list.php | 31 + .../rx_group_medicine.php | 303 + .../rx_group_medicine_list.php | 26 + .../rx_group_new.php | 60 + .../rx_group_patient.php | 12 + .../rx_group_save.php | 34 + .../rx_group_show.php | 80 + .../rx_patient_old_medicine.php | 163 + old_code_ci3/views/dashboard/opd_prev.php | 93 + .../views/dashboard/opd_print_parcha.php | 21 + .../dashboard/opd_print_parcha_2 copy.php | 21 + .../views/dashboard/opd_print_parcha_2.php | 21 + .../views/dashboard/opd_print_parcha_3.php | 21 + .../views/dashboard/opd_print_parcha_4.php | 20 + ..._print_parcha_Mehrotra_DrAseemMehrotra.php | 20 + .../opd_print_parcha_Mehrotra_hospital.php | 20 + .../opd_print_parcha_agarwal_hospital_ksp.php | 21 + ..._print_parcha_agarwal_hospital_ksp_new.php | 93 + ...d_print_parcha_agarwal_hospital_ksp_ss.php | 97 + .../views/dashboard/opd_print_parcha_ah.php | 20 + .../dashboard/opd_print_parcha_bajaj.php | 35 + .../opd_print_parcha_bajaj_blank.php | 35 + ...opd_print_parcha_chamunda_hospital_ksp.php | 47 + .../opd_print_parcha_drAnkurChauhan.php | 97 + .../dashboard/opd_print_parcha_radiant.php | 22 + .../opd_print_parcha_radiant_drpoonam.php | 21 + .../dashboard/opd_print_parcha_singhal.php | 21 + .../opd_print_parcha_vedanta_hospital_ksp.php | 47 + .../views/dashboard/opd_queue_status.php | 41 + .../dashboard/opd_queue_status_tab_0.php | 50 + .../dashboard/opd_queue_status_tab_1.php | 71 + .../dashboard/opd_queue_status_tab_2.php | 38 + .../dashboard/opd_queue_status_tab_3.php | 37 + .../dashboard/opd_queue_status_total.php | 5 + old_code_ci3/views/dashboard/opd_scan.php | 26 + .../views/dashboard/patient_glucose_data.php | 222 + .../views/dashboard/patient_investigation.php | 122 + .../views/dashboard/patient_remark.php | 158 + .../person_profile_photo_from_doctor.php | 99 + old_code_ci3/views/dashboard/rx_group.php | 62 + .../views/dashboard/rx_group_list.php | 27 + .../rx_print_chamunda_plain_paper.php | 172 + ..._chamunda_pre_print_letter_head_format.php | 120 + ...rx_print_chamunda_rx_blank_letter_head.php | 150 + .../dashboard/rx_print_devbhumi_plain.php | 144 + ..._print_drJoshiclinic_letterhead - Copy.php | 65 + .../rx_print_drJoshiclinic_letterhead.php | 75 + .../rx_print_drjoshiclinic_plain_paper.php | 162 + ...shiclinic_pre_print_letter_head_format.php | 114 + ...int_drjoshiclinic_rx_blank_letter_head.php | 143 + .../rx_print_letterhead_drbcjoshi.php | 102 + .../dashboard/rx_print_letterhead_singhal.php | 64 + ...print_mehrotra_aseem_blank_letter_head.php | 124 + ...tra_aseem_pre_print_letter_head_format.php | 98 + .../rx_print_mehrotra_plain_paper.php | 144 + ..._mehrotra_pre_print_letter_head_format.php | 94 + ...x_print_mehrotra_rx_blank_letter_head..php | 124 + .../dashboard/rx_print_sahara_plain_paper.php | 90 + .../rx_print_singhal_plain_paper.php | 144 + ...t_singhal_pre_print_letter_head_format.php | 94 + .../rx_print_singhal_rx_blank_letter_head.php | 124 + .../dashboard/rx_print_svh_plain_paper.php | 152 + ...print_svh_pre_print_letter_head_format.php | 104 + .../rx_print_svh_rx_blank_letter_head.php | 131 + .../rx_print_vedanta_plain_paper.php | 144 + ...t_vedanta_pre_print_letter_head_format.php | 94 + .../rx_print_vedanta_rx_blank_letter_head.php | 124 + .../views/dashboard/samarpit_opd_parcha.php | 98 + .../views/dashboard/shri_ram_hospital.php | 57 + .../views/doctor_conf_room/doctor_room.php | 0 old_code_ci3/views/echs_profile_V.php | 247 + old_code_ci3/views/echs_register_V.php | 174 + old_code_ci3/views/echs_search_V.php | 42 + old_code_ci3/views/errors/cli/error_404.php | 8 + old_code_ci3/views/errors/cli/error_db.php | 8 + .../views/errors/cli/error_exception.php | 21 + .../views/errors/cli/error_general.php | 8 + old_code_ci3/views/errors/cli/error_php.php | 21 + old_code_ci3/views/errors/cli/index.html | 11 + old_code_ci3/views/errors/html/error_404.php | 64 + old_code_ci3/views/errors/html/error_db.php | 64 + .../views/errors/html/error_exception.php | 32 + .../views/errors/html/error_general.php | 64 + old_code_ci3/views/errors/html/error_php.php | 33 + old_code_ci3/views/errors/html/index.html | 11 + old_code_ci3/views/errors/index.html | 11 + old_code_ci3/views/form.php | 66 + .../views/hospital_refer/reffer_add.php | 78 + .../views/hospital_refer/reffer_edit.php | 78 + .../views/hospital_refer/reffer_index.php | 61 + old_code_ci3/views/index.html | 11 + .../views/insurance/insurance_card.php | 135 + .../views/insurance/insurance_create_V.php | 74 + .../views/insurance/insurance_profile_V.php | 207 + .../views/insurance/insurance_search_v.php | 62 + old_code_ci3/views/insurance_V.php | 7 + .../views/invoice_pathlab_print_V.php | 223 + old_code_ci3/views/invoice_print_v.php | 183 + old_code_ci3/views/invoice_show.php | 145 + .../views/invoiceshow/invoice_charges.php | 161 + .../views/invoiceshow/invoice_medical.php | 138 + old_code_ci3/views/item/item_create_V.php | 77 + old_code_ci3/views/item/item_item_list.php | 69 + old_code_ci3/views/item/item_list_all.php | 71 + old_code_ci3/views/item/item_profile_V.php | 181 + old_code_ci3/views/item/item_search_V.php | 135 + old_code_ci3/views/item/item_type_create.php | 63 + old_code_ci3/views/item/item_type_profile.php | 62 + .../views/item/item_type_search_v.php | 66 + old_code_ci3/views/item_ipd/item_create_V.php | 77 + .../views/item_ipd/item_item_list.php | 69 + old_code_ci3/views/item_ipd/item_list_all.php | 71 + .../views/item_ipd/item_profile_V.php | 177 + old_code_ci3/views/item_ipd/item_search_V.php | 131 + .../views/item_ipd/item_type_create.php | 50 + .../views/item_ipd/item_type_profile.php | 58 + .../views/item_ipd/item_type_search_v.php | 63 + old_code_ci3/views/opd_app_insurance_V.php | 151 + old_code_ci3/views/opd_appointment_V.php | 156 + old_code_ci3/views/opd_invoice_V.php | 516 + old_code_ci3/views/opd_letter_head.php | 86 + .../print_format/opd_print_letter_head.php | 35 + old_code_ci3/views/search_adv_data.php | 11 + old_code_ci3/views/setting/setting_main.php | 64 + old_code_ci3/views/temp_edit.php | 22 + old_code_ci3/views/test.html | 146 + old_code_ci3/views/testcode/test2.html | 68 + old_code_ci3/views/testcode/test_1.php | 52 + old_code_ci3/views/testcode/test_2 | 1 + old_code_ci3/views/testphp.php | 33 + old_code_ci3/views/welcome_message.php | 89 + old_code_ci3/views/welcome_message.txt | 10 + old_code_ci3/views/workplace/Adminpanel.php | 0 old_code_ci3/views/workplace/workpanel.php | 46 + phpunit.xml.dist | 63 + preload.php | 112 + public/.htaccess | 49 + public/assets/css/style.css | 1233 ++ public/assets/images/no_image.svg | 5 + public/assets/img/apple-touch-icon.png | Bin 0 -> 1201 bytes public/assets/img/card.jpg | Bin 0 -> 165599 bytes public/assets/img/favicon.png | Bin 0 -> 610 bytes public/assets/img/logo.png | Bin 0 -> 738 bytes public/assets/img/messages-1.jpg | Bin 0 -> 6459 bytes public/assets/img/messages-2.jpg | Bin 0 -> 5484 bytes public/assets/img/messages-3.jpg | Bin 0 -> 21803 bytes public/assets/img/news-1.jpg | Bin 0 -> 83411 bytes public/assets/img/news-2.jpg | Bin 0 -> 78239 bytes public/assets/img/news-3.jpg | Bin 0 -> 71055 bytes public/assets/img/news-4.jpg | Bin 0 -> 115012 bytes public/assets/img/news-5.jpg | Bin 0 -> 93369 bytes public/assets/img/not-found.svg | 1 + public/assets/img/product-1.jpg | Bin 0 -> 17719 bytes public/assets/img/product-2.jpg | Bin 0 -> 28529 bytes public/assets/img/product-3.jpg | Bin 0 -> 14432 bytes public/assets/img/product-4.jpg | Bin 0 -> 9212 bytes public/assets/img/product-5.jpg | Bin 0 -> 12406 bytes public/assets/img/profile-img.jpg | Bin 0 -> 4957 bytes public/assets/img/slides-1.jpg | Bin 0 -> 87910 bytes public/assets/img/slides-2.jpg | Bin 0 -> 70502 bytes public/assets/img/slides-3.jpg | Bin 0 -> 97983 bytes public/assets/js/main.js | 319 + public/assets/scss/_dashboard.scss | 226 + public/assets/scss/_footer.scss | 21 + public/assets/scss/_general.scss | 85 + public/assets/scss/_header.scss | 238 + public/assets/scss/_override.scss | 252 + public/assets/scss/_pages.scss | 270 + public/assets/scss/_sidebar.scss | 156 + public/assets/scss/_variables.scss | 25 + public/assets/scss/style.scss | 12 + public/favicon.ico | Bin 0 -> 5430 bytes public/index.php | 59 + public/robots.txt | 2 + .../20260224/OPD-2039655-1771950192.jpg | Bin 0 -> 177094 bytes .../20260224/OPD-2039655-1771960747.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039656-1771950821.jpg | Bin 0 -> 177094 bytes .../20260224/OPD-2039657-1771951558.jpg | Bin 0 -> 177094 bytes .../20260224/OPD-2039658-1771952012.jpg | Bin 0 -> 177094 bytes .../20260224/OPD-2039658-1771952047.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039659-1771952773.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039659-1771953025.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039660-1771953326.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039660-1771953522.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039660-1771953704.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039661-1771953846.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039661-1771960355.jpg | Bin 0 -> 116802 bytes .../20260224/OPD-2039662-1771954055.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039662-1771955886.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039662-1771960420.jpg | Bin 0 -> 283837 bytes .../20260224/OPD-2039663-1771956114.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039664-1771956306.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039664-1771959964.jpg | Bin 0 -> 132057 bytes .../20260224/OPD-2039665-1771957663.jpg | Bin 0 -> 200295 bytes .../20260224/OPD-2039665-1771958057.jpg | Bin 0 -> 200295 bytes .../patient/profile_284688_1770403396.jpg | Bin 0 -> 76471 bytes .../patient/profile_284688_1770403403.jpg | Bin 0 -> 77445 bytes .../patient/profile_284688_1770403428.jpg | Bin 0 -> 77629 bytes .../patient/profile_284688_1770469356.jpg | Bin 0 -> 68674 bytes .../patient/profile_295041_1770404193.jpg | Bin 0 -> 75014 bytes spark | 87 + tests/.htaccess | 6 + tests/README.md | 118 + .../2020-02-22-222222_example_migration.php | 37 + .../_support/Database/Seeds/ExampleSeeder.php | 41 + tests/_support/Libraries/ConfigReader.php | 19 + tests/_support/Models/ExampleModel.php | 24 + tests/database/ExampleDatabaseTest.php | 46 + tests/index.html | 11 + tests/session/ExampleSessionTest.php | 17 + tests/unit/HealthTest.php | 49 + writable/.htaccess | 6 + writable/cache/index.html | 11 + writable/debugbar/index.html | 11 + writable/index.html | 11 + writable/logs/index.html | 11 + writable/session/index.html | 11 + writable/tmp_check_ai_settings.php | 36 + writable/uploads/index.html | 11 + 1330 files changed, 250693 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 WORKLOG_COPILOT.md create mode 100644 app/.htaccess create mode 100644 app/Commands/BridgeSync.php create mode 100644 app/Common.php create mode 100644 app/Config/App.php create mode 100644 app/Config/Auth.php create mode 100644 app/Config/AuthGroups.php create mode 100644 app/Config/AuthToken.php create mode 100644 app/Config/Autoload.php create mode 100644 app/Config/Boot/development.php create mode 100644 app/Config/Boot/production.php create mode 100644 app/Config/Boot/testing.php create mode 100644 app/Config/CURLRequest.php create mode 100644 app/Config/Cache.php create mode 100644 app/Config/Constants.php create mode 100644 app/Config/ContentSecurityPolicy.php create mode 100644 app/Config/Cookie.php create mode 100644 app/Config/Cors.php create mode 100644 app/Config/Database.php create mode 100644 app/Config/DocTypes.php create mode 100644 app/Config/Email.php create mode 100644 app/Config/Encryption.php create mode 100644 app/Config/Events.php create mode 100644 app/Config/Exceptions.php create mode 100644 app/Config/Feature.php create mode 100644 app/Config/Filters.php create mode 100644 app/Config/ForeignCharacters.php create mode 100644 app/Config/Format.php create mode 100644 app/Config/Generators.php create mode 100644 app/Config/Honeypot.php create mode 100644 app/Config/Hostnames.php create mode 100644 app/Config/Images.php create mode 100644 app/Config/Kint.php create mode 100644 app/Config/Logger.php create mode 100644 app/Config/Migrations.php create mode 100644 app/Config/Mimes.php create mode 100644 app/Config/Modules.php create mode 100644 app/Config/Optimize.php create mode 100644 app/Config/Pager.php create mode 100644 app/Config/Paths.php create mode 100644 app/Config/Publisher.php create mode 100644 app/Config/Routes.php create mode 100644 app/Config/Routing.php create mode 100644 app/Config/Security.php create mode 100644 app/Config/Services.php create mode 100644 app/Config/Session.php create mode 100644 app/Config/Toolbar.php create mode 100644 app/Config/UserAgents.php create mode 100644 app/Config/Validation.php create mode 100644 app/Config/View.php create mode 100644 app/Config/WorkerMode.php create mode 100644 app/Controllers/BaseController.php create mode 100644 app/Controllers/Billing/CaseMaster.php create mode 100644 app/Controllers/Billing/Charges.php create mode 100644 app/Controllers/Billing/Ipd.php create mode 100644 app/Controllers/Diagnosis.php create mode 100644 app/Controllers/Home.php create mode 100644 app/Controllers/Invoice.php create mode 100644 app/Controllers/Item.php create mode 100644 app/Controllers/ItemIpd.php create mode 100644 app/Controllers/Medical.php create mode 100644 app/Controllers/OcasePathLap.php create mode 100644 app/Controllers/Opd.php create mode 100644 app/Controllers/Opd_prescription.php create mode 100644 app/Controllers/Opdcase.php create mode 100644 app/Controllers/OrgPacking.php create mode 100644 app/Controllers/Package.php create mode 100644 app/Controllers/Patient.php create mode 100644 app/Controllers/Payment_Medical.php create mode 100644 app/Controllers/Report.php create mode 100644 app/Controllers/Setting/Admin.php create mode 100644 app/Controllers/Setting/AiSettings.php create mode 100644 app/Controllers/Setting/Bank.php create mode 100644 app/Controllers/Setting/BedManagement.php create mode 100644 app/Controllers/Setting/Charges.php create mode 100644 app/Controllers/Setting/Doctor.php create mode 100644 app/Controllers/Setting/Insurance.php create mode 100644 app/Controllers/Setting/MedicalBank.php create mode 100644 app/Controllers/Setting/Reffer.php create mode 100644 app/Controllers/Setting/Template.php create mode 100644 app/Controllers/Setting/UserManagement.php create mode 100644 app/Database/Migrations/.gitkeep create mode 100644 app/Database/Migrations/2026-02-06-000001_CreatePatientDuplicateLog.php create mode 100644 app/Database/Migrations/2026-02-08-000001_CreateDocIpdFeeType.php create mode 100644 app/Database/Migrations/2026-02-08-000002_AddGstAgreementToInsurance.php create mode 100644 app/Database/Migrations/2026-02-14-000002_CreateCheckItemRequestFunction.php create mode 100644 app/Database/Migrations/2026-02-17-000001_BackfillMedicalInvoiceCodes.php create mode 100644 app/Database/Migrations/2026-02-18-000001_CreateMedicalBankTables.php create mode 100644 app/Database/Migrations/2026-02-18-000002_AddPharmacyStockReportIndexes.php create mode 100644 app/Database/Migrations/2026-02-18-000003_CreateMedicalProductCategoryTable.php create mode 100644 app/Database/Migrations/2026-02-18-000004_AlignMedicalProductCategoryTableSchema.php create mode 100644 app/Database/Migrations/2026-02-21-000001_CreateClinicalAuditTrailTable.php create mode 100644 app/Database/Migrations/2026-02-21-000002_CreateOpdFhirDocumentTable.php create mode 100644 app/Database/Migrations/2026-02-21-000003_CreateComplaintsMasterTable.php create mode 100644 app/Database/Migrations/2026-02-21-000004_CreateBridgeSyncQueueTable.php create mode 100644 app/Database/Migrations/2026-02-21-000005_CreateLabAiExtractionTables.php create mode 100644 app/Database/Migrations/2026-02-24-000001_AddDoctorRegistrationNoToDoctorMaster.php create mode 100644 app/Database/Migrations/2026-02-24-000002_CreateOpdMedicineUserPreferenceTables.php create mode 100644 app/Database/Migrations/2026-02-24-000003_AddDosageRestrictionToOpdMedMaster.php create mode 100644 app/Database/Migrations/2026-02-24-000004_AddAiScanColumnsToFileUploadData.php create mode 100644 app/Database/Seeds/.gitkeep create mode 100644 app/Database/Seeds/ClinicalTemplateWorkspaceSeeder.php create mode 100644 app/Database/Seeds/ComplaintsMasterSeeder.php create mode 100644 app/Database/Seeds/OpdDemoCleanupSeeder.php create mode 100644 app/Database/Seeds/OpdDemoLargeSeeder.php create mode 100644 app/Database/Seeds/OpdDemoMasterSeeder.php create mode 100644 app/Filters/.gitkeep create mode 100644 app/Helpers/.gitkeep create mode 100644 app/Helpers/age_helper.php create mode 100644 app/Helpers/common_helper.php create mode 100644 app/Language/.gitkeep create mode 100644 app/Language/en/Auth.php create mode 100644 app/Language/en/Validation.php create mode 100644 app/Libraries/.gitkeep create mode 100644 app/Libraries/BridgeSyncService.php create mode 100644 app/Libraries/ClinicalAuditTrail.php create mode 100644 app/Libraries/FhirR4Builder.php create mode 100644 app/Models/.gitkeep create mode 100644 app/Models/BankModel.php create mode 100644 app/Models/BedAssignmentHistoryModel.php create mode 100644 app/Models/BedCategoryModel.php create mode 100644 app/Models/BedMaintenanceLogModel.php create mode 100644 app/Models/BedMasterModel.php create mode 100644 app/Models/BloodGroupModel.php create mode 100644 app/Models/BridgeSyncQueueModel.php create mode 100644 app/Models/ClinicalAuditTrailModel.php create mode 100644 app/Models/DoctorModel.php create mode 100644 app/Models/InsuranceModel.php create mode 100644 app/Models/InvoiceModel.php create mode 100644 app/Models/IpdBillingModel.php create mode 100644 app/Models/IpdModel.php create mode 100644 app/Models/ItemIpdModel.php create mode 100644 app/Models/ItemModel.php create mode 100644 app/Models/MedicalBankModel.php create mode 100644 app/Models/MedicalModel.php create mode 100644 app/Models/OpdMedicineModel.php create mode 100644 app/Models/OpdModel.php create mode 100644 app/Models/OrganizationCaseModel.php create mode 100644 app/Models/PackageModel.php create mode 100644 app/Models/PathLabModel.php create mode 100644 app/Models/PatientModel.php create mode 100644 app/Models/PaymentModel.php create mode 100644 app/Models/RefferModel.php create mode 100644 app/Models/WardModel.php create mode 100644 app/ThirdParty/.gitkeep create mode 100644 app/Validation/AbdmRules.php create mode 100644 app/Views/Invoice/Case_Form_V.php create mode 100644 app/Views/Invoice/Case_Form_profile_V.php create mode 100644 app/Views/Invoice/Case_List.php create mode 100644 app/Views/Invoice/Invoice_org_payment.php create mode 100644 app/Views/Invoice/Org_Contingent_bill.php create mode 100644 app/Views/Invoice/Organization_Invoice_PathLab.php create mode 100644 app/Views/Invoice/Organization_Invoice_PathLab_final_V.php create mode 100644 app/Views/Invoice/Organization_invoice_print_v.php create mode 100644 app/Views/Invoice/case_list_all.php create mode 100644 app/Views/Invoice/caseinvoice_V.php create mode 100644 app/Views/Invoice/caseinvoice_ipd_V.php create mode 100644 app/Views/Invoice/caseinvoice_print_V.php create mode 100644 app/Views/Invoice/org_case_payment.php create mode 100644 app/Views/Invoice/payment_req_panel.php create mode 100644 app/Views/Invoice/payment_request_list.php create mode 100644 app/Views/Invoice/refund_amount_panel.php create mode 100644 app/Views/Invoice/refund_invoice.php create mode 100644 app/Views/PathLab_Report/_test_option_table.php create mode 100644 app/Views/PathLab_Report/lab_report_edit.php create mode 100644 app/Views/PathLab_Report/lab_report_item_edit.php create mode 100644 app/Views/PathLab_Report/lab_report_list.php create mode 100644 app/Views/PathLab_Report/lab_report_test_list.php create mode 100644 app/Views/PathLab_Report/lab_test_search.php create mode 100644 app/Views/PathLab_Report/ultrasound_report_edit.php create mode 100644 app/Views/PathLab_Report/ultrasound_template_list.php create mode 100644 app/Views/Setting/Admin/Doctor/temp/Doctor_Search_V.php create mode 100644 app/Views/Setting/Admin/Doctor/temp/Doctor_V.php create mode 100644 app/Views/Setting/Admin/Doctor/temp/Doctor_profile_V.php create mode 100644 app/Views/Setting/Admin/UserManagement/create.php create mode 100644 app/Views/Setting/Admin/UserManagement/edit.php create mode 100644 app/Views/Setting/Admin/UserManagement/index.php create mode 100644 app/Views/Setting/Admin/UserManagement/permissions.php create mode 100644 app/Views/Setting/Admin/UserManagement/reset_password.php create mode 100644 app/Views/Setting/Admin/ai_settings.php create mode 100644 app/Views/Setting/Admin/index.php create mode 100644 app/Views/Setting/Bank/bank_search_v.php create mode 100644 app/Views/Setting/Bed/assignment_history.php create mode 100644 app/Views/Setting/Bed/bed_list.php create mode 100644 app/Views/Setting/Bed/category_list.php create mode 100644 app/Views/Setting/Bed/index.php create mode 100644 app/Views/Setting/Bed/maintenance_list.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_create_V.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_insurance_list.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_item_excel.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_item_list.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_profile_V.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_search_V.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_search_adv.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_type_create.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_type_profile.php create mode 100644 app/Views/Setting/Charges/IPD_Charges/item_type_search_v.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_create_V.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_insurance_list.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_item_excel.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_item_list.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_profile_V.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_search_V.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_search_adv.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_type_create.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_type_profile.php create mode 100644 app/Views/Setting/Charges/OPD_Charges/item_type_search_v.php create mode 100644 app/Views/Setting/Charges/Package/item_create_V.php create mode 100644 app/Views/Setting/Charges/Package/item_insurance_list.php create mode 100644 app/Views/Setting/Charges/Package/item_item_excel.php create mode 100644 app/Views/Setting/Charges/Package/item_item_list.php create mode 100644 app/Views/Setting/Charges/Package/item_profile_V.php create mode 100644 app/Views/Setting/Charges/Package/item_search_V.php create mode 100644 app/Views/Setting/Charges/Package/item_search_adv.php create mode 100644 app/Views/Setting/Charges/Package/item_type_create.php create mode 100644 app/Views/Setting/Charges/Package/item_type_profile.php create mode 100644 app/Views/Setting/Charges/Package/item_type_search_v.php create mode 100644 app/Views/Setting/Charges/index.php create mode 100644 app/Views/Setting/Doctor/Doctor_Search_V.php create mode 100644 app/Views/Setting/Doctor/Doctor_V.php create mode 100644 app/Views/Setting/Doctor/Doctor_profile_V.php create mode 100644 app/Views/Setting/Doctor/Ipd_FeeType_List.php create mode 100644 app/Views/Setting/Doctor/Spec_List.php create mode 100644 app/Views/Setting/Insurance/insurance_create_V.php create mode 100644 app/Views/Setting/Insurance/insurance_profile_V.php create mode 100644 app/Views/Setting/Insurance/insurance_search_v.php create mode 100644 app/Views/Setting/MedicalBank/bank_search_v.php create mode 100644 app/Views/Setting/Reffer/reffer_add.php create mode 100644 app/Views/Setting/Reffer/reffer_edit.php create mode 100644 app/Views/Setting/Reffer/reffer_index.php create mode 100644 app/Views/Setting/Reffer/reffer_type_list.php create mode 100644 app/Views/Setting/Reffer/temp/hospital_refer/reffer_add.php create mode 100644 app/Views/Setting/Reffer/temp/hospital_refer/reffer_edit.php create mode 100644 app/Views/Setting/Reffer/temp/hospital_refer/reffer_index.php create mode 100644 app/Views/Setting/Template/index.php create mode 100644 app/Views/account/my_profile.php create mode 100644 app/Views/auth/login.php create mode 100644 app/Views/auth/register.php create mode 100644 app/Views/billing/Patient_Cards_V.php create mode 100644 app/Views/billing/Patient_File_Upload_V.php create mode 100644 app/Views/billing/Patient_Profile_Image_V.php create mode 100644 app/Views/billing/Patient_Profile_Opd_V.php create mode 100644 app/Views/billing/Patient_Search_V.php create mode 100644 app/Views/billing/Patient_Search_opd.php create mode 100644 app/Views/billing/Patient_V.php create mode 100644 app/Views/billing/Person_Edit_V.php create mode 100644 app/Views/billing/Person_profile_V.php create mode 100644 app/Views/billing/charges/charges_invoice_edit.php create mode 100644 app/Views/billing/charges/charges_invoice_show.php create mode 100644 app/Views/billing/ipd/cash_balance.php create mode 100644 app/Views/billing/ipd/cash_balance_table.php create mode 100644 app/Views/billing/ipd/current_admission.php create mode 100644 app/Views/billing/ipd/dashboard.php create mode 100644 app/Views/billing/ipd/invoice_list.php create mode 100644 app/Views/billing/ipd/ipd_model_payment_box.php create mode 100644 app/Views/billing/ipd/ipd_panel_deduction_payment.php create mode 100644 app/Views/billing/ipd/ipd_panel_tpa_payment.php create mode 100644 app/Views/billing/ipd/ipd_payment_receipt_print.php create mode 100644 app/Views/billing/ipd/panel.php create mode 100644 app/Views/billing/ipd/panel_admission.php create mode 100644 app/Views/billing/ipd/panel_bed_assign.php create mode 100644 app/Views/billing/ipd/panel_bill_details.php create mode 100644 app/Views/billing/ipd/panel_diagnosis.php create mode 100644 app/Views/billing/ipd/panel_discharge.php create mode 100644 app/Views/billing/ipd/panel_ipd_charges.php create mode 100644 app/Views/billing/ipd/panel_medical_bills.php create mode 100644 app/Views/billing/ipd/panel_package.php create mode 100644 app/Views/billing/ipd/panel_payments.php create mode 100644 app/Views/billing/ipd/panel_placeholder.php create mode 100644 app/Views/billing/main.php create mode 100644 app/Views/billing/opd_advice_workspace.php create mode 100644 app/Views/billing/opd_app_insurance_V.php create mode 100644 app/Views/billing/opd_appointment_V.php create mode 100644 app/Views/billing/opd_appointment_dashboard.php create mode 100644 app/Views/billing/opd_appointment_list.php create mode 100644 app/Views/billing/opd_appointment_list_table.php create mode 100644 app/Views/billing/opd_invoice_V.php create mode 100644 app/Views/billing/opd_invoice_pdf_v.php create mode 100644 app/Views/billing/opd_invoice_print_v.php create mode 100644 app/Views/billing/opd_letter_head.php create mode 100644 app/Views/billing/opd_letter_head_pdf.php create mode 100644 app/Views/billing/opd_medicince_workspace.php create mode 100644 app/Views/billing/opd_parts/content/default.html create mode 100644 app/Views/billing/opd_parts/hospital/default.html create mode 100644 app/Views/billing/opd_parts/layout/default.html create mode 100644 app/Views/billing/opd_parts/patient/default.html create mode 100644 app/Views/billing/opd_parts/patient/edit.html create mode 100644 app/Views/billing/opd_parts/patient/list.html create mode 100644 app/Views/billing/opd_prescription_basic.php create mode 100644 app/Views/billing/opd_rx_group_workspace.php create mode 100644 app/Views/billing/opd_scan_history_panel.php create mode 100644 app/Views/billing/opd_scan_last_list.php create mode 100644 app/Views/billing/opd_scan_modal_body.php create mode 100644 app/Views/billing/opd_template_builder.php create mode 100644 app/Views/billing/opd_template_builder_list.php create mode 100644 app/Views/billing/opd_template_workspace.php create mode 100644 app/Views/billing/opd_templates/opd_info_print_letter_head.html create mode 100644 app/Views/billing/opd_templates/opd_info_print_letter_head_1.html create mode 100644 app/Views/billing/opd_templates/opd_print_info_letter_head.html create mode 100644 app/Views/billing/opd_templates/opd_print_parcha_chamunda_hospital_ksp.php create mode 100644 app/Views/billing/opd_templates/rx_print_chamunda_plain_paper.html create mode 100644 app/Views/billing/rx_group_medicine_workspace.php create mode 100644 app/Views/billing/search_adv_data.php create mode 100644 app/Views/dashboard/index.php create mode 100644 app/Views/diagnosis/index.php create mode 100644 app/Views/diagnosis/lab_ai_extracted_values.php create mode 100644 app/Views/diagnosis/lab_date_show.php create mode 100644 app/Views/diagnosis/lab_final_report_show.php create mode 100644 app/Views/diagnosis/lab_final_report_show_xray.php create mode 100644 app/Views/diagnosis/lab_invoice_main_test_list.php create mode 100644 app/Views/diagnosis/lab_report_file_list.php create mode 100644 app/Views/diagnosis/lab_report_tab.php create mode 100644 app/Views/diagnosis/lab_report_tab_path.php create mode 100644 app/Views/diagnosis/pathology_detail.php create mode 100644 app/Views/diagnosis/print_compiled_report.php create mode 100644 app/Views/diagnosis/print_single_report.php create mode 100644 app/Views/diagnosis/request_list.php create mode 100644 app/Views/diagnosis/test_data_entry_form.php create mode 100644 app/Views/diagnosis/test_data_entry_table.php create mode 100644 app/Views/errors/cli/error_404.php create mode 100644 app/Views/errors/cli/error_exception.php create mode 100644 app/Views/errors/cli/production.php create mode 100644 app/Views/errors/html/debug.css create mode 100644 app/Views/errors/html/debug.js create mode 100644 app/Views/errors/html/error_400.php create mode 100644 app/Views/errors/html/error_404.php create mode 100644 app/Views/errors/html/error_exception.php create mode 100644 app/Views/errors/html/production.php create mode 100644 app/Views/medical/company_edit.php create mode 100644 app/Views/medical/company_master.php create mode 100644 app/Views/medical/company_master_sub.php create mode 100644 app/Views/medical/counter_sale_form.php create mode 100644 app/Views/medical/dashboard.php create mode 100644 app/Views/medical/drug_master_list.php create mode 100644 app/Views/medical/expiry_stock_list.php create mode 100644 app/Views/medical/expiry_stock_pdf.php create mode 100644 app/Views/medical/invoice_edit.php create mode 100644 app/Views/medical/invoice_item_log.php create mode 100644 app/Views/medical/invoice_item_log_data.php create mode 100644 app/Views/medical/invoice_master_edit.php create mode 100644 app/Views/medical/invoice_med_draft.php create mode 100644 app/Views/medical/invoice_print.php create mode 100644 app/Views/medical/invoice_print_pdf.php create mode 100644 app/Views/medical/ipd_org_list.php create mode 100644 app/Views/medical/ipd_print_report.php create mode 100644 app/Views/medical/ipd_return_medicine.php create mode 100644 app/Views/medical/main_store_dashboard.php create mode 100644 app/Views/medical/master.php create mode 100644 app/Views/medical/master_report.php create mode 100644 app/Views/medical/med_model_payment.php create mode 100644 app/Views/medical/medical_final_invoice.php create mode 100644 app/Views/medical/medical_invoice_list.php create mode 100644 app/Views/medical/medical_org_invoicelist.php create mode 100644 app/Views/medical/medicine_category_edit.php create mode 100644 app/Views/medical/medicine_category_master.php create mode 100644 app/Views/medical/medicine_category_sub.php create mode 100644 app/Views/medical/merge_product.php create mode 100644 app/Views/medical/mini_invoice.php create mode 100644 app/Views/medical/new_purchase_invoice.php create mode 100644 app/Views/medical/org_list.php create mode 100644 app/Views/medical/patient_search_result.php create mode 100644 app/Views/medical/payment_edit.php create mode 100644 app/Views/medical/payment_log.php create mode 100644 app/Views/medical/payment_log_data.php create mode 100644 app/Views/medical/payment_search.php create mode 100644 app/Views/medical/placeholder.php create mode 100644 app/Views/medical/print_bill_on_uhid.php create mode 100644 app/Views/medical/product_edit.php create mode 100644 app/Views/medical/product_search_result.php create mode 100644 app/Views/medical/purchase_challan_list.php create mode 100644 app/Views/medical/purchase_invoice_edit.php create mode 100644 app/Views/medical/purchase_invoice_item.php create mode 100644 app/Views/medical/purchase_invoice_master_edit.php create mode 100644 app/Views/medical/purchase_item_old.php create mode 100644 app/Views/medical/purchase_supp_list.php create mode 100644 app/Views/medical/purchase_supplier_list.php create mode 100644 app/Views/medical/report_company_med_sale.php create mode 100644 app/Views/medical/report_company_med_sale_data.php create mode 100644 app/Views/medical/report_daily_med_sale.php create mode 100644 app/Views/medical/report_daily_med_sale_data.php create mode 100644 app/Views/medical/report_daily_med_sale_doc.php create mode 100644 app/Views/medical/report_daily_med_sale_doc_data.php create mode 100644 app/Views/medical/report_gst_invoice_hsn_data.php create mode 100644 app/Views/medical/report_gst_invoice_list.php create mode 100644 app/Views/medical/report_gst_invoice_list_data.php create mode 100644 app/Views/medical/report_gst_sale.php create mode 100644 app/Views/medical/report_gst_sale_data.php create mode 100644 app/Views/medical/report_gst_sale_data_pdf.php create mode 100644 app/Views/medical/report_ipd_credit.php create mode 100644 app/Views/medical/report_ipd_credit_data.php create mode 100644 app/Views/medical/report_ipd_discharge.php create mode 100644 app/Views/medical/report_ipd_discharge_data.php create mode 100644 app/Views/medical/report_ipd_sale.php create mode 100644 app/Views/medical/report_ipd_sale_data.php create mode 100644 app/Views/medical/report_med_patient.php create mode 100644 app/Views/medical/report_med_patient_data.php create mode 100644 app/Views/medical/report_med_patient_pdf.php create mode 100644 app/Views/medical/report_org_bills.php create mode 100644 app/Views/medical/report_org_bills_data.php create mode 100644 app/Views/medical/report_purchase_invoice.php create mode 100644 app/Views/medical/report_purchase_invoice_data.php create mode 100644 app/Views/medical/report_purchase_invoice_data_gst.php create mode 100644 app/Views/medical/report_purchase_invoice_data_gst_pdf.php create mode 100644 app/Views/medical/report_purchase_invoice_data_pdf.php create mode 100644 app/Views/medical/report_short_medicine.php create mode 100644 app/Views/medical/report_short_medicine_data.php create mode 100644 app/Views/medical/search_customer.php create mode 100644 app/Views/medical/stock_statement.php create mode 100644 app/Views/medical/stock_statement_data.php create mode 100644 app/Views/medical/stock_transfer.php create mode 100644 app/Views/medical/store_stock_result.php create mode 100644 app/Views/medical/store_stock_search.php create mode 100644 app/Views/medical/supplier_account.php create mode 100644 app/Views/medical/supplier_account_add_entry.php create mode 100644 app/Views/medical/supplier_account_detail.php create mode 100644 app/Views/medical/supplier_account_edit_entry.php create mode 100644 app/Views/medical/supplier_account_ledger_data.php create mode 100644 app/Views/medical/supplier_account_ledger_pdf.php create mode 100644 app/Views/medical/supplier_edit.php create mode 100644 app/Views/medical/supplier_master.php create mode 100644 app/Views/medical/supplier_master_sub.php create mode 100644 app/Views/medical/uhid_report_pdf.php create mode 100644 app/Views/org_packing/cases_list.php create mode 100644 app/Views/org_packing/create.php create mode 100644 app/Views/org_packing/edit.php create mode 100644 app/Views/org_packing/index.php create mode 100644 app/Views/org_packing/print_ipd.php create mode 100644 app/Views/org_packing/print_opd.php create mode 100644 app/Views/org_packing/search_result.php create mode 100644 app/Views/partials/header.php create mode 100644 app/Views/partials/sidebar.php create mode 100644 app/Views/report/collection_report.php create mode 100644 app/Views/report/collection_report_table.php create mode 100644 app/Views/report/diagnosis_report.php create mode 100644 app/Views/report/diagnosis_report_table.php create mode 100644 app/Views/report/insurance_combined_report.php create mode 100644 app/Views/report/insurance_combined_report_table.php create mode 100644 app/Views/report/insurance_credit_main.php create mode 100644 app/Views/report/insurance_ipd_report.php create mode 100644 app/Views/report/insurance_ipd_report_table.php create mode 100644 app/Views/report/insurance_opd_report.php create mode 100644 app/Views/report/insurance_opd_report_table.php create mode 100644 app/Views/welcome_message.php create mode 100644 app/index.html create mode 100644 builds create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 env create mode 100644 old_code_ci3/controllers/Auth.php create mode 100644 old_code_ci3/controllers/Auth_dst copy.php create mode 100644 old_code_ci3/controllers/Auth_dst.php create mode 100644 old_code_ci3/controllers/C_test.php create mode 100644 old_code_ci3/controllers/Dashboard.php create mode 100644 old_code_ci3/controllers/Data.php create mode 100644 old_code_ci3/controllers/Doc_Admin.php create mode 100644 old_code_ci3/controllers/Doctor.php create mode 100644 old_code_ci3/controllers/Document_Patient.php create mode 100644 old_code_ci3/controllers/DotPrint.php create mode 100644 old_code_ci3/controllers/IPD_Nursing.php create mode 100644 old_code_ci3/controllers/Insurance.php create mode 100644 old_code_ci3/controllers/Invoice.php create mode 100644 old_code_ci3/controllers/InvoiceShow.php create mode 100644 old_code_ci3/controllers/Ipd.php create mode 100644 old_code_ci3/controllers/Ipd2.php create mode 100644 old_code_ci3/controllers/IpdNew.php create mode 100644 old_code_ci3/controllers/Ipd_Report.php create mode 100644 old_code_ci3/controllers/Ipd_discharge.php create mode 100644 old_code_ci3/controllers/Item.php create mode 100644 old_code_ci3/controllers/Item_IPD.php create mode 100644 old_code_ci3/controllers/Lab_Admin.php create mode 100644 old_code_ci3/controllers/Lab_Report.php create mode 100644 old_code_ci3/controllers/Master_data.php create mode 100644 old_code_ci3/controllers/Medical.php create mode 100644 old_code_ci3/controllers/Medical_Invoice_PDF.php create mode 100644 old_code_ci3/controllers/Medical_Print.php create mode 100644 old_code_ci3/controllers/Medical_Report.php create mode 100644 old_code_ci3/controllers/Medical_app.php create mode 100644 old_code_ci3/controllers/Medical_backpanel.php create mode 100644 old_code_ci3/controllers/Mobile_app.php create mode 100644 old_code_ci3/controllers/OcasePathLap.php create mode 100644 old_code_ci3/controllers/Ocasemaster.php create mode 100644 old_code_ci3/controllers/Opd.php create mode 100644 old_code_ci3/controllers/Opd2.php create mode 100644 old_code_ci3/controllers/Opd_online_api.php create mode 100644 old_code_ci3/controllers/Opd_prescription.php create mode 100644 old_code_ci3/controllers/Opd_print.php create mode 100644 old_code_ci3/controllers/Opdcase.php create mode 100644 old_code_ci3/controllers/Org_Packing.php create mode 100644 old_code_ci3/controllers/OrganizationInvoice.php create mode 100644 old_code_ci3/controllers/Orgcase.php create mode 100644 old_code_ci3/controllers/Package.php create mode 100644 old_code_ci3/controllers/PathLab.php create mode 100644 old_code_ci3/controllers/Patient.php create mode 100644 old_code_ci3/controllers/Payment.php create mode 100644 old_code_ci3/controllers/Payment_Medical.php create mode 100644 old_code_ci3/controllers/PhoneHMS.php create mode 100644 old_code_ci3/controllers/PhoneSMS.php create mode 100644 old_code_ci3/controllers/Product_master.php create mode 100644 old_code_ci3/controllers/Product_stock_master.php create mode 100644 old_code_ci3/controllers/Reffer.php create mode 100644 old_code_ci3/controllers/Report.php create mode 100644 old_code_ci3/controllers/Report2.php create mode 100644 old_code_ci3/controllers/Report3.php create mode 100644 old_code_ci3/controllers/Report4.php create mode 100644 old_code_ci3/controllers/Report5.php create mode 100644 old_code_ci3/controllers/Report6.php create mode 100644 old_code_ci3/controllers/ReportPanel2.php create mode 100644 old_code_ci3/controllers/Room_bed.php create mode 100644 old_code_ci3/controllers/Setting.php create mode 100644 old_code_ci3/controllers/Stock.php create mode 100644 old_code_ci3/controllers/Storestock.php create mode 100644 old_code_ci3/controllers/Testcont.php create mode 100644 old_code_ci3/controllers/User_Authentication.php create mode 100644 old_code_ci3/controllers/Web_medical.php create mode 100644 old_code_ci3/controllers/Website.php create mode 100644 old_code_ci3/controllers/Welcome.php create mode 100644 old_code_ci3/controllers/Workplace.php create mode 100644 old_code_ci3/controllers/index.html create mode 100644 old_code_ci3/controllers/php_opd_appointment_online.php create mode 100644 old_code_ci3/helpers/commonfunction_helper.php create mode 100644 old_code_ci3/helpers/index.html create mode 100644 old_code_ci3/models/DbRemote_M.php create mode 100644 old_code_ci3/models/DocFormat_M.php create mode 100644 old_code_ci3/models/Doctor_M.php create mode 100644 old_code_ci3/models/DotPrint_M.php create mode 100644 old_code_ci3/models/ECHS_M.php create mode 100644 old_code_ci3/models/FileMedical_M.php create mode 100644 old_code_ci3/models/FileOPDRec_M.php create mode 100644 old_code_ci3/models/File_M.php create mode 100644 old_code_ci3/models/Insurance_M.php create mode 100644 old_code_ci3/models/Invoice_M.php create mode 100644 old_code_ci3/models/Ion_auth_model.php create mode 100644 old_code_ci3/models/IpdDischarge_M.php create mode 100644 old_code_ci3/models/Ipd_M.php create mode 100644 old_code_ci3/models/Item_M.php create mode 100644 old_code_ci3/models/Item_ipd_M.php create mode 100644 old_code_ci3/models/Master_M.php create mode 100644 old_code_ci3/models/Medical_M.php create mode 100644 old_code_ci3/models/Medical_M_03062021.php create mode 100644 old_code_ci3/models/Ocasemaster_M.php create mode 100644 old_code_ci3/models/Opd_M.php create mode 100644 old_code_ci3/models/Package_M.php create mode 100644 old_code_ci3/models/PathLab_M.php create mode 100644 old_code_ci3/models/Patient_M.php create mode 100644 old_code_ci3/models/Patienttag_M.php create mode 100644 old_code_ci3/models/Payment_M.php create mode 100644 old_code_ci3/models/Prescription_M.php create mode 100644 old_code_ci3/models/Product_master_M.php create mode 100644 old_code_ci3/models/Product_stock_master_M.php create mode 100644 old_code_ci3/models/Reffer_M.php create mode 100644 old_code_ci3/models/SMS_M.php create mode 100644 old_code_ci3/models/Stock_M.php create mode 100644 old_code_ci3/models/Store_M.php create mode 100644 old_code_ci3/models/index.html create mode 100644 old_code_ci3/views/AdminMain.php create mode 100644 old_code_ci3/views/ControlSide.php create mode 100644 old_code_ci3/views/DocAdmin/doc_input_list.php create mode 100644 old_code_ci3/views/DocAdmin/doc_item_edit.php create mode 100644 old_code_ci3/views/DocAdmin/doc_letterhead_print.php create mode 100644 old_code_ci3/views/DocAdmin/doc_list.php create mode 100644 old_code_ci3/views/DocAdmin/doc_master_edit.php create mode 100644 old_code_ci3/views/Doctor_Profile/Doctor_Search_V.php create mode 100644 old_code_ci3/views/Doctor_Profile/Doctor_V.php create mode 100644 old_code_ci3/views/Doctor_Profile/Doctor_profile_V.php create mode 100644 old_code_ci3/views/Doctor_Search_V.php create mode 100644 old_code_ci3/views/Doctor_V.php create mode 100644 old_code_ci3/views/Doctor_profile_V.php create mode 100644 old_code_ci3/views/DocumentPatient/Doc_update_pre_value.php create mode 100644 old_code_ci3/views/DocumentPatient/Patient_Doc_Edit.php create mode 100644 old_code_ci3/views/DocumentPatient/Patient_Doc_master.php create mode 100644 old_code_ci3/views/Footer.php create mode 100644 old_code_ci3/views/Header.php create mode 100644 old_code_ci3/views/IPD/Bed_panel.php create mode 100644 old_code_ci3/views/IPD/IPDList_V.php create mode 100644 old_code_ci3/views/IPD/IPD_Medical_Invoice_Panel.php create mode 100644 old_code_ci3/views/IPD/IPD_View.php create mode 100644 old_code_ci3/views/IPD/Ipd_Registration_V.php create mode 100644 old_code_ci3/views/IPD/Ipd_invoice_V.php create mode 100644 old_code_ci3/views/IPD/Ipd_invoice_print_V.php create mode 100644 old_code_ci3/views/IPD/Ipd_invoice_short_all.php create mode 100644 old_code_ci3/views/IPD/Ipdpanel_V.php create mode 100644 old_code_ci3/views/IPD/ipd_account_panel.php create mode 100644 old_code_ci3/views/IPD/ipd_all_list.php create mode 100644 old_code_ci3/views/IPD/ipd_bed_assign.php create mode 100644 old_code_ci3/views/IPD/ipd_bed_status.php create mode 100644 old_code_ci3/views/IPD/ipd_dashboard.php create mode 100644 old_code_ci3/views/IPD/ipd_discharge.php create mode 100644 old_code_ci3/views/IPD/ipd_discharged_status.php create mode 100644 old_code_ci3/views/IPD/ipd_invoice_error_v.php create mode 100644 old_code_ci3/views/IPD/ipd_invoice_items.php create mode 100644 old_code_ci3/views/IPD/ipd_invoice_print_wo_payment.php create mode 100644 old_code_ci3/views/IPD/ipd_main_panel.php create mode 100644 old_code_ci3/views/IPD/ipd_medical_invoice_short.php create mode 100644 old_code_ci3/views/IPD/ipd_model_payment_box.php create mode 100644 old_code_ci3/views/IPD/ipd_package.php create mode 100644 old_code_ci3/views/IPD/ipd_panel_deduction_payment.php create mode 100644 old_code_ci3/views/IPD/ipd_panel_refund.php create mode 100644 old_code_ci3/views/IPD/ipd_payment.php create mode 100644 old_code_ci3/views/IPD/ipd_payment_receipt_print.php create mode 100644 old_code_ci3/views/IPD/ipd_room.php create mode 100644 old_code_ci3/views/IPD/print_ipd_form1.php create mode 100644 old_code_ci3/views/IPD/print_payment_receipt_ipd.php create mode 100644 old_code_ci3/views/IPD/test.php create mode 100644 old_code_ci3/views/IPD2/IPDList_V.php create mode 100644 old_code_ci3/views/IPD2/IPD_Medical_Invoice_Panel.php create mode 100644 old_code_ci3/views/IPD2/IPD_View.php create mode 100644 old_code_ci3/views/IPD2/Ipd_Registration_V.php create mode 100644 old_code_ci3/views/IPD2/Ipd_invoice_V.php create mode 100644 old_code_ci3/views/IPD2/Ipd_invoice_print_TPA_V.php create mode 100644 old_code_ci3/views/IPD2/Ipd_invoice_print_V.php create mode 100644 old_code_ci3/views/IPD2/Ipd_invoice_short_all.php create mode 100644 old_code_ci3/views/IPD2/Ipdpanel_V.php create mode 100644 old_code_ci3/views/IPD2/TPA_Payment.php create mode 100644 old_code_ci3/views/IPD2/ipd_account_panel.php create mode 100644 old_code_ci3/views/IPD2/ipd_all_list.php create mode 100644 old_code_ci3/views/IPD2/ipd_bed_assign.php create mode 100644 old_code_ci3/views/IPD2/ipd_bed_list.php create mode 100644 old_code_ci3/views/IPD2/ipd_bed_status.php create mode 100644 old_code_ci3/views/IPD2/ipd_dashboard.php create mode 100644 old_code_ci3/views/IPD2/ipd_diagnosis_charges.php create mode 100644 old_code_ci3/views/IPD2/ipd_diagnosis_invoice_items.php create mode 100644 old_code_ci3/views/IPD2/ipd_discharge.php create mode 100644 old_code_ci3/views/IPD2/ipd_discharged_status.php create mode 100644 old_code_ci3/views/IPD2/ipd_dues_form.php create mode 100644 old_code_ci3/views/IPD2/ipd_invoice_doc_wise.php create mode 100644 old_code_ci3/views/IPD2/ipd_invoice_error_v.php create mode 100644 old_code_ci3/views/IPD2/ipd_invoice_items.php create mode 100644 old_code_ci3/views/IPD2/ipd_invoice_print_on_letterhead.php create mode 100644 old_code_ci3/views/IPD2/ipd_invoice_print_on_letterhead_wo_payment.php create mode 100644 old_code_ci3/views/IPD2/ipd_invoice_print_wo_payment.php create mode 100644 old_code_ci3/views/IPD2/ipd_main_panel.php create mode 100644 old_code_ci3/views/IPD2/ipd_medical_invoice_short.php create mode 100644 old_code_ci3/views/IPD2/ipd_model_payment_box.php create mode 100644 old_code_ci3/views/IPD2/ipd_package.php create mode 100644 old_code_ci3/views/IPD2/ipd_panel_deduction_payment.php create mode 100644 old_code_ci3/views/IPD2/ipd_panel_refund.php create mode 100644 old_code_ci3/views/IPD2/ipd_payment.php create mode 100644 old_code_ci3/views/IPD2/ipd_payment_receipt_print.php create mode 100644 old_code_ci3/views/IPD2/ipd_room.php create mode 100644 old_code_ci3/views/IPD2/print_ipd_form1.php create mode 100644 old_code_ci3/views/IPD2/print_ipd_form2.php create mode 100644 old_code_ci3/views/IPD2/print_ipd_form2_khrc.php create mode 100644 old_code_ci3/views/IPD2/print_ipd_form3.php create mode 100644 old_code_ci3/views/IPD2/print_ipd_form4.php create mode 100644 old_code_ci3/views/IPD2/print_payment_receipt_ipd.php create mode 100644 old_code_ci3/views/IPD2/test.php create mode 100644 old_code_ci3/views/IPD_Discharge/EJA_discharge_template.php create mode 100644 old_code_ci3/views/IPD_Discharge/EJA_discharge_template_html.php create mode 100644 old_code_ci3/views/IPD_Discharge/SVH_discharge_template.php create mode 100644 old_code_ci3/views/IPD_Discharge/SVH_discharge_template_html.php create mode 100644 old_code_ci3/views/IPD_Discharge/chamunda_discharge_template.php create mode 100644 old_code_ci3/views/IPD_Discharge/chamunda_discharge_template_html.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_discharge_edit.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_discharge_edit1.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_discharge_preview.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_discharge_print.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_discharge_print_format.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_prescription.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_procedure.php create mode 100644 old_code_ci3/views/IPD_Discharge/ipd_surgery.php create mode 100644 old_code_ci3/views/IPD_Discharge/main.php create mode 100644 old_code_ci3/views/IPD_Discharge/radiant_discharge_template.php create mode 100644 old_code_ci3/views/IPD_Discharge/radiant_discharge_template_html.php create mode 100644 old_code_ci3/views/IPD_Discharge/search_ipd_result.php create mode 100644 old_code_ci3/views/IPD_Format/form_admission_histroy_phusical_assessment.php create mode 100644 old_code_ci3/views/IPD_Format/form_fluid_in_out.php create mode 100644 old_code_ci3/views/IPD_Format/form_progress_notes.php create mode 100644 old_code_ci3/views/IPD_Format/form_treatment_chart.php create mode 100644 old_code_ci3/views/IPD_Format/form_vitals_chart.php create mode 100644 old_code_ci3/views/IPD_Format/ipd_sticker_print.php create mode 100644 old_code_ci3/views/IPD_Format/ipd_sticker_print_2.php create mode 100644 old_code_ci3/views/IPD_Format/ipd_sticker_print_3.php create mode 100644 old_code_ci3/views/IPD_Nursing/IPDList_V.php create mode 100644 old_code_ci3/views/IPD_Nursing/IPD_Panel.php create mode 100644 old_code_ci3/views/IPD_Nursing/ipd_main_panel.php create mode 100644 old_code_ci3/views/IPD_Nursing/ipd_treatment.php create mode 100644 old_code_ci3/views/IPD_Package/item_create_V.php create mode 100644 old_code_ci3/views/IPD_Package/item_item_list.php create mode 100644 old_code_ci3/views/IPD_Package/item_list_all.php create mode 100644 old_code_ci3/views/IPD_Package/item_profile_V.php create mode 100644 old_code_ci3/views/IPD_Package/item_search_V.php create mode 100644 old_code_ci3/views/IPD_Package/item_type_create.php create mode 100644 old_code_ci3/views/IPD_Package/item_type_profile.php create mode 100644 old_code_ci3/views/IPD_Package/item_type_search_v.php create mode 100644 old_code_ci3/views/IPD_Report/ipd_balance_report.php create mode 100644 old_code_ci3/views/Invoice/Case_Form_V.php create mode 100644 old_code_ci3/views/Invoice/Case_Form_profile_V.php create mode 100644 old_code_ci3/views/Invoice/Case_List.php create mode 100644 old_code_ci3/views/Invoice/Invoice_Charges_correction.php create mode 100644 old_code_ci3/views/Invoice/Invoice_charges.php create mode 100644 old_code_ci3/views/Invoice/Invoice_charges_list.php create mode 100644 old_code_ci3/views/Invoice/Invoice_opd.php create mode 100644 old_code_ci3/views/Invoice/Invoice_opd_correction.php create mode 100644 old_code_ci3/views/Invoice/Invoice_opd_list.php create mode 100644 old_code_ci3/views/Invoice/Invoice_org_payment.php create mode 100644 old_code_ci3/views/Invoice/Org_Contingent_bill.php create mode 100644 old_code_ci3/views/Invoice/Organization_Invoice_PathLab.php create mode 100644 old_code_ci3/views/Invoice/Organization_Invoice_PathLab_correction.php create mode 100644 old_code_ci3/views/Invoice/Organization_Invoice_PathLab_final_V.php create mode 100644 old_code_ci3/views/Invoice/Organization_invoice_print_v.php create mode 100644 old_code_ci3/views/Invoice/Organization_invoice_show.php create mode 100644 old_code_ci3/views/Invoice/case_list_all.php create mode 100644 old_code_ci3/views/Invoice/caseinvoice_V.php create mode 100644 old_code_ci3/views/Invoice/caseinvoice_ipd_V.php create mode 100644 old_code_ci3/views/Invoice/caseinvoice_print_V.php create mode 100644 old_code_ci3/views/Invoice/invoice_print.php create mode 100644 old_code_ci3/views/Invoice/invoice_print_a4_double.php create mode 100644 old_code_ci3/views/Invoice/invoice_print_a5.php create mode 100644 old_code_ci3/views/Invoice/org_case_payment.php create mode 100644 old_code_ci3/views/Invoice/payment_edit.php create mode 100644 old_code_ci3/views/Invoice/payment_req_panel.php create mode 100644 old_code_ci3/views/Invoice/payment_request_list.php create mode 100644 old_code_ci3/views/Invoice/payment_search.php create mode 100644 old_code_ci3/views/Invoice/print_payment_receipt_org.php create mode 100644 old_code_ci3/views/Invoice/refund_amount_panel.php create mode 100644 old_code_ci3/views/Invoice/refund_invoice.php create mode 100644 old_code_ci3/views/Invoice_PathLab.php create mode 100644 old_code_ci3/views/Invoice_PathLab_final_V.php create mode 100644 old_code_ci3/views/Invoice_ipd_credit.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_date_show.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_invoice_main.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_invoice_main_test_list.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_invoice_main_xray_test_list.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_invoice_xray.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_main.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_report_file_list.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_report_tab_1.php create mode 100644 old_code_ci3/views/Lab_Panel/lab_report_tab_path.php create mode 100644 old_code_ci3/views/Lab_Panel/pathlab_request_list.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report_1.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report_apollo.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report_bajaj.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report_bajaj_plain.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report_svh.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_report_svh_plain.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_xray_report copy.php create mode 100644 old_code_ci3/views/Lab_Panel/patient_lab_xray_report_amh.php create mode 100644 old_code_ci3/views/LeftSide.php create mode 100644 old_code_ci3/views/MasterData/emp_master_add.php create mode 100644 old_code_ci3/views/MasterData/emp_master_edit.php create mode 100644 old_code_ci3/views/MasterData/employee_master_list.php create mode 100644 old_code_ci3/views/MasterData/location_master_add.php create mode 100644 old_code_ci3/views/MasterData/location_master_edit.php create mode 100644 old_code_ci3/views/MasterData/tag_master.php create mode 100644 old_code_ci3/views/MasterData/tag_master_add.php create mode 100644 old_code_ci3/views/MasterData/tag_master_index.php create mode 100644 old_code_ci3/views/Medical/Dashboard.php create mode 100644 old_code_ci3/views/Medical/Draft_Med_Invoice.php create mode 100644 old_code_ci3/views/Medical/Draft_Med_Return_Invoice.php create mode 100644 old_code_ci3/views/Medical/Drug_Details.php create mode 100644 old_code_ci3/views/Medical/Drug_Details_all.php create mode 100644 old_code_ci3/views/Medical/Drug_Stock.php create mode 100644 old_code_ci3/views/Medical/Drug_Stock_Add.php create mode 100644 old_code_ci3/views/Medical/IPD_return_medicine.php create mode 100644 old_code_ci3/views/Medical/Invoice_OLD_Master.php create mode 100644 old_code_ci3/views/Medical/Invoice_med_list.php create mode 100644 old_code_ci3/views/Medical/Med_Item_List.php create mode 100644 old_code_ci3/views/Medical/Med_Item_old_list.php create mode 100644 old_code_ci3/views/Medical/Med_Model_Payment.php create mode 100644 old_code_ci3/views/Medical/Med_Payment.php create mode 100644 old_code_ci3/views/Medical/Med_Payment_Receipt.php create mode 100644 old_code_ci3/views/Medical/Med_Return_Invoice_search.php create mode 100644 old_code_ci3/views/Medical/Med_back_Panel.php create mode 100644 old_code_ci3/views/Medical/Med_old_invoice_list.php create mode 100644 old_code_ci3/views/Medical/Medical_Final_Invoice.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_Return.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_Return_V.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_Return_list.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_Return_pre.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_Return_print.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_V copy.php create mode 100644 old_code_ci3/views/Medical/Medical_Invoice_V.php create mode 100644 old_code_ci3/views/Medical/Medical_invoice_list.php create mode 100644 old_code_ci3/views/Medical/Medical_invoice_print.php create mode 100644 old_code_ci3/views/Medical/Medical_invoice_print_1.php create mode 100644 old_code_ci3/views/Medical/Medical_invoice_print_2.php create mode 100644 old_code_ci3/views/Medical/Medical_invoice_print_all.php create mode 100644 old_code_ci3/views/Medical/Medical_invoice_print_all_provisional.php create mode 100644 old_code_ci3/views/Medical/Medical_ipd_org_list.php create mode 100644 old_code_ci3/views/Medical/Medical_org_invoicelist.php create mode 100644 old_code_ci3/views/Medical/Medical_org_list.php create mode 100644 old_code_ci3/views/Medical/Medical_stock_drug.php create mode 100644 old_code_ci3/views/Medical/Patient_Search_Result.php create mode 100644 old_code_ci3/views/Medical/Print/Medical_return_medicine.php create mode 100644 old_code_ci3/views/Medical/Print/Medicine_List.php create mode 100644 old_code_ci3/views/Medical/Print/Medicine_consolidated_List.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_a5.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_a5_discount.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_a5_old.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_a6.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_format.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_format_newpage.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_format_single.php create mode 100644 old_code_ci3/views/Medical/Print/medical_bill_print_format_with_return.php create mode 100644 old_code_ci3/views/Medical/Print/medical_cash_received_bill.php create mode 100644 old_code_ci3/views/Medical/Purchase/company_Edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/company_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/company_list_sub.php create mode 100644 old_code_ci3/views/Medical/Purchase/drug_master_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/indent_req_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/indent_req_list_search.php create mode 100644 old_code_ci3/views/Medical/Purchase/indent_request_edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/indent_request_item_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/indent_request_view.php create mode 100644 old_code_ci3/views/Medical/Purchase/ledger_add_entry.php create mode 100644 old_code_ci3/views/Medical/Purchase/ledger_data.php create mode 100644 old_code_ci3/views/Medical/Purchase/ledger_data_print.php create mode 100644 old_code_ci3/views/Medical/Purchase/ledger_edit_entry.php create mode 100644 old_code_ci3/views/Medical/Purchase/ledger_payment_data_print.php create mode 100644 old_code_ci3/views/Medical/Purchase/ledger_payment_data_show.php create mode 100644 old_code_ci3/views/Medical/Purchase/med_product_cat_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/medicine_category_Sub.php create mode 100644 old_code_ci3/views/Medical/Purchase/medicine_category_edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/new_indent_request.php create mode 100644 old_code_ci3/views/Medical/Purchase/new_purchase_invoice.php create mode 100644 old_code_ci3/views/Medical/Purchase/product_edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/product_new.php create mode 100644 old_code_ci3/views/Medical/Purchase/product_search_result.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_challan_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_file_show.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_invoice_edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_invoice_item.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_invoice_master_edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_invoice_scan.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_item_old.php create mode 100644 old_code_ci3/views/Medical/Purchase/purchase_supp_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/scan_purchase_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_Edit.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_account.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_account_detail.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_account_payment.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_list.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_master.php create mode 100644 old_code_ci3/views/Medical/Purchase/supplier_master_sub.php create mode 100644 old_code_ci3/views/Medical/Purchase_Invoice_Edit.php create mode 100644 old_code_ci3/views/Medical/Report/IPD_Discharge_Report.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Payment_Recevie.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_1.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_2.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_2_Pending.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_2_Pending_paid.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_3.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_4.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_5.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_7.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_Doc_med_sale.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_IPD_Credit.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_company_med_sale.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_daily_med_doc_sale.php create mode 100644 old_code_ci3/views/Medical/Report/Med_Report_daily_med_sale.php create mode 100644 old_code_ci3/views/Medical/Report/Med_high_pending.php create mode 100644 old_code_ci3/views/Medical/Report/Purchase_Invoice.php create mode 100644 old_code_ci3/views/Medical/Report/Report_Med_patient.php create mode 100644 old_code_ci3/views/Medical/Report/Report_Med_patient_result.php create mode 100644 old_code_ci3/views/Medical/Report/Report_gst_1.php create mode 100644 old_code_ci3/views/Medical/Report/Report_org_invoice_list.php create mode 100644 old_code_ci3/views/Medical/Search_Patient.php create mode 100644 old_code_ci3/views/Medical/Stock/Lost_medicine.php create mode 100644 old_code_ci3/views/Medical/Stock/Short_medicine.php create mode 100644 old_code_ci3/views/Medical/Stock/Stock_search_qty_result.php create mode 100644 old_code_ci3/views/Medical/Stock/Stock_search_result.php create mode 100644 old_code_ci3/views/Medical/Stock/expiry_stock_list.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_accept_items_list.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_counter_edit.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_counter_item_list.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_counter_list.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_counter_search_result.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_issue.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_issue_item_view.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_issue_items.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_req_view_with_store.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_request.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_request_search_result.php create mode 100644 old_code_ci3/views/Medical/Stock/indent_stock_list.php create mode 100644 old_code_ci3/views/Medical/Stock/invoice_item_log.php create mode 100644 old_code_ci3/views/Medical/Stock/invoice_item_log_data.php create mode 100644 old_code_ci3/views/Medical/Stock/main_store_dashboard.php create mode 100644 old_code_ci3/views/Medical/Stock/merge_product.php create mode 100644 old_code_ci3/views/Medical/Stock/new_purchase_return_invoice.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_invoice_item_print.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_invoice_list.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_product_search.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_return.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_return_invoice_edit.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_return_invoice_item.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_return_invoice_item_print.php create mode 100644 old_code_ci3/views/Medical/Stock/purchase_supp_list.php create mode 100644 old_code_ci3/views/Medical/Stock/stock_search.php create mode 100644 old_code_ci3/views/Medical/Stock/stock_transfer.php create mode 100644 old_code_ci3/views/Medical/Stock_Update.php create mode 100644 old_code_ci3/views/Medical/Store/Stock_Item_history.php create mode 100644 old_code_ci3/views/Medical/Store/Stock_Item_history_removed.php create mode 100644 old_code_ci3/views/Medical/Store/Stock_Item_history_return.php create mode 100644 old_code_ci3/views/Medical/Store/Stock_search_result.php create mode 100644 old_code_ci3/views/Medical/Store/stock_store_statement.php create mode 100644 old_code_ci3/views/Medical/Store/stock_store_statement_data.php create mode 100644 old_code_ci3/views/Medical/Store/stock_store_statement_data_excel.php create mode 100644 old_code_ci3/views/Medical/Store/store_stock_search.php create mode 100644 old_code_ci3/views/Medical/Store_Dashboard.php create mode 100644 old_code_ci3/views/Medical/Storestock/drug_master_list.php create mode 100644 old_code_ci3/views/Medical/Storestock/product_edit.php create mode 100644 old_code_ci3/views/Medical/Storestock/product_new.php create mode 100644 old_code_ci3/views/Medical/Storestock/product_search_result.php create mode 100644 old_code_ci3/views/Medical/Supplier_Edit.php create mode 100644 old_code_ci3/views/Medical/Supplier_master.php create mode 100644 old_code_ci3/views/Medical/Supplier_master_sub.php create mode 100644 old_code_ci3/views/Medical/check_med_invoice.php create mode 100644 old_code_ci3/views/Medical/invoice_master_edit.php create mode 100644 old_code_ci3/views/Medical/mini_invoice.php create mode 100644 old_code_ci3/views/Medical/new_purchase_invoice.php create mode 100644 old_code_ci3/views/Medical/payment_edit.php create mode 100644 old_code_ci3/views/Medical/payment_log.php create mode 100644 old_code_ci3/views/Medical/payment_log_data.php create mode 100644 old_code_ci3/views/Medical/payment_search.php create mode 100644 old_code_ci3/views/Medical/print_bill_on_uhid.php create mode 100644 old_code_ci3/views/Medical/purchase_invoice_item.php create mode 100644 old_code_ci3/views/Medical/purchase_supp_list.php create mode 100644 old_code_ci3/views/Medical/sale_item_list_for_add.php create mode 100644 old_code_ci3/views/Medical/supplier_list.php create mode 100644 old_code_ci3/views/Medical_app/dash_main.php create mode 100644 old_code_ci3/views/Medical_app/index.php create mode 100644 old_code_ci3/views/Medical_app/ipd_panel.php create mode 100644 old_code_ci3/views/Medical_app/ipd_panel_search.php create mode 100644 old_code_ci3/views/Medical_app/ipd_panel_sub.php create mode 100644 old_code_ci3/views/Medical_app/login.php create mode 100644 old_code_ci3/views/Medical_app/select_doctor.php create mode 100644 old_code_ci3/views/Mobile_app/dash_main.php create mode 100644 old_code_ci3/views/Mobile_app/index.php create mode 100644 old_code_ci3/views/Mobile_app/ipd_panel.php create mode 100644 old_code_ci3/views/Mobile_app/login.php create mode 100644 old_code_ci3/views/Mobile_app/opd_scan.php create mode 100644 old_code_ci3/views/Mobile_app/opd_scan1.php create mode 100644 old_code_ci3/views/Mobile_app/patient_opd_profile.php create mode 100644 old_code_ci3/views/Mobile_app/patient_page.php create mode 100644 old_code_ci3/views/Mobile_app/patient_search_v.php create mode 100644 old_code_ci3/views/Mobile_app/person_file_show.php create mode 100644 old_code_ci3/views/Mobile_app/select_doctor.php create mode 100644 old_code_ci3/views/OPD/opd_medicince.php create mode 100644 old_code_ci3/views/OPD/opd_medicince_add.php create mode 100644 old_code_ci3/views/OPD/opd_medicince_edit.php create mode 100644 old_code_ci3/views/Org/Org_item_Edit.php create mode 100644 old_code_ci3/views/Org/Org_packing.php create mode 100644 old_code_ci3/views/Org/Search_result.php create mode 100644 old_code_ci3/views/Org/edit_Org_Packing.php create mode 100644 old_code_ci3/views/Org/new_Org_Packing.php create mode 100644 old_code_ci3/views/Org/org_list.php create mode 100644 old_code_ci3/views/Org/org_packing_list.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_file_scan.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_file_scan_whole.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_file_show.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_file_upload.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_file_upload_complete.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_final_print.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_final_report_show.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_final_report_show_xray.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_main.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_edit.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_edit_request.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_file_show.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_item_edit.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_list.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_print.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_show.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_1.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_1_1.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_2.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_2_1.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_3.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_4.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_4_1.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_tab_4_2.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_report_test_list.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_test_entry.php create mode 100644 old_code_ci3/views/PathLab_Report/lab_test_search.php create mode 100644 old_code_ci3/views/PathLab_Report/pathlab_request_list.php create mode 100644 old_code_ci3/views/PathLab_Report/ultrasound_report_edit.php create mode 100644 old_code_ci3/views/PathLab_Report/ultrasound_template_list.php create mode 100644 old_code_ci3/views/Patient_Search_V.php create mode 100644 old_code_ci3/views/Patient_Search_opd.php create mode 100644 old_code_ci3/views/Patient_V.php create mode 100644 old_code_ci3/views/Person/OPD_file_upload.php create mode 100644 old_code_ci3/views/Person/Person_Profile.php create mode 100644 old_code_ci3/views/Person/opd_file_show.php create mode 100644 old_code_ci3/views/Person/opd_scan_desktop.php create mode 100644 old_code_ci3/views/Person/opd_scan_search.php create mode 100644 old_code_ci3/views/Person/opd_scanfile_upload.php create mode 100644 old_code_ci3/views/Person/person_file_show.php create mode 100644 old_code_ci3/views/Person/person_profile_photo.php create mode 100644 old_code_ci3/views/Person/scan_opd_list.php create mode 100644 old_code_ci3/views/Person_Edit_V.php create mode 100644 old_code_ci3/views/Person_profile_V.php create mode 100644 old_code_ci3/views/Person_profile_V_backup.php create mode 100644 old_code_ci3/views/Person_profile_V_test.php create mode 100644 old_code_ci3/views/Report/IPD_Current_List.php create mode 100644 old_code_ci3/views/Report/OPD_Report_Doctor.php create mode 100644 old_code_ci3/views/Report/ReportMain.php create mode 100644 old_code_ci3/views/Report/Report_IPD.php create mode 100644 old_code_ci3/views/Report/Report_medical.php create mode 100644 old_code_ci3/views/Report/Report_medical_template.php create mode 100644 old_code_ci3/views/Report/Report_refer_ipd.php create mode 100644 old_code_ci3/views/Report/Report_refer_template.php create mode 100644 old_code_ci3/views/Report/ipd_payment_report.php create mode 100644 old_code_ci3/views/Report/new 1.php create mode 100644 old_code_ci3/views/Report/new 1.txt create mode 100644 old_code_ci3/views/Report/opd_report_total.php create mode 100644 old_code_ci3/views/Report/opd_report_v.php create mode 100644 old_code_ci3/views/Report/rep_collocation_emp.php create mode 100644 old_code_ci3/views/Report/rep_diagnosis.php create mode 100644 old_code_ci3/views/Report/rep_diagnosis_cash.php create mode 100644 old_code_ci3/views/Report/rep_diagnosis_empwise.php create mode 100644 old_code_ci3/views/Report/rep_diagnosis_empwise_2.php create mode 100644 old_code_ci3/views/Report/rep_lab_item.php create mode 100644 old_code_ci3/views/Report/rep_opd_p.php create mode 100644 old_code_ci3/views/Report/rep_other_charge.php create mode 100644 old_code_ci3/views/Report/rep_total_bank_payment.php create mode 100644 old_code_ci3/views/Report/rep_total_payment.php create mode 100644 old_code_ci3/views/Report/report_Diagnosis_Emp_total_3.php create mode 100644 old_code_ci3/views/Report3/ECHS_IPD.php create mode 100644 old_code_ci3/views/Report3/ECHS_OPD.php create mode 100644 old_code_ci3/views/Report3/diagnosis_qty.php create mode 100644 old_code_ci3/views/Report4/Report_echs_opd.php create mode 100644 old_code_ci3/views/Report5/Report_Document.php create mode 100644 old_code_ci3/views/Report5/Report_XRay_chest.php create mode 100644 old_code_ci3/views/Report5/Report_corona_suspected.php create mode 100644 old_code_ci3/views/Report5/Report_dengue.php create mode 100644 old_code_ci3/views/Report5/Report_pregnancy_suspected.php create mode 100644 old_code_ci3/views/Report6/Report_Lab_Log.php create mode 100644 old_code_ci3/views/ReportMain.php create mode 100644 old_code_ci3/views/Storestock/Dashboard.php create mode 100644 old_code_ci3/views/Storestock/Draft_indent.php create mode 100644 old_code_ci3/views/Storestock/Medical_stock_drug.php create mode 100644 old_code_ci3/views/Storestock/Purchase/new_purchase_invoice.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_challan_list.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_invoice_edit.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_invoice_item.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_invoice_item_print.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_invoice_master_edit.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_item_old.php create mode 100644 old_code_ci3/views/Storestock/Purchase/purchase_supp_list.php create mode 100644 old_code_ci3/views/Storestock/Purchase/supplier_Edit.php create mode 100644 old_code_ci3/views/Storestock/Purchase/supplier_list.php create mode 100644 old_code_ci3/views/Storestock/Purchase/supplier_master.php create mode 100644 old_code_ci3/views/Storestock/Purchase/supplier_master_sub.php create mode 100644 old_code_ci3/views/Storestock/Stock/location_master_list.php create mode 100644 old_code_ci3/views/Storestock/Stock/main_store_dashboard.php create mode 100644 old_code_ci3/views/Storestock/Stock_Item_history.php create mode 100644 old_code_ci3/views/Storestock/Stock_search_qty_result.php create mode 100644 old_code_ci3/views/Storestock/Store_Final_Invoice.php create mode 100644 old_code_ci3/views/Storestock/Store_Print.php create mode 100644 old_code_ci3/views/Storestock/indent_edit.php create mode 100644 old_code_ci3/views/Storestock/indent_item_list.php create mode 100644 old_code_ci3/views/Storestock/new_indent.php create mode 100644 old_code_ci3/views/Storestock/store_stock_search.php create mode 100644 old_code_ci3/views/TestForm.php create mode 100644 old_code_ci3/views/TestForm2.php create mode 100644 old_code_ci3/views/Website.php create mode 100644 old_code_ci3/views/auth_dst/create_group.php create mode 100644 old_code_ci3/views/auth_dst/create_user.php create mode 100644 old_code_ci3/views/auth_dst/edit_group.php create mode 100644 old_code_ci3/views/auth_dst/edit_user.php create mode 100644 old_code_ci3/views/auth_dst/index.php create mode 100644 old_code_ci3/views/auth_dst/login.php create mode 100644 old_code_ci3/views/auth_dst/profile_update.php create mode 100644 old_code_ci3/views/center_room/center_room.php create mode 100644 old_code_ci3/views/dashboard/Investigation_history.php create mode 100644 old_code_ci3/views/dashboard/OPDPrescription.php create mode 100644 old_code_ci3/views/dashboard/OPD_old_prescription.php create mode 100644 old_code_ci3/views/dashboard/appointment.php create mode 100644 old_code_ci3/views/dashboard/dash1.php create mode 100644 old_code_ci3/views/dashboard/day_care_format.php create mode 100644 old_code_ci3/views/dashboard/invoice_print_a4_double.php create mode 100644 old_code_ci3/views/dashboard/jkhospital.php create mode 100644 old_code_ci3/views/dashboard/khrc_opd_parcha.php create mode 100644 old_code_ci3/views/dashboard/khrc_opd_parcha_drManmeet.php create mode 100644 old_code_ci3/views/dashboard/khrc_opd_parcha_drRahul.php create mode 100644 old_code_ci3/views/dashboard/opd_appointment_panel.php create mode 100644 old_code_ci3/views/dashboard/opd_blank_print_ssc.php create mode 100644 old_code_ci3/views/dashboard/opd_display.php create mode 100644 old_code_ci3/views/dashboard/opd_invoice_print.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_agarwal_hospital.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_bajaj_neuro.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_chamunda_hospital.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_khrc.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_mehrotra_hospital.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_1.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_21052025.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpuneet.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk blank.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_ssc.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_print_vedanta_hospital.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_singhal_drparul.php create mode 100644 old_code_ci3/views/dashboard/opd_letter_head_singhal_drrahul.php create mode 100644 old_code_ci3/views/dashboard/opd_line_list.php create mode 100644 old_code_ci3/views/dashboard/opd_list_doc.php create mode 100644 old_code_ci3/views/dashboard/opd_medical_bill.php create mode 100644 old_code_ci3/views/dashboard/opd_parcha_ent_care.php create mode 100644 old_code_ci3/views/dashboard/opd_parcha_radiant.php create mode 100644 old_code_ci3/views/dashboard/opd_prescribed_advice.php create mode 100644 old_code_ci3/views/dashboard/opd_prescribed_dose.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_med_list.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_print.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_edit.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_panel.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_list.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine_list.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_new.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_patient.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_save.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_show.php create mode 100644 old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_patient_old_medicine.php create mode 100644 old_code_ci3/views/dashboard/opd_prev.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_2 copy.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_2.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_3.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_4.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_DrAseemMehrotra.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_hospital.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_new.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_ss.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_ah.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_bajaj.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_bajaj_blank.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_chamunda_hospital_ksp.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_drAnkurChauhan.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_radiant.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_radiant_drpoonam.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_singhal.php create mode 100644 old_code_ci3/views/dashboard/opd_print_parcha_vedanta_hospital_ksp.php create mode 100644 old_code_ci3/views/dashboard/opd_queue_status.php create mode 100644 old_code_ci3/views/dashboard/opd_queue_status_tab_0.php create mode 100644 old_code_ci3/views/dashboard/opd_queue_status_tab_1.php create mode 100644 old_code_ci3/views/dashboard/opd_queue_status_tab_2.php create mode 100644 old_code_ci3/views/dashboard/opd_queue_status_tab_3.php create mode 100644 old_code_ci3/views/dashboard/opd_queue_status_total.php create mode 100644 old_code_ci3/views/dashboard/opd_scan.php create mode 100644 old_code_ci3/views/dashboard/patient_glucose_data.php create mode 100644 old_code_ci3/views/dashboard/patient_investigation.php create mode 100644 old_code_ci3/views/dashboard/patient_remark.php create mode 100644 old_code_ci3/views/dashboard/person_profile_photo_from_doctor.php create mode 100644 old_code_ci3/views/dashboard/rx_group.php create mode 100644 old_code_ci3/views/dashboard/rx_group_list.php create mode 100644 old_code_ci3/views/dashboard/rx_print_chamunda_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_chamunda_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_chamunda_rx_blank_letter_head.php create mode 100644 old_code_ci3/views/dashboard/rx_print_devbhumi_plain.php create mode 100644 old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead - Copy.php create mode 100644 old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead.php create mode 100644 old_code_ci3/views/dashboard/rx_print_drjoshiclinic_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_drjoshiclinic_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_drjoshiclinic_rx_blank_letter_head.php create mode 100644 old_code_ci3/views/dashboard/rx_print_letterhead_drbcjoshi.php create mode 100644 old_code_ci3/views/dashboard/rx_print_letterhead_singhal.php create mode 100644 old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_blank_letter_head.php create mode 100644 old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_mehrotra_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_mehrotra_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_mehrotra_rx_blank_letter_head..php create mode 100644 old_code_ci3/views/dashboard/rx_print_sahara_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_singhal_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_singhal_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_singhal_rx_blank_letter_head.php create mode 100644 old_code_ci3/views/dashboard/rx_print_svh_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_svh_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_svh_rx_blank_letter_head.php create mode 100644 old_code_ci3/views/dashboard/rx_print_vedanta_plain_paper.php create mode 100644 old_code_ci3/views/dashboard/rx_print_vedanta_pre_print_letter_head_format.php create mode 100644 old_code_ci3/views/dashboard/rx_print_vedanta_rx_blank_letter_head.php create mode 100644 old_code_ci3/views/dashboard/samarpit_opd_parcha.php create mode 100644 old_code_ci3/views/dashboard/shri_ram_hospital.php create mode 100644 old_code_ci3/views/doctor_conf_room/doctor_room.php create mode 100644 old_code_ci3/views/echs_profile_V.php create mode 100644 old_code_ci3/views/echs_register_V.php create mode 100644 old_code_ci3/views/echs_search_V.php create mode 100644 old_code_ci3/views/errors/cli/error_404.php create mode 100644 old_code_ci3/views/errors/cli/error_db.php create mode 100644 old_code_ci3/views/errors/cli/error_exception.php create mode 100644 old_code_ci3/views/errors/cli/error_general.php create mode 100644 old_code_ci3/views/errors/cli/error_php.php create mode 100644 old_code_ci3/views/errors/cli/index.html create mode 100644 old_code_ci3/views/errors/html/error_404.php create mode 100644 old_code_ci3/views/errors/html/error_db.php create mode 100644 old_code_ci3/views/errors/html/error_exception.php create mode 100644 old_code_ci3/views/errors/html/error_general.php create mode 100644 old_code_ci3/views/errors/html/error_php.php create mode 100644 old_code_ci3/views/errors/html/index.html create mode 100644 old_code_ci3/views/errors/index.html create mode 100644 old_code_ci3/views/form.php create mode 100644 old_code_ci3/views/hospital_refer/reffer_add.php create mode 100644 old_code_ci3/views/hospital_refer/reffer_edit.php create mode 100644 old_code_ci3/views/hospital_refer/reffer_index.php create mode 100644 old_code_ci3/views/index.html create mode 100644 old_code_ci3/views/insurance/insurance_card.php create mode 100644 old_code_ci3/views/insurance/insurance_create_V.php create mode 100644 old_code_ci3/views/insurance/insurance_profile_V.php create mode 100644 old_code_ci3/views/insurance/insurance_search_v.php create mode 100644 old_code_ci3/views/insurance_V.php create mode 100644 old_code_ci3/views/invoice_pathlab_print_V.php create mode 100644 old_code_ci3/views/invoice_print_v.php create mode 100644 old_code_ci3/views/invoice_show.php create mode 100644 old_code_ci3/views/invoiceshow/invoice_charges.php create mode 100644 old_code_ci3/views/invoiceshow/invoice_medical.php create mode 100644 old_code_ci3/views/item/item_create_V.php create mode 100644 old_code_ci3/views/item/item_item_list.php create mode 100644 old_code_ci3/views/item/item_list_all.php create mode 100644 old_code_ci3/views/item/item_profile_V.php create mode 100644 old_code_ci3/views/item/item_search_V.php create mode 100644 old_code_ci3/views/item/item_type_create.php create mode 100644 old_code_ci3/views/item/item_type_profile.php create mode 100644 old_code_ci3/views/item/item_type_search_v.php create mode 100644 old_code_ci3/views/item_ipd/item_create_V.php create mode 100644 old_code_ci3/views/item_ipd/item_item_list.php create mode 100644 old_code_ci3/views/item_ipd/item_list_all.php create mode 100644 old_code_ci3/views/item_ipd/item_profile_V.php create mode 100644 old_code_ci3/views/item_ipd/item_search_V.php create mode 100644 old_code_ci3/views/item_ipd/item_type_create.php create mode 100644 old_code_ci3/views/item_ipd/item_type_profile.php create mode 100644 old_code_ci3/views/item_ipd/item_type_search_v.php create mode 100644 old_code_ci3/views/opd_app_insurance_V.php create mode 100644 old_code_ci3/views/opd_appointment_V.php create mode 100644 old_code_ci3/views/opd_invoice_V.php create mode 100644 old_code_ci3/views/opd_letter_head.php create mode 100644 old_code_ci3/views/print_format/opd_print_letter_head.php create mode 100644 old_code_ci3/views/search_adv_data.php create mode 100644 old_code_ci3/views/setting/setting_main.php create mode 100644 old_code_ci3/views/temp_edit.php create mode 100644 old_code_ci3/views/test.html create mode 100644 old_code_ci3/views/testcode/test2.html create mode 100644 old_code_ci3/views/testcode/test_1.php create mode 100644 old_code_ci3/views/testcode/test_2 create mode 100644 old_code_ci3/views/testphp.php create mode 100644 old_code_ci3/views/welcome_message.php create mode 100644 old_code_ci3/views/welcome_message.txt create mode 100644 old_code_ci3/views/workplace/Adminpanel.php create mode 100644 old_code_ci3/views/workplace/workpanel.php create mode 100644 phpunit.xml.dist create mode 100644 preload.php create mode 100644 public/.htaccess create mode 100644 public/assets/css/style.css create mode 100644 public/assets/images/no_image.svg create mode 100644 public/assets/img/apple-touch-icon.png create mode 100644 public/assets/img/card.jpg create mode 100644 public/assets/img/favicon.png create mode 100644 public/assets/img/logo.png create mode 100644 public/assets/img/messages-1.jpg create mode 100644 public/assets/img/messages-2.jpg create mode 100644 public/assets/img/messages-3.jpg create mode 100644 public/assets/img/news-1.jpg create mode 100644 public/assets/img/news-2.jpg create mode 100644 public/assets/img/news-3.jpg create mode 100644 public/assets/img/news-4.jpg create mode 100644 public/assets/img/news-5.jpg create mode 100644 public/assets/img/not-found.svg create mode 100644 public/assets/img/product-1.jpg create mode 100644 public/assets/img/product-2.jpg create mode 100644 public/assets/img/product-3.jpg create mode 100644 public/assets/img/product-4.jpg create mode 100644 public/assets/img/product-5.jpg create mode 100644 public/assets/img/profile-img.jpg create mode 100644 public/assets/img/slides-1.jpg create mode 100644 public/assets/img/slides-2.jpg create mode 100644 public/assets/img/slides-3.jpg create mode 100644 public/assets/js/main.js create mode 100644 public/assets/scss/_dashboard.scss create mode 100644 public/assets/scss/_footer.scss create mode 100644 public/assets/scss/_general.scss create mode 100644 public/assets/scss/_header.scss create mode 100644 public/assets/scss/_override.scss create mode 100644 public/assets/scss/_pages.scss create mode 100644 public/assets/scss/_sidebar.scss create mode 100644 public/assets/scss/_variables.scss create mode 100644 public/assets/scss/style.scss create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 public/uploads/20260224/OPD-2039655-1771950192.jpg create mode 100644 public/uploads/20260224/OPD-2039655-1771960747.jpg create mode 100644 public/uploads/20260224/OPD-2039656-1771950821.jpg create mode 100644 public/uploads/20260224/OPD-2039657-1771951558.jpg create mode 100644 public/uploads/20260224/OPD-2039658-1771952012.jpg create mode 100644 public/uploads/20260224/OPD-2039658-1771952047.jpg create mode 100644 public/uploads/20260224/OPD-2039659-1771952773.jpg create mode 100644 public/uploads/20260224/OPD-2039659-1771953025.jpg create mode 100644 public/uploads/20260224/OPD-2039660-1771953326.jpg create mode 100644 public/uploads/20260224/OPD-2039660-1771953522.jpg create mode 100644 public/uploads/20260224/OPD-2039660-1771953704.jpg create mode 100644 public/uploads/20260224/OPD-2039661-1771953846.jpg create mode 100644 public/uploads/20260224/OPD-2039661-1771960355.jpg create mode 100644 public/uploads/20260224/OPD-2039662-1771954055.jpg create mode 100644 public/uploads/20260224/OPD-2039662-1771955886.jpg create mode 100644 public/uploads/20260224/OPD-2039662-1771960420.jpg create mode 100644 public/uploads/20260224/OPD-2039663-1771956114.jpg create mode 100644 public/uploads/20260224/OPD-2039664-1771956306.jpg create mode 100644 public/uploads/20260224/OPD-2039664-1771959964.jpg create mode 100644 public/uploads/20260224/OPD-2039665-1771957663.jpg create mode 100644 public/uploads/20260224/OPD-2039665-1771958057.jpg create mode 100644 public/uploads/patient/profile_284688_1770403396.jpg create mode 100644 public/uploads/patient/profile_284688_1770403403.jpg create mode 100644 public/uploads/patient/profile_284688_1770403428.jpg create mode 100644 public/uploads/patient/profile_284688_1770469356.jpg create mode 100644 public/uploads/patient/profile_295041_1770404193.jpg create mode 100644 spark create mode 100644 tests/.htaccess create mode 100644 tests/README.md create mode 100644 tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php create mode 100644 tests/_support/Database/Seeds/ExampleSeeder.php create mode 100644 tests/_support/Libraries/ConfigReader.php create mode 100644 tests/_support/Models/ExampleModel.php create mode 100644 tests/database/ExampleDatabaseTest.php create mode 100644 tests/index.html create mode 100644 tests/session/ExampleSessionTest.php create mode 100644 tests/unit/HealthTest.php create mode 100644 writable/.htaccess create mode 100644 writable/cache/index.html create mode 100644 writable/debugbar/index.html create mode 100644 writable/index.html create mode 100644 writable/logs/index.html create mode 100644 writable/session/index.html create mode 100644 writable/tmp_check_ai_settings.php create mode 100644 writable/uploads/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87e86b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,126 @@ +#------------------------- +# Operating Specific Junk Files +#------------------------- + +# OS X +.DS_Store +.AppleDouble +.LSOverride + +# OS X Thumbnails +._* + +# Windows image file caches +Thumbs.db +ehthumbs.db +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Linux +*~ + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +#------------------------- +# Environment Files +#------------------------- +# These should never be under version control, +# as it poses a security risk. +.env +.vagrant +Vagrantfile + +#------------------------- +# Temporary Files +#------------------------- +writable/cache/* +!writable/cache/index.html + +writable/logs/* +!writable/logs/index.html + +writable/session/* +!writable/session/index.html + +writable/uploads/* +!writable/uploads/index.html + +writable/debugbar/* +!writable/debugbar/index.html + +php_errors.log + +#------------------------- +# User Guide Temp Files +#------------------------- +user_guide_src/build/* +user_guide_src/cilexer/build/* +user_guide_src/cilexer/dist/* +user_guide_src/cilexer/pycilexer.egg-info/* + +#------------------------- +# Test Files +#------------------------- +tests/coverage* + +# Don't save phpunit under version control. +phpunit + +#------------------------- +# Composer +#------------------------- +vendor/ + +#------------------------- +# IDE / Development Files +#------------------------- + +# Modules Testing +_modules/* + +# phpenv local config +.php-version + +# Jetbrains editors (PHPStorm, etc) +.idea/ +*.iml + +# NetBeans +/nbproject/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/nbactions.xml +/nb-configuration.xml +/.nb-gradle/ + +# Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache +*.sublime-workspace +*.sublime-project +.phpintel +/api/ + +# Visual Studio Code +.vscode/ + +/results/ +/phpunit*.xml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..24728f6 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 British Columbia Institute of Technology +Copyright (c) 2019-present CodeIgniter Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..45f98af --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# CodeIgniter 4 Application Starter + +## What is CodeIgniter? + +CodeIgniter is a PHP full-stack web framework that is light, fast, flexible and secure. +More information can be found at the [official site](https://codeigniter.com). + +This repository holds a composer-installable app starter. +It has been built from the +[development repository](https://github.com/codeigniter4/CodeIgniter4). + +More information about the plans for version 4 can be found in [CodeIgniter 4](https://forum.codeigniter.com/forumdisplay.php?fid=28) on the forums. + +You can read the [user guide](https://codeigniter.com/user_guide/) +corresponding to the latest version of the framework. + +## Installation & updates + +`composer create-project codeigniter4/appstarter` then `composer update` whenever +there is a new release of the framework. + +When updating, check the release notes to see if there are any changes you might need to apply +to your `app` folder. The affected files can be copied or merged from +`vendor/codeigniter4/framework/app`. + +## Setup + +Copy `env` to `.env` and tailor for your app, specifically the baseURL +and any database settings. + +## Important Change with index.php + +`index.php` is no longer in the root of the project! It has been moved inside the *public* folder, +for better security and separation of components. + +This means that you should configure your web server to "point" to your project's *public* folder, and +not to the project root. A better practice would be to configure a virtual host to point there. A poor practice would be to point your web server to the project root and expect to enter *public/...*, as the rest of your logic and the +framework are exposed. + +**Please** read the user guide for a better explanation of how CI4 works! + +## Repository Management + +We use GitHub issues, in our main repository, to track **BUGS** and to track approved **DEVELOPMENT** work packages. +We use our [forum](http://forum.codeigniter.com) to provide SUPPORT and to discuss +FEATURE REQUESTS. + +This repository is a "distribution" one, built by our release preparation script. +Problems with it can be raised on our forum, or as issues in the main repository. + +## Server Requirements + +PHP version 8.2 or higher is required, with the following extensions installed: + +- [intl](http://php.net/manual/en/intl.requirements.php) +- [mbstring](http://php.net/manual/en/mbstring.installation.php) + +> [!WARNING] +> - The end of life date for PHP 7.4 was November 28, 2022. +> - The end of life date for PHP 8.0 was November 26, 2023. +> - The end of life date for PHP 8.1 was December 31, 2025. +> - If you are still using below PHP 8.2, you should upgrade immediately. +> - The end of life date for PHP 8.2 will be December 31, 2026. + +Additionally, make sure that the following extensions are enabled in your PHP: + +- json (enabled by default - don't turn it off) +- [mysqlnd](http://php.net/manual/en/mysqlnd.install.php) if you plan to use MySQL +- [libcurl](http://php.net/manual/en/curl.requirements.php) if you plan to use the HTTP\CURLRequest library diff --git a/WORKLOG_COPILOT.md b/WORKLOG_COPILOT.md new file mode 100644 index 0000000..200c30d --- /dev/null +++ b/WORKLOG_COPILOT.md @@ -0,0 +1,521 @@ +# Worklog - HMS_CI4_OLD + +Date: 2026-02-08 + +## Summary +Ported OPD Charges, IPD Charges, and Package modules from CI3 to CI4 with consistent NiceAdmin UI, AJAX modal flows, Simple-DataTables, insurance rate handling, and print/Excel exports. + +## OPD Charges +- Controller: app/Controllers/Item.php +- Model: app/Models/ItemModel.php +- Routes: app/Config/Routes.php (group: item) +- Views: app/Views/Setting/Charges/OPD_Charges/ + - item_search_V.php (header buttons: Charge Groups, Add New Charge; filters; print/export) + - item_search_adv.php (list partial with DataTable) + - item_profile_V.php (modal edit; insurance rates; refresh list on update) + - item_create_V.php + - item_type_search_v.php / item_type_profile.php / item_type_create.php + - item_item_list.php (print layout with heading, borders, base rate fallback) + - item_item_excel.php (Excel export) + - item_insurance_list.php (insurance rate table partial) +- Model joins (no DB views): + - items: hc_items + hc_item_type + - insurance items: hc_items_insurance + hc_insurance, filter isdelete=0 +- Print: insurance selection adds Amount + Code; missing insurance uses Base Rate +- Excel: output via response headers (no debug toolbar injection) + +## IPD Charges +- Controller: app/Controllers/ItemIpd.php +- Model: app/Models/ItemIpdModel.php +- Routes: app/Config/Routes.php (groups: item-ipd + legacy Item_IPD) +- Views: app/Views/Setting/Charges/IPD_Charges/ + - item_search_V.php, item_search_adv.php + - item_profile_V.php, item_create_V.php + - item_type_search_v.php / item_type_profile.php / item_type_create.php + - item_item_list.php (print) + - item_item_excel.php (Excel) + - item_insurance_list.php +- Model joins (no DB views): + - items: ipd_items + ipd_item_type + - insurance items: ipd_items_insurance + hc_insurance, filter isdelete=0 + +## Package (IPD Package) +- Controller: app/Controllers/Package.php +- Model: app/Models/PackageModel.php +- Routes: app/Config/Routes.php (groups: package + legacy Package + legacy IPD_Package) +- Views: app/Views/Setting/Charges/Package/ + - item_search_V.php, item_search_adv.php + - item_profile_V.php, item_create_V.php + - item_type_search_v.php / item_type_profile.php / item_type_create.php + - item_item_list.php (print) + - item_item_excel.php (Excel) + - item_insurance_list.php +- Model joins (no DB views): + - packages: package, package_group + - insurance items: package_insurance + hc_insurance, filter isdelete=0 +- Audit tables: package_update and package_insurance_update + - If not present, audit insert skipped (prevents errors) + +## UI + Behavior +- Charges tiles updated: + - setting/charges -> IPD tile uses item-ipd/search + - setting/charges -> Package tile uses package/search +- Modal edits refresh list: + - OPD: window.refreshChargeList() + - IPD: window.refreshChargeList() + - Package: window.refreshPackageList() +- Print buttons in header next to filter; export Excel added +- Print layout: heading with group + insurance; no OPD/IPD or group columns; table borders +- Base rate fallback: if insurance-specific rate missing, show base amount and Code column shows "Base Rate" + +## Known Tables Used +- OPD: hc_items, hc_item_type, hc_items_insurance, hc_items_update, hc_items_insurance_update +- IPD: ipd_items, ipd_item_type, ipd_items_insurance, ipd_items_update, ipd_items_insurance_update +- Package: package, package_group, package_insurance, package_update, package_insurance_update +- Insurance: hc_insurance + +## Notes for Next Session +- If audit tables for Package are required, create migrations for package_update and package_insurance_update. +- If isdelete column missing on insurance tables, remove filter. +- Debug toolbar can break Excel; keep response headers to avoid injection. +- Legacy routes are supported for old JS paths. + +--- + +Date: 2026-02-16 + +## Diagnosis CI3 → CI4 Endpoint Mapping (Lab_Report parity) + +### Fully mapped in CI4 +- `lab_master` → `Diagnosis::labMaster` via `Lab_Report/lab_master` +- `lab_path/{lab_type}` → `Diagnosis::labPathLegacy` via `Lab_Report/lab_path/(:num)` +- `search_lab_4/{lab_type}` → `Diagnosis::searchLab` via `Lab_Report/search_lab_4/(:num)` +- `search_lab_4_srno/{lab_type}` → `Diagnosis::searchLabBySrno` via `Lab_Report/search_lab_4_srno/(:num)` +- `search_lab_4_labno/{lab_type}` → `Diagnosis::searchLabByLabno` via `Lab_Report/search_lab_4_labno/(:num)` +- `select_lab_invoice/{inv_id}/{lab_type}` → `Diagnosis::selectLabInvoicePath` +- `select_lab_invoice_path/{inv_id}/{lab_type}` → `Diagnosis::selectLabInvoicePath` +- `lab_date_show/{inv_id}/{lab_type}` → `Diagnosis::labDateShow` +- `test_list/{inv_id}/{lab_type}` → `Diagnosis::testList` +- `xray_test_list/{inv_id}/{lab_type}` → `Diagnosis::testList` +- `lab_tab_1_process/{test_id}/{lab_type}` → `Diagnosis::labTab1Process` +- `create_report_xray/{req_id}` → `Diagnosis::createReportXray` +- `show_report_final/{req_id}` → `Diagnosis::showReportFinalXray` +- `get_template_xray/{id}` → `Diagnosis::getTemplateXray` +- `Final_Update_xray/{req_id}` → `Diagnosis::finalUpdateXray` +- `confirm_report_xray/{req_id}` → `Diagnosis::confirmReportXray` + +### Missing legacy endpoints (not yet mapped) +- `report_file_list/{inv_id}/{lab_type}/{delete?}` +- `select_lab_radiology/{inv_id}/{lab_type}` + +### Notes +- Current CI4 radiology flow uses `Diagnosis::selectLabInvoicePath` for detail screen and does not require a separate `select_lab_radiology` endpoint in active views. +- File upload/list actions in CI4 diagnosis view are currently placeholders (`uploadFiles`, `showFiles`) and do not yet have controller endpoints. + +## Future Backlog: AI-assisted Image Diagnosis (Ultrasound / X-Ray / CT) + +### Goal +- Add a professional image workspace where users can upload/scan images, review them, run AI-assisted analysis, and move AI draft findings into radiology report editor with doctor review. + +### Phase 1 (MVP - internal) +- Build one modal workspace in diagnosis detail screen: + - Left panel: image preview, next/previous, zoom. + - Right panel: AI findings, AI impression, confidence, doctor editable text. +- Wire existing action buttons: + - Upload Files -> open workspace + upload image. + - Scan -> open workspace + scan image flow. + - Show Files -> list previously uploaded/scanned images. +- Add backend APIs in Diagnosis controller: + - uploadImage(reqId) + - listImages(reqId) + - scanImage(reqId) + - analyzeImageAi(reqId, fileId) + - saveAiDraft(reqId, fileId) + - acceptAiToReport(reqId) +- Add DB table for AI result tracking (suggested: diagnosis_image_ai): + - id, req_id, file_id, ai_findings, ai_impression, confidence, + - model_name, model_version, status, reviewed_by, reviewed_at, + - created_at, updated_at. +- Add visible safety label: AI Suggestion - Doctor Review Required. + +### Phase 2 (real AI integration) +- Integrate external AI service endpoint (Python/FastAPI or equivalent). +- Send selected image path to AI service and store structured response. +- Add timeout/error handling and retry button in UI. + +### Phase 3 (clinical workflow hardening) +- Add audit trail for accepted/edited AI content before final report verify. +- Add role check so only authorized users can accept AI output. +- Keep final confirm manual; AI never auto-verifies reports. + +### UI/Workflow Notes +- AI output should prefill radiology editor, not directly replace final report. +- Show per-image history for repeat review and comparison. +- Keep terminology consistent with current imaging workflow labels. + +--- + +Date: 2026-02-16 + +## Pharmacy Module Kickoff (Legacy Medical) + +### What was verified +- Legacy pharmacy dashboard source is in old code: + - `old_code_ci3/views/Medical/Dashboard.php` +- Main legacy pharmacy controller is very large and feature-rich: + - `old_code_ci3/controllers/Medical.php` (~5k lines) +- Related legacy controllers: + - `old_code_ci3/controllers/Medical_backpanel.php` + - `old_code_ci3/controllers/Medical_Report.php` + - `old_code_ci3/controllers/Medical_Print.php` + - `old_code_ci3/controllers/Payment_Medical.php` + +### Important routing finding +- Current CI4 improved auto-routing is disabled (`app/Config/Routing.php` has `autoRoute = false`). +- No explicit CI4 `/Medical` routes found in `app/Config/Routes.php`. +- No current CI4 Medical controller files found under `app/Controllers`. + +### Legacy dashboard button map (from old Dashboard.php) +- OPD Sale -> `/Medical/search_customer` +- Invoice -> `/Medical/Invoice_Med_Draft` +- IPD/Credit -> `/Medical/list_org_ipd` +- Org. Credit -> `/Medical/list_org` +- Return Counter Sale -> `/Medical/Invoice_Med_Return` +- Day Report -> `/Medical_Report/Report_2` +- Sale Day Report -> `/Medical_Report/Report_1` +- Payment Report -> `/Medical_Report/Report_Payment_Recieved` +- Store Stock -> `/Medical_backpanel/store_stock` +- Store Main -> `/Medical/main_store` +- Master -> `/Medical_backpanel` + +### Suggested migration order (phase wise) +1. Dashboard + navigation tiles. +2. OPD Sale + Invoice Draft list. +3. Return invoice flow. +4. Store stock and stock statement. +5. Reports (day/sale/payment). +6. Backpanel master screens. + +### SQL views received from user (confirmed) +- `v_med_item_return` +- `v_med_item_with_return` +- `v_ipd_list` +- `v_med_short_list` +- `v_product_stock` +- `v_product_stock_sub` +- `v_sale_item` +- `v_sale_item_sub` + +### Dependency note +- `v_ipd_list` depends on `v_ipd_doc_list` (seen in view body join). +- Before CI4 pharmacy migration, ensure `v_ipd_doc_list` exists in target DB with compatible schema. + +### Next implementation start point +- Begin CI4 Pharmacy phase-1 with dashboard route/controller/view parity for `/Medical` tiles, then wire OPD Sale + Draft Invoice list endpoints. + +### Phase-1 implementation done (CI4) +- Added controller: app/Controllers/Medical.php +- Added routes: + - Medical + - Medical/search_customer + - Medical/Invoice_Med_Draft + - Medical/Invoice_Med_Return + - Medical/list_org_ipd + - Medical/list_org + - Medical/main_store + - Medical/store_stock + - Medical/master +- Added views: + - app/Views/medical/dashboard.php + - app/Views/medical/search_customer.php + - app/Views/medical/invoice_med_draft.php + - app/Views/medical/placeholder.php +- Status: + - Dashboard works at /Medical. + - OPD Sale and Invoice Draft panels are functional. + - Remaining tiles currently show migration placeholder pending deeper CI3 parity port. + +--- + +Date: 2026-02-19 + +## Pharmacy -> Master continuation + +### Fix completed +- Module: `Drug Sale Customer Wise Report` +- Endpoint: `Medical::drug_patient_distribute` +- Root-cause fixed in `getDrugPatientDistributeRows()`: + - Legacy behavior: when Drug Name is blank and Schedule filter is blank, show all matching date-range records. + - CI4 regression: returned empty result unless at least one schedule was selected. + - Fix: schedule condition is now applied only when schedules are selected; blank schedule no longer forces empty result. + +### Validation +- `php -l app/Controllers/Medical.php` passed (no syntax errors). + +### Step done: Med. Payment Edit Logs (legacy links) +- Implemented legacy page endpoint: `Payment_Medical/payment_log` +- Implemented legacy result endpoint: `Payment_Medical/payment_log_data` +- Added CI4 controller methods in `app/Controllers/Payment_Medical.php`: + - `payment_log()` for filter page + - `payment_log_data()` for date-range log result table +- Added CI4 views: + - `app/Views/medical/payment_log.php` + - `app/Views/medical/payment_log_data.php` +- Updated routes in `app/Config/Routes.php`: + - `GET Payment_Medical/payment_log -> Payment_Medical::payment_log` + - `GET|POST Payment_Medical/payment_log_data -> Payment_Medical::payment_log_data` +- Updated Master menu link in `app/Views/medical/master.php`: + - `Med. Payment Edit Logs` now opens `Payment_Medical/payment_log` + +### Step fix: Med. Payment Edit action buttons not working +- Root cause: `payment_edit` HTML was injected using `innerHTML` in `payment_search`, so inline ` diff --git a/app/Views/Invoice/Case_Form_profile_V.php b/app/Views/Invoice/Case_Form_profile_V.php new file mode 100644 index 0000000..824ccdf --- /dev/null +++ b/app/Views/Invoice/Case_Form_profile_V.php @@ -0,0 +1,195 @@ +
+

+ Insurance Case + case_id_code ?> +

+ +
+ +
+
+
+ +
+ + + + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+

Remarks + Write some about the problem +

+ +
+ + +
+ +
+ +
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/app/Views/Invoice/Case_List.php b/app/Views/Invoice/Case_List.php new file mode 100644 index 0000000..9308464 --- /dev/null +++ b/app/Views/Invoice/Case_List.php @@ -0,0 +1,53 @@ +
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Case No.Patient NameCase DateCard Holder NameInsuranceOPD AmountInvoice AmountStatus
case_id_code ?>p_name ?>date_registration ?>insurance_card_name ?>insurance_company_name ?>OPD_Amount ?>Invoice_Amount ?>str_status ?>
Case No.Patient NameCase DateCard Holder NameInsuranceOPD AmountInvoice Amount
+
+ +
+
\ No newline at end of file diff --git a/app/Views/Invoice/Invoice_org_payment.php b/app/Views/Invoice/Invoice_org_payment.php new file mode 100644 index 0000000..8678b18 --- /dev/null +++ b/app/Views/Invoice/Invoice_org_payment.php @@ -0,0 +1,64 @@ + + + + + + + + + +
+ + +

+

,
+ +

+org_id ?? '').':'.($req_payment_order[0]->pay_id ?? '').':'.($req_payment_order[0]->payment_amount ?? '').':PT'.date('dmYhis'); +?> + +
+

Org Payment Credit Receipt : pay_id ?? '') ?>

+
+ + + + + + +
Patient Info.
+ UHID : p_code ?? '') ?>
+ Name : title ?? '') ?> p_fname ?? ''))) ?>
+ p_relative ?? '') ?> p_rname ?? ''))) ?>
+ Sex : xgender ?? '') ?> age ?? '') ?> P.No. :mphone1 ?? '') ?> +
+ Org. Case No. : org_code ?? '') ?>
+ Payment Date : payment_date_str ?? '') ?> +
+
+

+ Org Case Payment Amount : Rs. payment_amount ?? '') ?>
+ Amount in Words : Rs.payment_amount ?? 0) ?> +

+

+ Prepared By :payment_accept_by ?? '') ?> +

+

+ Signature +

diff --git a/app/Views/Invoice/Org_Contingent_bill.php b/app/Views/Invoice/Org_Contingent_bill.php new file mode 100644 index 0000000..8095eeb --- /dev/null +++ b/app/Views/Invoice/Org_Contingent_bill.php @@ -0,0 +1,87 @@ +
+
+ +
+
+
+

+ Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + / Ins. Comp. :ins_company_name?> +

+ + + +
+
+
+
+ + +
+
+ +
+
+
+
+ diff --git a/app/Views/Invoice/Organization_Invoice_PathLab.php b/app/Views/Invoice/Organization_Invoice_PathLab.php new file mode 100644 index 0000000..2c43b20 --- /dev/null +++ b/app/Views/Invoice/Organization_Invoice_PathLab.php @@ -0,0 +1,238 @@ +
+

+ Charges + +

+ +
+
+
+ +
+
+
+

Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + insurance_id>0) + { + echo '/ Ins. Comp. :'.$insurance[0]->ins_company_name; + } + ?> +

+ + + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + +
#Charges GroupCharge NameRateQtyAmount
'.$srno.''.$row->item_type.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Gross TotalGtotal?>
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/app/Views/Invoice/Organization_Invoice_PathLab_final_V.php b/app/Views/Invoice/Organization_Invoice_PathLab_final_V.php new file mode 100644 index 0000000..e941ab8 --- /dev/null +++ b/app/Views/Invoice/Organization_Invoice_PathLab_final_V.php @@ -0,0 +1,378 @@ +
+

+ Invoice + #invoice_code ?> +

+ +
+
+ +
+
+ +
+ +
+ +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+
+ +
+ To +
+ p_fname ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?> +
+
+ +
+ Invoice #invoice_code ?>
+
+ insurance_id>1) + { + echo ' Ins. Comp. :'.$insurance[0]->ins_company_name.'
'; + if($invoice_master[0]->insurance_case_id>0) + { + echo ' Org.Case No. :'.$case_master[0]->case_id_code.'
'; + } + } + ?> + Date : inv_date ?>
+ Patient ID : p_code ?>
+ payment_id>0 ) + { + echo 'Payment No. :'.$invoice_master[0]->payment_id.'
'; + } + ?> + + Refer By : refer_by_other ?>
+ + +
+ +
+ + + +
+
+ + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + ?> + + + + + + + + + +
#Charges GroupCharge NameRateQtyAmount
'.$srno.''.$row->desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Amount received : payment_part_received?>Balance Amount : payment_part_balance?>Net Amountnet_amount?>
+
+ +
+ + payment_status==0 || $invoice_master[0]->payment_part ==1 ) { ?> +
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+ insurance_cash==1) { ?> +
+
+

+ + Cash +

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + 0) { ?> +
+ +
+
+
+
+
+ + ipd_code ?> autocomplete="off" readonly> + +
+
+
+
+ + +
+
+
+
+
+
+ insurance_id>0 && $invoice_master[0]->insurance_credit==1) { ?> +
+ +
+
+ 0) { ?> +
+
+
+ + case_id_code ?> autocomplete="off" readonly> + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+ +
+
+ Print +
+
+ Payment Method by : payment_mode_desc ?> +
+
+ + +
+ +
+ + \ No newline at end of file diff --git a/app/Views/Invoice/Organization_invoice_print_v.php b/app/Views/Invoice/Organization_invoice_print_v.php new file mode 100644 index 0000000..0e55ac9 --- /dev/null +++ b/app/Views/Invoice/Organization_invoice_print_v.php @@ -0,0 +1,181 @@ + + + + + + <?= H_Name ?> | Invoice + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ +
+
+ + + +
+ Provisional Invoice #invoice_code ?>
+ insurance_id>0) + { + echo 'Ins. Comp. :'.$insurance[0]->ins_company_name.'
'; + if($invoice_master[0]->insurance_case_id>0) + { + echo ' Org.Case No. :'.$case_master[0]->case_id_code.'
'; + if($invoice_master[0]->insurance_case_id==2) + { + echo ' Service No. :'.$case_master[0]->insurance_no_2.'
'; + } + echo 'Claim ID/No : '.$case_master[0]->insurance_no_1.'
'; + } + } + ?> + Date : inv_date ?>
+ Patient ID : p_code ?>
+ payment_id>0 ) + { + echo 'Payment No. :'.$invoice_master[0]->payment_id.'
'; + } + ?> + + +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+
+ +
+ To +
+ p_fname ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ Refer By : refer_by_other ?>
+
+
+ + +
+ + + +
+
+ + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + ?> + + + + + + + + + + +
#Charges GroupCharge NameRateQtyAmount
'.$srno.''.$row->desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Amount received : payment_part_received?>Balance Amount : payment_part_balance?>Net Amountnet_amount?>
+
+ +
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+
+
+ Prepared By : prepared_by ?> +
+
+ +
+
+ Signature +
+
+
+
+ +
+
+ This is computer generated Provisional invoice , Signature and stamp not required +
+ + +
+ + + diff --git a/app/Views/Invoice/case_list_all.php b/app/Views/Invoice/case_list_all.php new file mode 100644 index 0000000..e303b97 --- /dev/null +++ b/app/Views/Invoice/case_list_all.php @@ -0,0 +1,183 @@ + + +
+
+

Org. Case List

+
+
+
+
+ DataTable plugin is not loaded. Please include jQuery DataTables to enable filtering. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Case No.Claim/Insurance CardPatient Name/P-Code/IPDCase DateCard Holder NameInsuranceStatus
+ + +
+
+
+
+
+ + + \ No newline at end of file diff --git a/app/Views/Invoice/caseinvoice_V.php b/app/Views/Invoice/caseinvoice_V.php new file mode 100644 index 0000000..82e7c1c --- /dev/null +++ b/app/Views/Invoice/caseinvoice_V.php @@ -0,0 +1,497 @@ + + +
+
+
+

+ case_type==0){ + echo 'Organisation OPD Invoice'; + }else{ + echo 'Organisation IPD Invoice'; + } + ?> + Case ID: + + case_id_code?> + +

+ +
+
+
+
+
+ +
+
+
+
Name: p_fname?>
+
Age: age?>
+
Gender: xgender?>
+
P Code: p_code?>
+
Ins. Comp.: ins_company_name?>
+
Case Type: case_type==0 ? 'OPD' : 'IPD'?>
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + status<2) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + }else{ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + $Gamount=$Gamount+$row->Amount; + } + foreach($showinvoice2 as $row) + { + $srno=$srno+1; + if($orgcase[0]->status<2) + { + if(($row->discount_amount ?? 0) > 0){ + $readonly = 'readonly'; + $disabled = 'disabled'; + $rate = $row->d_rate ?? $row->item_rate; + $discription = $row->Description.' (Discounted) Rate : '.$row->item_rate; + }else{ + $readonly = ''; + $disabled = ''; + $rate = $row->item_rate; + $discription = $row->Description; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + }else{ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + $Gamount=$Gamount+$row->Amount; + } + ?> + + + + + + + + + + + + + + +
#Date : InvIDCharges TypeDescriptionQtyRateAmountOrg. CodeAction
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->item_rate.''.$row->Amount.''.$row->orgcode.'
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->item_rate.''.$row->Amount.''.$row->orgcode.'
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$discription.''.$row->item_qty.''.$row->Amount.'
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->item_rate.''.$row->Amount.''.$row->orgcode.'
#Gross Total
+
+
+

Medical Bills

+
+
+ + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + +
#Invoice ID.Inv.DateAmount
'.$srno.''.$row->inv_med_code.''.$row->inv_date.''.$row->net_amount.' Print
+
+
+
+
+
+
+ Current Status : + status==0) + { + echo 'Pending'; + } + if($orgcase[0]->status==1) + { + echo 'Ready For Submission'; + } + if($orgcase[0]->status==2) + { + echo 'Submitted in Org.'; + } + ?> +
+
+ org_submit_date=='') + { + $Dateofsubmit=date('d/m/Y'); + }else{ + $Dateofsubmit=MysqlDate_to_str($orgcase[0]->org_submit_date); + } + ?> +
+ status==0){ + ?> + +
+
+ +
+ +
+ '; + } + ?> +
+
+
+ + status==0) + { + echo ''; + echo ''; + }else if($orgcase[0]->status==1){ + echo ''; + echo ''; + }else{ + echo ''; + } + ?> +
+
+
+ case_type==0){ ?> +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+
+ 0){ + echo "

Payment History

"; + echo "
+ + + + + + + + + "; + + foreach($payment_history as $row){ + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } + echo "
Pay IDDateAmountModeUpdate By
".$row->id."".$row->str_date."".$row->Pay_mode."".$row->amount."".$row->update_by."
"; + } + ?> +
+
+
+
+ +
+
+ + \ No newline at end of file diff --git a/app/Views/Invoice/caseinvoice_ipd_V.php b/app/Views/Invoice/caseinvoice_ipd_V.php new file mode 100644 index 0000000..8df4b31 --- /dev/null +++ b/app/Views/Invoice/caseinvoice_ipd_V.php @@ -0,0 +1,148 @@ +
+

Organisation IPD Invoice

+
+
+
+ +
+
+
+

+ Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + / Ins. Comp. :ins_company_name?> +

+ + + +
+
+
+
+ + + + + + + + + + + + + + status<2) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + }else{ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + $Gamount=$Gamount+$row->Amount; + } + foreach($showinvoice2 as $row) + { + $srno=$srno+1; + if($orgcase[0]->status<2) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + }else{ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + $Gamount=$Gamount+$row->Amount; + } + ?> + + + + + + + + + + + + +
#Date : InvIDCharges TypeDescriptionQtyRateAmountOrg. CodeAction
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->item_rate.''.$row->Amount.''.$row->orgcode.'
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->item_rate.''.$row->Amount.''.$row->orgcode.'
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->Amount.'
'.$srno.''.$row->str_date.' : '.$row->Code.''.$row->Charge_type.''.$row->Description.''.$row->item_qty.''.$row->item_rate.''.$row->Amount.''.$row->orgcode.'
#Gross Total
+
+ +
+ +
+ +
+
+ \ No newline at end of file diff --git a/app/Views/Invoice/caseinvoice_print_V.php b/app/Views/Invoice/caseinvoice_print_V.php new file mode 100644 index 0000000..28a774f --- /dev/null +++ b/app/Views/Invoice/caseinvoice_print_V.php @@ -0,0 +1,186 @@ + + + + + + + + + +
+ + +

+

, Uttarakhand
+ +

+ p_code.':'.$orgcase[0]->id .':P-'.date('Y-m-d H:i:s'); + ?> + +
+

Bill No.# :id?>

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Bill No.:id?> / UHID:p_code ?> /Name : p_fname ?>
+
+ + + + + +
+ To
+ Patient ID : p_code ?>
+ p_fname ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ +
+ Organisation Invoice #case_id_code?>
+ Organisation :ins_company_name?>
+ Card / Insuranc No : insurance_no ?>
+ insurance_id==2) + { + echo ' Referral No. :'.$orgcase[0]->insurance_no_2.'
'; + } + ?> + Claim ID/No : insurance_no_1 ?>
+ org_submit_date=='') + { + $Dateofsubmit=date('d/m/Y'); + }else{ + $Dateofsubmit=MysqlDate_to_str($orgcase[0]->org_submit_date); + } + ?> + Bill Submit Date :
+
+

+ + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $Inv_total=$Inv_total+$row->Amount; + } + + foreach($showinvoice2 as $row) + { + $srno=$srno+1; + if(($row->discount_amount ?? 0) > 0){ + $readonly = 'readonly'; + $disabled = 'disabled'; + $rate = $row->d_rate ?? $row->item_rate; + $discription = $row->Description.' (Discounted) Rate : '.$row->item_rate; + }else{ + $readonly = ''; + $disabled = ''; + $rate = $row->item_rate; + $discription = $row->Description; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $Inv_total=$Inv_total+$row->Amount; + } + + if(count($MedInvoice)>0 && $med_include==1) + { + $srno=$srno+1; + $Inv_total=Round($Inv_total,0)+Round($MedInvoice[0]->Med_Amount,0); + ?> + + + + + + + + + + + + + + + + + +
#DateCharges TypeDescriptionOrg. CodeQtyRateSub Invoice CodeAmount
'.$srno.''.$row->str_date.''.$row->Charge_type.''.$row->Description.''.$row->orgcode.''.$row->Code.''.$row->Amount.'
'.$srno.''.$row->str_date.''.$row->Charge_type.''.$discription.''.$row->orgcode.''.$row->item_qty.''.$rate.''.$row->Code.''.$row->Amount.'
Medicine ExpenseMed_Amount?>
#Gross Total
+

+

+

+

+

Authorized Signatory

\ No newline at end of file diff --git a/app/Views/Invoice/org_case_payment.php b/app/Views/Invoice/org_case_payment.php new file mode 100644 index 0000000..5fe45e7 --- /dev/null +++ b/app/Views/Invoice/org_case_payment.php @@ -0,0 +1,144 @@ +
+ +
+ +
+
+
+

+ Name :p_fname?> {p_rname?>} + / Age :str_age?> + / Gender :xgender?> + / P Code :p_code?> +

+ +
+
+
+
+

+ Org Code :case_id_code?> + / Org. Name :insurance_company_name?> + / Card No :insurance_no?> + insurance_no_1?> + insurance_no_2?> +

+ +
+
+ 0){ ?> +
+
+

+ IPD Code :ipd_code?> + / Admit Date :str_register_date?> + / Dis. Date :str_discharge_date?> + / Charge Amt :charge_amount?> + / Medical Bill :med_amount?> +

+
+
+ +
+
+
+
+
+

Amount :

+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ /> +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+
+
+ \ No newline at end of file diff --git a/app/Views/Invoice/payment_req_panel.php b/app/Views/Invoice/payment_req_panel.php new file mode 100644 index 0000000..b02051a --- /dev/null +++ b/app/Views/Invoice/payment_req_panel.php @@ -0,0 +1,145 @@ + +
+
+
+
Name: p_fname ?? '') ?> {p_rname ?? '') ?>}
+
Age: age ?? '') ?>
+
Gender: xgender ?? '') ?>
+
P Code: p_code ?? '') ?>
+
ORG. Code: case_id_code ?? '') ?>
+
+
+
+ +
+
+ Payment Amount + +
+
+
+
+ + +
+
+ +
+
+

+ +

+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+

+ +

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/Invoice/payment_request_list.php b/app/Views/Invoice/payment_request_list.php new file mode 100644 index 0000000..a10862f --- /dev/null +++ b/app/Views/Invoice/payment_request_list.php @@ -0,0 +1,127 @@ + + +
+
+

Payment Paid Request

+
+
+
+
+ DataTable plugin is not loaded. Please include jQuery DataTables to enable filtering. +
+
+ + + + + + + + + + + + + + + + + + + + + + +
#Org. Case No.Patient NameRequest DateAmountStatus
+ +
+
+
+
+
+ diff --git a/app/Views/Invoice/refund_amount_panel.php b/app/Views/Invoice/refund_amount_panel.php new file mode 100644 index 0000000..e3cb3d9 --- /dev/null +++ b/app/Views/Invoice/refund_amount_panel.php @@ -0,0 +1,88 @@ + +
+
+
Refund Amount
+
+
+ +
+
+
CODE: refund_type_code ?? '') ?>
+
Patient Name: patient_name ?? '') ?>
+
+
+
Refund Reason: refund_type_reason ?? '') ?>
+
Refund Amount: Rs. refund_amount ?? '') ?>
+
+
+
Approved By: approved_by ?? '') ?>
+
Date Time: approved_datetime ?? '') ?>
+
+
+
+
+ +
+ +refund_process ?? 0) == 0) : ?> +
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+ +
+
+
Refund Done
+
+
+ + + + diff --git a/app/Views/Invoice/refund_invoice.php b/app/Views/Invoice/refund_invoice.php new file mode 100644 index 0000000..da1a846 --- /dev/null +++ b/app/Views/Invoice/refund_invoice.php @@ -0,0 +1,129 @@ + + +
+
+

Payment Refund Request

+
+
+
+
+ DataTable plugin is not loaded. Please include jQuery DataTables to enable filtering. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Refund No.Invoice No.Invoice TypePatient NameApproved DateAmountStatus
+ +
+
+
+
+
+ diff --git a/app/Views/PathLab_Report/_test_option_table.php b/app/Views/PathLab_Report/_test_option_table.php new file mode 100644 index 0000000..1a78f29 --- /dev/null +++ b/app/Views/PathLab_Report/_test_option_table.php @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + +
#CodeBoldAction
sort_id ?? '') ?>option_value ?? '') ?>option_bold_str ?? '') ?> +
+ + id ?? 0; + $sort_current = $lab_test_option[$i]->sort_id ?? 0; + if ($i + 1 < count($lab_test_option ?? [])) { + $option_next = $lab_test_option[$i + 1]->id ?? 0; + $sort_next = $lab_test_option[$i + 1]->sort_id ?? 0; + echo ''; + } + if ($i > 0) { + $option_prev = $lab_test_option[$i - 1]->id ?? 0; + $sort_prev = $lab_test_option[$i - 1]->sort_id ?? 0; + echo ''; + } + ?> +
+
diff --git a/app/Views/PathLab_Report/lab_report_edit.php b/app/Views/PathLab_Report/lab_report_edit.php new file mode 100644 index 0000000..8597cf2 --- /dev/null +++ b/app/Views/PathLab_Report/lab_report_edit.php @@ -0,0 +1,135 @@ + +
+
+

Report Edit

+
+
+
+
+
+ + 0) { + $repo_name = $labReport_master[0]->Title ?? ''; + $repo_id = $labReport_master[0]->mstRepoKey ?? '0'; + $HTMLData = $labReport_master[0]->HTMLData ?? ''; + } + ?> + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ +
+
+

Report Parameter

+
+
+
+
+ id ?? 0) % max(1, count($color_name ?? []))]->code_code_2 ?? '#0f172a'; + echo '
' . esc($lab_Rep_Item_List[$i]->Test ?? '') . '[' . esc($lab_Rep_Item_List[$i]->TestID ?? '') . ']
'; + } ?> +
+
+
+
+ +
+
+
+
+ + diff --git a/app/Views/PathLab_Report/lab_report_item_edit.php b/app/Views/PathLab_Report/lab_report_item_edit.php new file mode 100644 index 0000000..bc67384 --- /dev/null +++ b/app/Views/PathLab_Report/lab_report_item_edit.php @@ -0,0 +1,264 @@ + 0) { + $mstTestKey = $lab_test_parameter[0]->mstTestKey ?? 0; + $Test = $lab_test_parameter[0]->Test ?? ''; + $TestID = $lab_test_parameter[0]->TestID ?? ''; + $Result = $lab_test_parameter[0]->Result ?? ''; + $Formula = $lab_test_parameter[0]->Formula ?? ''; + $VRule = $lab_test_parameter[0]->VRule ?? ''; + $VMsg = $lab_test_parameter[0]->VMsg ?? ''; + $Unit = $lab_test_parameter[0]->Unit ?? ''; + $FixedNormals = $lab_test_parameter[0]->FixedNormals ?? ''; + $isGenderSpecific = (int) ($lab_test_parameter[0]->isGenderSpecific ?? 0); + $FixedNormalsWomen = $lab_test_parameter[0]->FixedNormalsWomen ?? ''; + + if ($isGenderSpecific == 1) { + $checkbox_checked = 'checked'; + } +} +?> + +
+
+

Test Parameter

+
+
+
+
+
+ + + + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ $lab_test_option ?? [], 'mstTestKey' => $mstTestKey]) ?> +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + diff --git a/app/Views/PathLab_Report/lab_report_list.php b/app/Views/PathLab_Report/lab_report_list.php new file mode 100644 index 0000000..1995c99 --- /dev/null +++ b/app/Views/PathLab_Report/lab_report_list.php @@ -0,0 +1,135 @@ + +
+ +
+
+
+
+

Report List

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Report TitleGroupAction
Title ?? '') ?>RepoGrp ?? '') ?> + + +
Report TitleGroupAction
+
+
+
+ +
+
+
+ + + diff --git a/app/Views/PathLab_Report/lab_report_test_list.php b/app/Views/PathLab_Report/lab_report_test_list.php new file mode 100644 index 0000000..2ee5b3d --- /dev/null +++ b/app/Views/PathLab_Report/lab_report_test_list.php @@ -0,0 +1,80 @@ + +
+
+

Test List

+ +
+
+ + + + + + + + + + + + + + + + + + + +
#Test NameTest CodeAction
Test ?? '') ?>TestID ?? '') ?> +
+ + + id ?? 0; + $sort_current = $lab_Rep_Item_List[$i]->EOrder ?? 0; + if ($i + 1 < count($lab_Rep_Item_List ?? [])) { + $option_next = $lab_Rep_Item_List[$i + 1]->id ?? 0; + $sort_next = $lab_Rep_Item_List[$i + 1]->EOrder ?? 0; + echo ''; + } + if ($i > 0) { + $option_prev = $lab_Rep_Item_List[$i - 1]->id ?? 0; + $sort_prev = $lab_Rep_Item_List[$i - 1]->EOrder ?? 0; + echo ''; + } + ?> +
+
+
+
+ + diff --git a/app/Views/PathLab_Report/lab_test_search.php b/app/Views/PathLab_Report/lab_test_search.php new file mode 100644 index 0000000..d01391c --- /dev/null +++ b/app/Views/PathLab_Report/lab_test_search.php @@ -0,0 +1,55 @@ + +
+
+

Test Parameter

+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/PathLab_Report/ultrasound_report_edit.php b/app/Views/PathLab_Report/ultrasound_report_edit.php new file mode 100644 index 0000000..115ff53 --- /dev/null +++ b/app/Views/PathLab_Report/ultrasound_report_edit.php @@ -0,0 +1,135 @@ + +
+
+

Radiology Report Edit

+
+
+
+
+
+ + 0) { + $repo_id = $labReport_master[0]->id ?? '0'; + $repo_name = $labReport_master[0]->template_name ?? ''; + $repo_title = $labReport_master[0]->title ?? ''; + $HTMLData = $labReport_master[0]->Findings ?? ''; + $Impression = $labReport_master[0]->Impression ?? ''; + } + ?> + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + + +
+
+
+
+
+ + + +
+
+
+
+
+
+ + +
+
+
+
+
+ + diff --git a/app/Views/PathLab_Report/ultrasound_template_list.php b/app/Views/PathLab_Report/ultrasound_template_list.php new file mode 100644 index 0000000..280c703 --- /dev/null +++ b/app/Views/PathLab_Report/ultrasound_template_list.php @@ -0,0 +1,134 @@ + +
+ +
+
+
+
+

Report List

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Report TitleGroupAction
template_name ?? '') ?>title ?? '') ?> + +
Report TitleGroupAction
+
+
+
+ +
+
+
+ + + diff --git a/app/Views/Setting/Admin/Doctor/temp/Doctor_Search_V.php b/app/Views/Setting/Admin/Doctor/temp/Doctor_Search_V.php new file mode 100644 index 0000000..813527b --- /dev/null +++ b/app/Views/Setting/Admin/Doctor/temp/Doctor_Search_V.php @@ -0,0 +1,59 @@ +
+

+ Doctor + List +

+ +
+
+
+
+
+ +
+
+ +
+
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamePhone NumberEMailAction
p_title ?> p_fname ?>mphone1 ?>email1 ?>
NamePhone NumberEMailAction
+
+ +
+
+
\ No newline at end of file diff --git a/app/Views/Setting/Admin/Doctor/temp/Doctor_V.php b/app/Views/Setting/Admin/Doctor/temp/Doctor_V.php new file mode 100644 index 0000000..bb23567 --- /dev/null +++ b/app/Views/Setting/Admin/Doctor/temp/Doctor_V.php @@ -0,0 +1,105 @@ +
+

+ Doctor + Add New +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+ + +
+ + + +
+
+
+ + + + \ No newline at end of file diff --git a/app/Views/Setting/Admin/Doctor/temp/Doctor_profile_V.php b/app/Views/Setting/Admin/Doctor/temp/Doctor_profile_V.php new file mode 100644 index 0000000..a93029d --- /dev/null +++ b/app/Views/Setting/Admin/Doctor/temp/Doctor_profile_V.php @@ -0,0 +1,300 @@ +
+

+ Doctor + Dr. p_fname; ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+ '; + echo ' '; + echo ' '; + echo ' '; + echo '
'; + } + ?> +
+
+
+ + + + + +
+
+
+
+
+
+
+
+
+
+
+ ''); + $this->table->set_template($table_property); + $this->table->set_heading('Fee Type', 'Description', 'Amount'); + foreach($doc_fee_list as $row) + { + if($row->id=='') + { + $button_code=' Not Define'; + }else{ + $button_code='Remove'; + } + + $this->table->add_row($row->fee_type, $row->doc_fee_desc, $row->amount,$button_code); + } + echo $this->table->generate(); + + ?> + + + + +
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/app/Views/Setting/Admin/UserManagement/create.php b/app/Views/Setting/Admin/UserManagement/create.php new file mode 100644 index 0000000..13b1e07 --- /dev/null +++ b/app/Views/Setting/Admin/UserManagement/create.php @@ -0,0 +1,84 @@ + + +
+
+

New Users

+
+ +
+
+
+ + + +
+ +
+ +
+ +
+ +
+
+ + +
Username is required.
+
+
+ + +
Email is required.
+
+
+ + +
Password is required.
+
+
+ + +
Role is required.
+
+
+ +
+ + +
+ +
+
+ + diff --git a/app/Views/Setting/Admin/UserManagement/edit.php b/app/Views/Setting/Admin/UserManagement/edit.php new file mode 100644 index 0000000..43ab2f2 --- /dev/null +++ b/app/Views/Setting/Admin/UserManagement/edit.php @@ -0,0 +1,79 @@ +
+
+

Edit User

+
+ +
+
+
+ + + +
+ +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ active ?? 0)) === 1 ? 'checked' : '' ?>> + +
+
+
+ +
+ + +
+ +
+
+ + diff --git a/app/Views/Setting/Admin/UserManagement/index.php b/app/Views/Setting/Admin/UserManagement/index.php new file mode 100644 index 0000000..cfbee14 --- /dev/null +++ b/app/Views/Setting/Admin/UserManagement/index.php @@ -0,0 +1,145 @@ +
+
+

Users

+ +
+ + +
+
+
+ + + +
+ + +
+ +
+ +
+ +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + $user) : ?> + getEmailIdentity(); + $email = $emailIdentity ? $emailIdentity->secret : ''; + $personName = ''; + $phoneNo = ''; + if ($emailIdentity && isset($emailIdentity->extra)) { + $extra = $emailIdentity->extra; + if (is_string($extra) && trim($extra) !== '') { + $decodedExtra = json_decode($extra, true); + if (is_array($decodedExtra)) { + $personName = trim((string) ($decodedExtra['full_name'] ?? '')); + $phoneNo = trim((string) ($decodedExtra['phone_no'] ?? '')); + } + } elseif (is_array($extra)) { + $personName = trim((string) ($extra['full_name'] ?? '')); + $phoneNo = trim((string) ($extra['phone_no'] ?? '')); + } + } + $groups = $user->getGroups() ?? []; + $roleLabels = []; + foreach ($groups as $group) { + $roleLabels[] = $rolesConfig[$group]['title'] ?? $group; + } + $roleText = $roleLabels !== [] ? implode(', ', $roleLabels) : '-'; + ?> + + + + + + + + + + + + + + + + + +
#Login IDPerson NamePhone No.EmailRoleStatusAction
username ?? '') ?> + active)) : ?> + Active + + Inactive + + +
+ + +
+
No users loaded yet.
+
+
+
+ + \ No newline at end of file diff --git a/app/Views/Setting/Admin/UserManagement/permissions.php b/app/Views/Setting/Admin/UserManagement/permissions.php new file mode 100644 index 0000000..8fbe2fb --- /dev/null +++ b/app/Views/Setting/Admin/UserManagement/permissions.php @@ -0,0 +1,181 @@ +
+
+

Give Permissions

+
+ +
+
+
+ + + +
+ + +
+ +
+ +
+ +
+ +
+
+ + +
User is required.
+
+
+ +
+
+ +
+ +
+ Pharmacy module access is controlled by pharmacy.access. +
+
+ getPermissions() ?? []; + } + + $groupedPermissions = []; + $groupTitles = [ + 'admin' => 'Admin', + 'users' => 'Users', + 'beta' => 'Beta', + 'template' => 'Templates', + 'pharmacy' => 'Pharmacy', + 'opd' => 'OPD Doctor Panel', + 'billing.opd' => 'OPD', + 'billing.charges' => 'Charges', + 'billing.ipd' => 'IPD Billing', + 'billing' => 'Billing', + 'other' => 'Other', + ]; + foreach ($permissions as $permissionKey => $permissionLabel) { + $parts = explode('.', $permissionKey); + $groupKey = $parts[0] ?? 'other'; + if ($groupKey === 'billing' && isset($parts[1])) { + $groupKey = $groupKey . '.' . $parts[1]; + } + + if (! isset($groupTitles[$groupKey])) { + $titleBase = str_replace(['-', '_'], ' ', $groupKey); + $titleBase = str_replace('billing ', '', $titleBase); + $groupTitles[$groupKey] = ucwords($titleBase); + } + + if (! isset($groupedPermissions[$groupKey])) { + $groupedPermissions[$groupKey] = []; + } + + $groupedPermissions[$groupKey][$permissionKey] = $permissionLabel; + } + if (! isset($groupedPermissions['other'])) { + $groupedPermissions['other'] = []; + } + + $groupOrder = [ + 'admin', + 'users', + 'template', + 'pharmacy', + 'opd', + 'billing.opd', + 'billing.charges', + 'billing.ipd', + 'billing', + 'beta', + 'other', + ]; + ?> + +
+ + +
+
+ $permissionLabel) : ?> +
+ > + +
+ +
+ +
+ +
No permissions configured.
+ +
+
+ +
+ + +
+
+
+
+ + +
diff --git a/app/Views/Setting/Admin/UserManagement/reset_password.php b/app/Views/Setting/Admin/UserManagement/reset_password.php new file mode 100644 index 0000000..cc5581a --- /dev/null +++ b/app/Views/Setting/Admin/UserManagement/reset_password.php @@ -0,0 +1,106 @@ +
+
+

Set Temporary PIN

+
+ +
+
+
+ + +
+ +
+ +
+ + +
+
Login ID: username ?? '')) ?>
+
User ID: id ?? '')) ?>
+
Set a 6-digit temporary PIN. User will be forced to change password at next login.
+
+ +
+ +
+
+ + +
+
+ + +
+
+ +
+ + + Use generated PIN or enter manually. +
+ +
+ + +
+
+
+
+ + diff --git a/app/Views/Setting/Admin/ai_settings.php b/app/Views/Setting/Admin/ai_settings.php new file mode 100644 index 0000000..4ec835a --- /dev/null +++ b/app/Views/Setting/Admin/ai_settings.php @@ -0,0 +1,227 @@ +
+
+

AI Settings

+
+
+ + +
Gemini (optional fallback)
+ +
+ + +
+ + Current key: + + No API key configured yet. + +
+
+ +
+
How to get Gemini API key
+
    +
  1. + Open Google AI Studio API Keys + . +
  2. +
  3. Sign in and click Create API key.
  4. +
  5. Copy the key and paste it in this field.
  6. +
  7. Click Save Key, then Test Connection.
  8. +
+
If test fails, check internet access from server, remove extra spaces/newline in key, or regenerate key.
+
+ +
+
Azure OpenAI (Primary)
+
+ + +
+
+ + +
+ + Current key: + + No Azure OpenAI key configured yet. + +
+
+
+
+ + +
+
+ + +
+
+ +
+
OCR (Azure Document Intelligence)
+
+ + +
+
+ + +
+ + Current key: + + No Document Intelligence key configured yet. + +
+
+ +
+ + + +
+ +
+
+
+ + diff --git a/app/Views/Setting/Admin/index.php b/app/Views/Setting/Admin/index.php new file mode 100644 index 0000000..8e681e8 --- /dev/null +++ b/app/Views/Setting/Admin/index.php @@ -0,0 +1,106 @@ +
+
+

Admin Panel

+ +
+ + + + +
+
+
+
+
diff --git a/app/Views/Setting/Bank/bank_search_v.php b/app/Views/Setting/Bank/bank_search_v.php new file mode 100644 index 0000000..35d7540 --- /dev/null +++ b/app/Views/Setting/Bank/bank_search_v.php @@ -0,0 +1,339 @@ +
+
+

Bank & Payment Sources

+
+
+ +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+
Payment Sources (Items)
+
+ + + + + + + + + + + + +
Pay Type
Select a bank to view payment sources.
+
+
+
+
+ +
+ +
+
+
Banks
+
+ + + + + + + + + + + + + + + + + + + + + +
Bank
bank_name ?? '') ?> + + +
No banks found.
+
+
+
+
+
+ + + + + + diff --git a/app/Views/Setting/Bed/assignment_history.php b/app/Views/Setting/Bed/assignment_history.php new file mode 100644 index 0000000..a487b6a --- /dev/null +++ b/app/Views/Setting/Bed/assignment_history.php @@ -0,0 +1,249 @@ +
+
+

Bed Assignment History

+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
BedWardTypeAssignedReleasedTotal DaysReasonAction
bed_code ?? '') . ' ' . ($row->bed_number ?? '')) ?>ward_name ?? '') ?>assignment_type ?? '') ?>assigned_date ?? '') ?>released_date ?? $row->discharged_date ?? '') ?>total_days ?? '') ?>release_reason ?? $row->transfer_reason ?? '') ?> + + +
+
+
+
+ diff --git a/app/Views/Setting/Bed/bed_list.php b/app/Views/Setting/Bed/bed_list.php new file mode 100644 index 0000000..4f7ab56 --- /dev/null +++ b/app/Views/Setting/Bed/bed_list.php @@ -0,0 +1,262 @@ +
+
+

Bed Master

+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
CodeNumberWardCategoryStatusActiveAction
bed_code ?? '') ?>bed_number ?? '') ?>ward_name ?? '') ?>category_name ?? '') ?>bed_status ?? '') ?>status ?? '') ?> + + +
+
+
+
+ diff --git a/app/Views/Setting/Bed/category_list.php b/app/Views/Setting/Bed/category_list.php new file mode 100644 index 0000000..f5ed3ed --- /dev/null +++ b/app/Views/Setting/Bed/category_list.php @@ -0,0 +1,213 @@ +
+
+

Bed Categories

+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
CodeNameTypeChargesStatusAction
category_code ?? '') ?>category_name ?? '') ?>category_type ?? '') ?>base_charge_per_day ?? '') ?> / nursing_charge_per_day ?? '') ?>status ?? '') ?> + + +
+
+
+
+ diff --git a/app/Views/Setting/Bed/index.php b/app/Views/Setting/Bed/index.php new file mode 100644 index 0000000..807e943 --- /dev/null +++ b/app/Views/Setting/Bed/index.php @@ -0,0 +1,43 @@ +
+
+

Bed Management

+ +
+ + + +
+
+
+
+
diff --git a/app/Views/Setting/Bed/maintenance_list.php b/app/Views/Setting/Bed/maintenance_list.php new file mode 100644 index 0000000..ecce522 --- /dev/null +++ b/app/Views/Setting/Bed/maintenance_list.php @@ -0,0 +1,233 @@ +
+
+

Bed Maintenance Log

+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
BedWardTypeStatusScheduledCompletedAction
bed_code ?? '') . ' ' . ($row->bed_number ?? '')) ?>ward_name ?? '') ?>maintenance_type ?? '') ?>status ?? '') ?>scheduled_date ?? '') ?>completed_date ?? '') ?> + + +
+
+
+
+ diff --git a/app/Views/Setting/Charges/IPD_Charges/item_create_V.php b/app/Views/Setting/Charges/IPD_Charges/item_create_V.php new file mode 100644 index 0000000..eb19ca8 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_create_V.php @@ -0,0 +1,69 @@ +
+
+

IPD Charges - Add New

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_insurance_list.php b/app/Views/Setting/Charges/IPD_Charges/item_insurance_list.php new file mode 100644 index 0000000..2fc3906 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_insurance_list.php @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + +
Company NameAmountCodeAction
ins_company_name ?? '') ?>i_amount ?? '') ?>code ?? '') ?> + +
diff --git a/app/Views/Setting/Charges/IPD_Charges/item_item_excel.php b/app/Views/Setting/Charges/IPD_Charges/item_item_excel.php new file mode 100644 index 0000000..6a3a825 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_item_excel.php @@ -0,0 +1,33 @@ + +

Rate List of group_desc ?? 'Charges') ?> for

+ +

Rate List of group_desc ?? 'Charges') ?>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Charge NameCharge DetailsAmountCodeAmount
idesc ?? '') ?>idesc_detail ?? '') ?>display_amount ?? $row->i_amount ?? $row->amount ?? '') ?>code ?? ($row->i_amount === null ? 'Base Rate' : '')) ?>amount ?? '') ?>
diff --git a/app/Views/Setting/Charges/IPD_Charges/item_item_list.php b/app/Views/Setting/Charges/IPD_Charges/item_item_list.php new file mode 100644 index 0000000..462c9e1 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_item_list.php @@ -0,0 +1,54 @@ + + + + + + IPD Charges + + + + + +
+
+ + +

Rate List of group_desc ?? 'Charges') ?> for

+ +

Rate List of group_desc ?? 'Charges') ?>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Charge NameCharge DetailsAmountCodeAmount
idesc ?? '') ?>idesc_detail ?? '') ?>display_amount ?? $row->i_amount ?? '') ?>code ?? ($row->i_amount === null ? 'Base Rate' : '')) ?>amount ?? '') ?>
+
+
+ + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_profile_V.php b/app/Views/Setting/Charges/IPD_Charges/item_profile_V.php new file mode 100644 index 0000000..c97ed10 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_profile_V.php @@ -0,0 +1,149 @@ + +
+
+

IPD Charge Name: idesc ?? '') ?>

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
Insurance Rates
+
+
+
+ $data_insurance_item]) ?> +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_search_V.php b/app/Views/Setting/Charges/IPD_Charges/item_search_V.php new file mode 100644 index 0000000..5d1f875 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_search_V.php @@ -0,0 +1,110 @@ +
+
+

IPD Charges

+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ $data, 'typeId' => $typeId]) ?> +
+
+
+
+
+ + + + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_search_adv.php b/app/Views/Setting/Charges/IPD_Charges/item_search_adv.php new file mode 100644 index 0000000..e8a43f7 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_search_adv.php @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GroupCharge NameAmount
group_desc ?? '') ?>idesc ?? '') ?>amount ?? '') ?> + +
GroupCharge NameAmount
+ + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_type_create.php b/app/Views/Setting/Charges/IPD_Charges/item_type_create.php new file mode 100644 index 0000000..f4c339b --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_type_create.php @@ -0,0 +1,54 @@ +
+
+

IPD Charges Group - Add New

+
+ +
+
+
+
+
+ +
+
+ + +
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_type_profile.php b/app/Views/Setting/Charges/IPD_Charges/item_type_profile.php new file mode 100644 index 0000000..3b99b98 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_type_profile.php @@ -0,0 +1,56 @@ + +
+
+

IPD Charges Group: group_desc ?? '') ?>

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + + diff --git a/app/Views/Setting/Charges/IPD_Charges/item_type_search_v.php b/app/Views/Setting/Charges/IPD_Charges/item_type_search_v.php new file mode 100644 index 0000000..f1d5778 --- /dev/null +++ b/app/Views/Setting/Charges/IPD_Charges/item_type_search_v.php @@ -0,0 +1,46 @@ +
+
+

IPD Charges Groups

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Charges Group Name
group_desc ?? '') ?> + +
Charges Group Name
+
+
+ + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_create_V.php b/app/Views/Setting/Charges/OPD_Charges/item_create_V.php new file mode 100644 index 0000000..3a20f31 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_create_V.php @@ -0,0 +1,69 @@ +
+
+

OPD Charges - Add New

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_insurance_list.php b/app/Views/Setting/Charges/OPD_Charges/item_insurance_list.php new file mode 100644 index 0000000..2fc3906 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_insurance_list.php @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + +
Company NameAmountCodeAction
ins_company_name ?? '') ?>i_amount ?? '') ?>code ?? '') ?> + +
diff --git a/app/Views/Setting/Charges/OPD_Charges/item_item_excel.php b/app/Views/Setting/Charges/OPD_Charges/item_item_excel.php new file mode 100644 index 0000000..6a3a825 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_item_excel.php @@ -0,0 +1,33 @@ + +

Rate List of group_desc ?? 'Charges') ?> for

+ +

Rate List of group_desc ?? 'Charges') ?>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Charge NameCharge DetailsAmountCodeAmount
idesc ?? '') ?>idesc_detail ?? '') ?>display_amount ?? $row->i_amount ?? $row->amount ?? '') ?>code ?? ($row->i_amount === null ? 'Base Rate' : '')) ?>amount ?? '') ?>
diff --git a/app/Views/Setting/Charges/OPD_Charges/item_item_list.php b/app/Views/Setting/Charges/OPD_Charges/item_item_list.php new file mode 100644 index 0000000..f0c3452 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_item_list.php @@ -0,0 +1,54 @@ + + + + + + OPD Charges + + + + + +
+
+ + +

Rate List of group_desc ?? 'Charges') ?> for

+ +

Rate List of group_desc ?? 'Charges') ?>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Charge NameCharge DetailsAmountCodeAmount
idesc ?? '') ?>idesc_detail ?? '') ?>display_amount ?? $row->i_amount ?? '') ?>code ?? ($row->i_amount === null ? 'Base Rate' : '')) ?>amount ?? '') ?>
+
+
+ + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_profile_V.php b/app/Views/Setting/Charges/OPD_Charges/item_profile_V.php new file mode 100644 index 0000000..d3b9e34 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_profile_V.php @@ -0,0 +1,149 @@ + +
+
+

OPD Charge Name: idesc ?? '') ?>

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
Insurance Rates
+
+
+
+ $data_insurance_item]) ?> +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_search_V.php b/app/Views/Setting/Charges/OPD_Charges/item_search_V.php new file mode 100644 index 0000000..2998423 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_search_V.php @@ -0,0 +1,110 @@ +
+
+

OPD Charges

+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ $data, 'typeId' => $typeId]) ?> +
+
+
+
+
+ + + + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_search_adv.php b/app/Views/Setting/Charges/OPD_Charges/item_search_adv.php new file mode 100644 index 0000000..e7eeffc --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_search_adv.php @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD or IPDGroupCharge NameAmount
isIPD_OPD ?? '') ?>group_desc ?? '') ?>idesc ?? '') ?>amount ?? '') ?> + +
OPD or IPDGroupCharge NameAmount
+ + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_type_create.php b/app/Views/Setting/Charges/OPD_Charges/item_type_create.php new file mode 100644 index 0000000..d87dc23 --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_type_create.php @@ -0,0 +1,62 @@ +
+
+

OPD Charges Group - Add New

+
+ +
+
+
+
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_type_profile.php b/app/Views/Setting/Charges/OPD_Charges/item_type_profile.php new file mode 100644 index 0000000..8a43a7d --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_type_profile.php @@ -0,0 +1,64 @@ + +
+
+

OPD Charges Group: group_desc ?? '') ?>

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + + diff --git a/app/Views/Setting/Charges/OPD_Charges/item_type_search_v.php b/app/Views/Setting/Charges/OPD_Charges/item_type_search_v.php new file mode 100644 index 0000000..e130c1b --- /dev/null +++ b/app/Views/Setting/Charges/OPD_Charges/item_type_search_v.php @@ -0,0 +1,49 @@ +
+
+

OPD Charges Groups

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
OPD or IPDCharges Group Name
isIPD_OPD ?? '') ?>group_desc ?? '') ?> + +
OPD or IPDCharges Group Name
+
+
+ + diff --git a/app/Views/Setting/Charges/Package/item_create_V.php b/app/Views/Setting/Charges/Package/item_create_V.php new file mode 100644 index 0000000..fc8249c --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_create_V.php @@ -0,0 +1,69 @@ +
+
+

IPD Package - Add New

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Charges/Package/item_insurance_list.php b/app/Views/Setting/Charges/Package/item_insurance_list.php new file mode 100644 index 0000000..2fc3906 --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_insurance_list.php @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + +
Company NameAmountCodeAction
ins_company_name ?? '') ?>i_amount ?? '') ?>code ?? '') ?> + +
diff --git a/app/Views/Setting/Charges/Package/item_item_excel.php b/app/Views/Setting/Charges/Package/item_item_excel.php new file mode 100644 index 0000000..bad6a4e --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_item_excel.php @@ -0,0 +1,33 @@ + +

Package Rate List for

+ +

Package Rate List

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Package NameDescriptionAmountCodeAmount
ipd_pakage_name ?? '') ?>Pakage_description ?? '') ?>display_amount ?? $row->i_amount ?? $row->Pakage_Min_Amount ?? '') ?>code ?? ($row->i_amount === null ? 'Base Rate' : '')) ?>Pakage_Min_Amount ?? '') ?>
diff --git a/app/Views/Setting/Charges/Package/item_item_list.php b/app/Views/Setting/Charges/Package/item_item_list.php new file mode 100644 index 0000000..efdfcb5 --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_item_list.php @@ -0,0 +1,54 @@ + + + + + + IPD Package + + + + + +
+
+ + +

Package Rate List for

+ +

Package Rate List

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Package NameDescriptionAmountCodeAmount
ipd_pakage_name ?? '') ?>Pakage_description ?? '') ?>display_amount ?? $row->i_amount ?? '') ?>code ?? ($row->i_amount === null ? 'Base Rate' : '')) ?>Pakage_Min_Amount ?? '') ?>
+
+
+ + diff --git a/app/Views/Setting/Charges/Package/item_profile_V.php b/app/Views/Setting/Charges/Package/item_profile_V.php new file mode 100644 index 0000000..167aff9 --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_profile_V.php @@ -0,0 +1,139 @@ + +
+
+

IPD Package: ipd_pakage_name ?? '') ?>

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
Insurance Rates
+
+
+
+ $data_insurance_item]) ?> +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + + diff --git a/app/Views/Setting/Charges/Package/item_search_V.php b/app/Views/Setting/Charges/Package/item_search_V.php new file mode 100644 index 0000000..7b5ede0 --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_search_V.php @@ -0,0 +1,110 @@ +
+
+

IPD Package

+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+ $data, 'groupId' => $groupId]) ?> +
+
+
+
+
+ + + + diff --git a/app/Views/Setting/Charges/Package/item_search_adv.php b/app/Views/Setting/Charges/Package/item_search_adv.php new file mode 100644 index 0000000..aefeb6a --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_search_adv.php @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Package NameCharge NameAmount
ipd_pakage_name ?? '') ?>Pakage_description ?? '') ?>Pakage_Min_Amount ?? '') ?> + +
Package NameCharge NameAmount
+ + diff --git a/app/Views/Setting/Charges/Package/item_type_create.php b/app/Views/Setting/Charges/Package/item_type_create.php new file mode 100644 index 0000000..f8f73f6 --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_type_create.php @@ -0,0 +1,54 @@ +
+
+

Package Group - Add New

+
+ +
+
+
+
+
+ +
+
+ + +
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Charges/Package/item_type_profile.php b/app/Views/Setting/Charges/Package/item_type_profile.php new file mode 100644 index 0000000..1f482c5 --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_type_profile.php @@ -0,0 +1,56 @@ + +
+
+

Package Group: pakage_group_name ?? '') ?>

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+ + + diff --git a/app/Views/Setting/Charges/Package/item_type_search_v.php b/app/Views/Setting/Charges/Package/item_type_search_v.php new file mode 100644 index 0000000..4a1431e --- /dev/null +++ b/app/Views/Setting/Charges/Package/item_type_search_v.php @@ -0,0 +1,46 @@ +
+
+

Package Groups

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Package Group Name
pakage_group_name ?? '') ?> + +
Package Group Name
+
+
+ + diff --git a/app/Views/Setting/Charges/index.php b/app/Views/Setting/Charges/index.php new file mode 100644 index 0000000..a0411a1 --- /dev/null +++ b/app/Views/Setting/Charges/index.php @@ -0,0 +1,76 @@ +
+
+

Charges

+ +
+ + + + + +
+
+
+
diff --git a/app/Views/Setting/Doctor/Doctor_Search_V.php b/app/Views/Setting/Doctor/Doctor_Search_V.php new file mode 100644 index 0000000..2fb1826 --- /dev/null +++ b/app/Views/Setting/Doctor/Doctor_Search_V.php @@ -0,0 +1,51 @@ +
+
+

Doctors

+
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NamePhone NumberEmailAction
p_title ?? '') . ' ' . ($row->p_fname ?? '')) ?>mphone1 ?? '') ?>email1 ?? '') ?> + +
No doctors found.
+
+
+
diff --git a/app/Views/Setting/Doctor/Doctor_V.php b/app/Views/Setting/Doctor/Doctor_V.php new file mode 100644 index 0000000..d42f2a4 --- /dev/null +++ b/app/Views/Setting/Doctor/Doctor_V.php @@ -0,0 +1,160 @@ +
+
+

Add Doctor

+
+ +
+
+
+ + + +
+ +
+ +
+ +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ +
+ +
+ +
+
+
+
+ + diff --git a/app/Views/Setting/Doctor/Doctor_profile_V.php b/app/Views/Setting/Doctor/Doctor_profile_V.php new file mode 100644 index 0000000..77019aa --- /dev/null +++ b/app/Views/Setting/Doctor/Doctor_profile_V.php @@ -0,0 +1,433 @@ +{$regField}) && trim((string) $data[0]->{$regField}) !== '') { + $doctorRegNo = trim((string) $data[0]->{$regField}); + break; + } + } + + if ($doctorRegNo === '') { + $shortDescription = trim((string) ($data[0]->doc_sign ?? '')); + if ($shortDescription !== '') { + $normalizedShortDescription = preg_replace('/\s+/', ' ', $shortDescription); + if ($normalizedShortDescription !== null) { + if (preg_match('/(?:reg(?:istration)?\s*(?:no|number)?\s*[:\-]?\s*)([A-Z0-9\/-]{4,})/i', $normalizedShortDescription, $matches) === 1 && ! empty($matches[1])) { + $doctorRegNo = trim((string) $matches[1]); + } + } + } + } +} +?> + +
+
+

Doctor: p_title ?? '') . ' ' . ($data[0]->p_fname ?? '')) ?>

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ gender ?? '') ?> type="radio"> + +
+
+ gender ?? '') ?> type="radio"> + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+ +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ + + +
+ + +
+ +
+ +
+ +
+
+
+
+ +
+ +
+ + + + +
+ +
+
+ + +
+
+
+
+
OPD Fees
+
+
+ Fee TypeDescriptionAmount'; + foreach ($doc_fee_list as $row) { + $button = 'Not Define'; + if (! empty($row->id)) { + $button = 'Remove'; + } + $tableHtml .= '' . esc($row->fee_type ?? '') . '' . esc($row->doc_fee_desc ?? '') . '' . esc($row->amount ?? '') . '' . $button . ''; + } + $tableHtml .= ''; + echo $tableHtml; + ?> +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
IPD Fees
+
+
+ Fee TypeDescriptionAmount'; + foreach ($doc_ipd_fee_list as $row) { + $button = 'Not Define'; + if (! empty($row->id)) { + $button = 'Remove'; + } + $ipdTableHtml .= '' . esc($row->fee_type ?? '') . '' . esc($row->doc_fee_desc ?? '') . '' . esc($row->amount ?? '') . '' . $button . ''; + } + $ipdTableHtml .= ''; + echo $ipdTableHtml; + ?> +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+
+ + + diff --git a/app/Views/Setting/Doctor/Ipd_FeeType_List.php b/app/Views/Setting/Doctor/Ipd_FeeType_List.php new file mode 100644 index 0000000..6ffbb7c --- /dev/null +++ b/app/Views/Setting/Doctor/Ipd_FeeType_List.php @@ -0,0 +1,128 @@ +
+
+

IPD Fee Types

+
+ +
+
+
+ + + +
+ + +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + $type) : ?> + + + + + + + + + + + + +
#IPD Fee TypeAction
+ + + + +
No IPD fee types found.
+
+
+
+ + diff --git a/app/Views/Setting/Doctor/Spec_List.php b/app/Views/Setting/Doctor/Spec_List.php new file mode 100644 index 0000000..d706be1 --- /dev/null +++ b/app/Views/Setting/Doctor/Spec_List.php @@ -0,0 +1,128 @@ +
+
+

Specialities

+
+ +
+
+
+ + + +
+ + +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + $spec) : ?> + + + + + + + + + + + + +
#SpecialityAction
+ + + + +
No specialities found.
+
+
+
+ + diff --git a/app/Views/Setting/Insurance/insurance_create_V.php b/app/Views/Setting/Insurance/insurance_create_V.php new file mode 100644 index 0000000..3917376 --- /dev/null +++ b/app/Views/Setting/Insurance/insurance_create_V.php @@ -0,0 +1,72 @@ +
+
+

Insurance Company - Add New

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Insurance/insurance_profile_V.php b/app/Views/Setting/Insurance/insurance_profile_V.php new file mode 100644 index 0000000..36d6c7e --- /dev/null +++ b/app/Views/Setting/Insurance/insurance_profile_V.php @@ -0,0 +1,185 @@ + +
+
+

Insurance Company - ins_company_name ?? '') ?>

+
+ +
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+
+ active ?? 0) ?>> + +
+
+
+
+
+
+
+
OPD
+
+
+
+
+
+ opd_allowed ?? 0) ?>> + +
+
+
+ +
+ opd_rate_direct ?? '') ?> type="radio"> + +
+
+ opd_rate_direct ?? '') ?> type="radio"> + +
+
+
+
+
+ + +
+
+
+ opd_cash ?? 0) ?>> + +
+
+
+
+ opd_credit ?? 0) ?>> + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
Charges And Medicine
+
+
+
+
+ +
+ charge_rate_direct ?? '') ?> type="radio"> + +
+
+ charge_rate_direct ?? '') ?> type="radio"> + +
+
+
+
+
+ + +
+
+
+ charge_credit ?? 0) ?>> + +
+
+
+
+ med_credit ?? 0) ?>> + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+ + + + diff --git a/app/Views/Setting/Insurance/insurance_search_v.php b/app/Views/Setting/Insurance/insurance_search_v.php new file mode 100644 index 0000000..9c78b18 --- /dev/null +++ b/app/Views/Setting/Insurance/insurance_search_v.php @@ -0,0 +1,45 @@ +
+
+

Insurance Company

+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Company NameContact NumberOPD FeeActive
ins_company_name ?? '') ?>ins_contact_number ?? '') ?>opd_fee ?? '') ?>activestatus ?? '') ?> + +
No insurance companies found.
+
+
+
diff --git a/app/Views/Setting/MedicalBank/bank_search_v.php b/app/Views/Setting/MedicalBank/bank_search_v.php new file mode 100644 index 0000000..2b5240e --- /dev/null +++ b/app/Views/Setting/MedicalBank/bank_search_v.php @@ -0,0 +1,339 @@ +
+
+

Medical Bank & Payment Sources

+
+
+ +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+
Payment Sources
+
+ + + + + + + + + + + + +
Pay Type
Select a bank to view payment sources.
+
+
+
+
+ +
+ +
+
+
Medical Banks
+
+ + + + + + + + + + + + + + + + + + + + + +
Bank
bank_name ?? '') ?> + + +
No banks found.
+
+
+
+
+
+ + + + + + diff --git a/app/Views/Setting/Reffer/reffer_add.php b/app/Views/Setting/Reffer/reffer_add.php new file mode 100644 index 0000000..6249c9b --- /dev/null +++ b/app/Views/Setting/Reffer/reffer_add.php @@ -0,0 +1,70 @@ +
+
+

New Referral Client

+
+ +
+
+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+ + diff --git a/app/Views/Setting/Reffer/reffer_edit.php b/app/Views/Setting/Reffer/reffer_edit.php new file mode 100644 index 0000000..d5981f1 --- /dev/null +++ b/app/Views/Setting/Reffer/reffer_edit.php @@ -0,0 +1,72 @@ + +
+
+

Edit Referral Client

+
+ +
+
+
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+
+ + + diff --git a/app/Views/Setting/Reffer/reffer_index.php b/app/Views/Setting/Reffer/reffer_index.php new file mode 100644 index 0000000..3d3c966 --- /dev/null +++ b/app/Views/Setting/Reffer/reffer_index.php @@ -0,0 +1,72 @@ +
+
+

Referral Clients

+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeRegister DateStatusEdit
title ?? '') . ' ' . ($row->f_name ?? '')) ?>type_desc ?? 'Others') ?>str_dateadd ?? '') ?> + active)) : ?> + Active + + Inactive + + + +
No referral clients found.
+
+
+
+ + diff --git a/app/Views/Setting/Reffer/reffer_type_list.php b/app/Views/Setting/Reffer/reffer_type_list.php new file mode 100644 index 0000000..1cbcf16 --- /dev/null +++ b/app/Views/Setting/Reffer/reffer_type_list.php @@ -0,0 +1,128 @@ +
+
+

Referral Types

+
+ +
+
+
+ + + +
+ + +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + $type) : ?> + + + + + + + + + + + + +
#TypeAction
+ + + + +
No referral types found.
+
+
+
+ + diff --git a/app/Views/Setting/Reffer/temp/hospital_refer/reffer_add.php b/app/Views/Setting/Reffer/temp/hospital_refer/reffer_add.php new file mode 100644 index 0000000..2351380 --- /dev/null +++ b/app/Views/Setting/Reffer/temp/hospital_refer/reffer_add.php @@ -0,0 +1,78 @@ +
+

+ New Refferal Client + +

+ +
+ +
+
+
+ +'form','class'=>'form1'));?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ \ No newline at end of file diff --git a/app/Views/Setting/Reffer/temp/hospital_refer/reffer_edit.php b/app/Views/Setting/Reffer/temp/hospital_refer/reffer_edit.php new file mode 100644 index 0000000..5107de5 --- /dev/null +++ b/app/Views/Setting/Reffer/temp/hospital_refer/reffer_edit.php @@ -0,0 +1,78 @@ +
+

+ Edit Refferal Client + +

+ +
+ +
+
+
+ +'form','class'=>'form1'));?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ \ No newline at end of file diff --git a/app/Views/Setting/Reffer/temp/hospital_refer/reffer_index.php b/app/Views/Setting/Reffer/temp/hospital_refer/reffer_index.php new file mode 100644 index 0000000..375a2a1 --- /dev/null +++ b/app/Views/Setting/Reffer/temp/hospital_refer/reffer_index.php @@ -0,0 +1,61 @@ +

+
+
+

Reffer Person Name / clinic / Hospital

+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
NameTypeRegister DateStatusEdit
title.' '.$row->f_name?>refer_type==0){ + echo 'Person'; + } elseif($row->refer_type==1){ + echo 'Doctor'; + }elseif($row->refer_type==2){ + echo 'Staff'; + }elseif($row->refer_type==3){ + echo 'Hospital/Clinic'; + }else{ + echo 'Others'; + } + + ?>str_dateadd?> + active){ + echo "".lang('index_active_link').""; + }else{ + echo "".lang('index_inactive_link').""; + } + ?> + Edit
+ +
+ + +
\ No newline at end of file diff --git a/app/Views/Setting/Template/index.php b/app/Views/Setting/Template/index.php new file mode 100644 index 0000000..d724ba1 --- /dev/null +++ b/app/Views/Setting/Template/index.php @@ -0,0 +1,202 @@ +user() : null; +$canPathology = $user && method_exists($user, 'can') ? $user->can('template.pathology') : false; +$canUltrasound = $user && method_exists($user, 'can') ? $user->can('template.ultrasound') : false; +$canXray = $user && method_exists($user, 'can') ? $user->can('template.xray') : false; +$canCt = $user && method_exists($user, 'can') ? $user->can('template.ct') : false; +$canMri = $user && method_exists($user, 'can') ? $user->can('template.mri') : false; +$canEcho = $user && method_exists($user, 'can') ? $user->can('template.echo') : false; +$canOpdPrintTemplate = $user && method_exists($user, 'can') ? $user->can('billing.opd.edit') : false; + +if (! $canOpdPrintTemplate && $user && method_exists($user, 'inGroup')) { + $canOpdPrintTemplate = $user->inGroup('OPDEdit', 'admin', 'superadmin', 'developer'); +} + +$hasTemplateAccess = $canPathology || $canUltrasound || $canXray || $canCt || $canMri || $canEcho; +?> +
+
+

Templates Library

+ +
+ + + + +
+ You do not have access to any templates. Please contact your administrator. +
+ + + + +
+
+
+
diff --git a/app/Views/account/my_profile.php b/app/Views/account/my_profile.php new file mode 100644 index 0000000..00c529b --- /dev/null +++ b/app/Views/account/my_profile.php @@ -0,0 +1,144 @@ +
+
+
+
+
My Profile
+
+ + username ?? '')); + if ($loginId === '') { + $loginId = trim((string) ($user->email ?? 'User')); + } + $personName = trim((string) ($person_name ?? '')); + ?> + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
Change Password (Optional)
+
+ + +
+
+ + +
+
+ +
+ + +
+
Update your email, phone, and password here.
+
+
+
+
+
+ + diff --git a/app/Views/auth/login.php b/app/Views/auth/login.php new file mode 100644 index 0000000..d855656 --- /dev/null +++ b/app/Views/auth/login.php @@ -0,0 +1,147 @@ + + + + + + + + <?= lang('Auth.login') ?> + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+ + + +
+ +
+ +
+
+

+
+ + + + + + + + + + + +
+ + +
+ +
+ @ + +
Please enter your username.
+
+
+ +
+ + +
Please enter your password!
+
+ + +
+
+ checked> + +
+
+ + +
+ +
+ + +
+

+
+ + + +
+

+
+ + +
+ +
+
+ +
+
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/Views/auth/register.php b/app/Views/auth/register.php new file mode 100644 index 0000000..f374327 --- /dev/null +++ b/app/Views/auth/register.php @@ -0,0 +1,65 @@ +extend(config('Auth')->views['layout']) ?> + +section('title') ?> endSection() ?> + +section('main') ?> + +
+
+
+
+ + + + + + + +
+ + + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ + +
+ +
+ +
+ +

+ +
+
+
+
+ +endSection() ?> diff --git a/app/Views/billing/Patient_Cards_V.php b/app/Views/billing/Patient_Cards_V.php new file mode 100644 index 0000000..a86a7f0 --- /dev/null +++ b/app/Views/billing/Patient_Cards_V.php @@ -0,0 +1,127 @@ +
+

Insurance Cards

+ +
+ +
+
+
+

Insurance Cards

+
+
+
+

Patient: p_fname ?? '') ?>

+ + id ?? 0); + $insCompanyId = (int) ($card->insurance_id ?? ($selectedInsId ?? 0)); + $insInsuranceNo = (string) ($card->insurance_no ?? ''); + $cardHolderName = (string) ($card->card_holder_name ?? ''); + $relationPatient = (string) ($card->relation_patient_cardholder ?? ''); + $issueDate = !empty($card->issue_date) ? date('d/m/Y', strtotime($card->issue_date)) : date('d/m/Y'); + $expiryDate = !empty($card->expiry_date) ? date('d/m/Y', strtotime($card->expiry_date)) : date('d/m/Y'); + ?> + +
+ + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ + +
No insurance cards found for this patient.
+ +
+ + + + + + + + + + + + + + + + + + + + + +
CompanyCard NoHolder NameRelationStatus
ins_company_name ?? '') ?>insurance_no ?? '') ?>card_holder_name ?? '') ?>relation_patient_cardholder ?? '') ?>status) ? esc((string) $card->status) : '' ?>
+
+ + +
+ Use the insurance module to add or edit card details. +
+
+
+
+ + diff --git a/app/Views/billing/Patient_File_Upload_V.php b/app/Views/billing/Patient_File_Upload_V.php new file mode 100644 index 0000000..68d17c2 --- /dev/null +++ b/app/Views/billing/Patient_File_Upload_V.php @@ -0,0 +1,20 @@ +
+
+ +
+ + +
+ + + + +
+ + +
+ +
+
+
diff --git a/app/Views/billing/Patient_Profile_Image_V.php b/app/Views/billing/Patient_Profile_Image_V.php new file mode 100644 index 0000000..0e736e5 --- /dev/null +++ b/app/Views/billing/Patient_Profile_Image_V.php @@ -0,0 +1,311 @@ +
+

Profile Image

+ +
+ +
+
+
+

Profile Image

+
+
+

Patient: p_fname ?? '') ?>

+ +
+
+
+ Profile Image +
+
+
+
+
+
+ +
+
+ + + + +
+
Camera is idle.
+
+
+
+ +
Captured image will appear here.
+
+
+
+
+
Recent Captures
+ +
+
+
+
+
+ +
+ +
+ + + + +
+ + +
+
+
+
+
+
+
+ + + + diff --git a/app/Views/billing/Patient_Profile_Opd_V.php b/app/Views/billing/Patient_Profile_Opd_V.php new file mode 100644 index 0000000..74a5ac5 --- /dev/null +++ b/app/Views/billing/Patient_Profile_Opd_V.php @@ -0,0 +1,80 @@ +
+

OPD Scans

+ +
+ +
+
+
+

OPD Scans

+
+
+

Patient: p_fname ?? '') ?>

+ + +
No OPD scans found.
+ + +
+
+
+ + Dr. +
+
+ +
+
+ + +
No files for this OPD.
+ +
+ $file) { ?> +
+ + Open PDF + + OPD Scan + +
+ +
+ +
+ + +
+
+ + +
+ + diff --git a/app/Views/billing/Patient_Search_V.php b/app/Views/billing/Patient_Search_V.php new file mode 100644 index 0000000..9db43ff --- /dev/null +++ b/app/Views/billing/Patient_Search_V.php @@ -0,0 +1,45 @@ +

+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sr.No.Patient/UHID CodeName {Relative Name}AgeLast VisitInsurance
p_code ?>p_fname ?> {p_rname ?>}dob ?? null, $data[$i]->age ?? '', $data[$i]->age_in_month ?? '', $data[$i]->estimate_dob ?? '', $data[$i]->Last_Visit ?? null)) ?>Last_Visit ?>insurance_id==0 ? 'Self': 'Insuranced'); ?>
Sr.No.Patient/UHID CodeName {Relative Name}AgeLast VisitInsurance
+
+ +
+ \ No newline at end of file diff --git a/app/Views/billing/Patient_Search_opd.php b/app/Views/billing/Patient_Search_opd.php new file mode 100644 index 0000000..5b32989 --- /dev/null +++ b/app/Views/billing/Patient_Search_opd.php @@ -0,0 +1,50 @@ +

+
+
+

Last OPDs

+
+
+ + + + + + + + + + + + + + + + $row) : ?> + + + + + + + + + + + + + +
Sr.No.OPD CodePatient/UHID CodeName {Relative Name}AgeVisit DateDoctorInsurance
opd_code ?? '') ?>p_code ?>p_fname ?? '') . ' {' . ($row->p_rname ?? '') . '}') ?>dob ?? null, $row->age ?? '', $row->age_in_month ?? '', $row->estimate_dob ?? '', $row->opd_Visit ?? null)) ?>opd_Visit ?? '') ?>doc_name ?? '') ?>short_name ?? '') ?>
+
+
+ + + diff --git a/app/Views/billing/Patient_V.php b/app/Views/billing/Patient_V.php new file mode 100644 index 0000000..3f399e0 --- /dev/null +++ b/app/Views/billing/Patient_V.php @@ -0,0 +1,468 @@ + +
+
+
+
+
+
Patient Management
+ +
+
+
+
+
+
+ +
+
+
+ + +
+
+
+
+ + +
Please enter phone number.
+
+
+
+
+
+ + +
+
+
+
+ + +
Please enter full name.
+
+
+
+
+ +
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+ +
+
+ > + +
+
+ +
> +
+ +
+
+ +
+
+ +
+
+
+
+ +
> + + +
+
+
+ +
+
+
+ + +
+
+
+
+ + +
Please enter relative name.
+
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/app/Views/billing/Person_Edit_V.php b/app/Views/billing/Person_Edit_V.php new file mode 100644 index 0000000..a44c528 --- /dev/null +++ b/app/Views/billing/Person_Edit_V.php @@ -0,0 +1,404 @@ +
+

Person Profile - p_fname; ?> p_code; ?>

+ +
+user(); + $isAdmin = is_object($user) && method_exists($user, 'inGroup') ? $user->inGroup('admin') : false; + if ($data[0]->p_edit == 1 || $isAdmin) { + $readonly = ''; + } else { + $readonly = 'readonly'; + } +?> + +
+
+
+
+
+
+

Person Profile

+
+
+
+ + +
+
+
+ + +
+
+
+
+ + > +
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ estimate_dob; + if($chk_age==1) + { + $checkbox_checked="checked"; + $age_input_2='style="display: none;"'; + $age_input_1=''; + $DateofBirth=''; + }else{ + $checkbox_checked=""; + $age_input_1='style="display: none;"'; + $age_input_2=''; + $DateofBirth=MysqlDate_to_str($data[0]->dob); + } + ?> +
+
+ +
+
+
> +
+
+ + + + + + + + + +
Year : + Month :
+
+
+
+
> +
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ +
+ + \ No newline at end of file diff --git a/app/Views/billing/Person_profile_V.php b/app/Views/billing/Person_profile_V.php new file mode 100644 index 0000000..a924c1b --- /dev/null +++ b/app/Views/billing/Person_profile_V.php @@ -0,0 +1,354 @@ +
+

Profile

+ +
+ +
+
+
+ + user(); + $canEditOpd = is_object($user) && method_exists($user, 'can') ? $user->can('billing.opd.edit') : false; + $canChargeEdit = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.edit') : false; + ?> + + + + +
+
+
+
+ Profile +

p_fname) ?>

+

p_code; ?>

+
+ + + +
+
+
+ + + + + +
+
+
+
+
+
OPD Visits
+
+
+
+
Invoices
+
+
+
+
Insurance
+
insurance_id ?? 0) > 0 ? 'Yes' : 'No' ?>
+
+
+
+
+
+
+ +
+
+
+ + +
+
+
Profile Details
+
+
Full Name
+
p_fname) ?>
+
+
+
Gender / Age
+
xgender?> / dob ?? null, $data[0]->age ?? '', $data[0]->age_in_month ?? '', $data[0]->estimate_dob ?? '')) ?>
+
+
+
Relation
+
p_relative?> p_rname)?>
+
+
+
Aadhar No.
+
udai?>
+
+
+
Phone
+
mphone1?>
+
+
+
Email
+
email1?>
+
+
+
Blood Group
+
blood_group?>
+
+
+
Address
+
add1?> city ?> district ?> state ?> zip ?>
+
+ +
Quick Update
+
+
+ +
+ + +
+
+
+ +
+
+
+ +
+
Insurance Details
+ insurance_id>0) { ?> +
+
Company
+
ins_company_name?>
+
+
+
Card Holder
+
card_holder_name?>
+
+
+
Relation
+
relation_patient_cardholder?>
+
+
+
Insurance ID
+
insurance_no?>
+
+ +
+ 0){ ?> +
+
Case Code: case_id_code?>
+
Visit Date Start: str_date_registration?>
+
Claim/Case No.: insurance_no_1?>
+
Other IDs: insurance_no_2?>
+ +
+ 0){ ?> + +
+
Case Code: case_id_code?>
+
Org. Date Start: str_date_registration?>
+
Claim/Case No.: insurance_no_1?>
+
Other IDs: insurance_no_2?>
+
IPD No: ipd_code?>
+
IPD Admit Date: str_date_registration?>
+ +
+ +
+ + +
+ +
+ +
+ opd_allowed==1) { ?> + + + charge_cash==1 && $canChargeEdit) { ?> + + +
+ +
No insurance details available.
+ +
+ + 0) { ?> +
+
OPD Registration
+ '; + echo ''.$row->opd_code.''; + echo '
'; + echo 'Dr.'.$row->doc_name.' '; + echo 'D:'.$row->str_apointment_date.' '; + echo 'P:'.$row->p_fname.'
'; + + if($canEditOpd || $row->new_opd==1){ + echo 'Edit OPD'; + echo 'Print Day Care'; + } + echo '
'; + echo '
'; + } + ?> +
+ + + 0) { ?> +
+
Charges Invoice
+ '; + echo ''.$row->invoice_code.''; + echo ' D:'.$row->str_inv_date.''; + echo ' N:'.$row->inv_name.''; + echo '
'; + echo ''.$row->Item_List.'
'; + if($row->invoice_status==0) + { + if ($canChargeEdit) { + echo 'Edit Charges Invoice'; + echo 'Delete : Un-confirm Invoice'; + } + }else{ + echo 'Show Charges Invoice'; + } + echo '
'; + echo '
'; + } + ?> +
+ +
+
+
+
+
+ +
+ + \ No newline at end of file diff --git a/app/Views/billing/charges/charges_invoice_edit.php b/app/Views/billing/charges/charges_invoice_edit.php new file mode 100644 index 0000000..0210f96 --- /dev/null +++ b/app/Views/billing/charges/charges_invoice_edit.php @@ -0,0 +1,266 @@ +
+

Charges

+ +
+
+
+ +user(); + $canChargeDateEdit = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.date-edit') : false; + $invoiceDateValue = ''; + if (!empty($invoiceMaster[0]->inv_date)) { + $invoiceDateValue = date('Y-m-d', strtotime((string) $invoiceMaster[0]->inv_date)); + } + $dateReadonly = $canChargeDateEdit ? '' : 'readonly'; + $dateInputClass = $canChargeDateEdit ? 'form-control' : 'form-control bg-light'; +?> +
+
+
+

Name :p_fname ?? '') ?> {p_rname ?? '') ?>} + / Age :age ?? '') ?> + / Gender :xgender ?? '') ?> + / P Code :p_code ?? '') ?> + 0) : ?> + / No. of Days :no_days ?? '') ?> + +

+ + + +
+
+
+
+
+ + +
+
+ + +
+
+ + /> +
+
+
+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + if (in_array((int) $row->item_type, [1, 2, 3, 4, 5], true)) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + +
#Charges GroupCharge NameRateQtyUpdated QtyAmount
' . $srno . '' . $row->group_desc . '' . $row->item_name . '' . $row->item_rate . '' . $row->item_qty . '' . $row->item_amount . ''; + } else { + echo '' . $row->item_rate . '' . $row->item_amount . ''; + echo ''; + } + echo ''; + echo '
#Gross TotalGtotal ?? 0) ?>
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+ diff --git a/app/Views/billing/charges/charges_invoice_show.php b/app/Views/billing/charges/charges_invoice_show.php new file mode 100644 index 0000000..2883839 --- /dev/null +++ b/app/Views/billing/charges/charges_invoice_show.php @@ -0,0 +1,520 @@ +user(); + $canChargeView = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.view') : false; + $canChargeEdit = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.edit') : false; + $canChargePay = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.pay') : false; + $canChargeCancel = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.cancel') : false; + $canChargeCorrect = is_object($user) && method_exists($user, 'can') ? $user->can('billing.charges.correct') : false; +?> +
+ +
+
+
+

+ Invoice + #invoice_code ?? '') ?> +

+
+
+
+ ipd_id ?? 0) > 0) : ?> + IPD Panel + + payment_status ?? 0) == 0 && $canChargeEdit) : ?> + Edit Invoice + + Person +
+
+
+
+
+
+
+
+
+ To +
+ p_fname ?? '') ?>
+ p_relative ?? '') ?> : p_rname ?? '') ?>
+ Gender : xgender ?? '') ?>
+ Age : age ?? '') ?>
+ Phone No : mphone1 ?? '') ?> +
+
+
+ Invoice #invoice_code ?? '') ?>
+ insurance_id ?? 0) > 1) : ?> + Ins. Comp. :ins_company_name ?? '') ?>
+ insurance_case_id ?? 0) > 0 && count($case_master) > 0) : ?> + Org.Case No. :case_id_code ?? '') ?>
+ + + Date : inv_date ?? '') ?>
+ Patient ID : p_code ?? '') ?>
+ Refer By : refer_by_other ?? '') ?>
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + payment_status ?? 0) == 0) : ?> + + + + + + + + + + + + + + + + + + + + + + + + +
#Charges GroupCharge NameRateQtyAmount
group_desc ?? '') ?>item_name ?? '') ?>item_rate ?? '') ?>item_qty ?? '') ?>item_amount ?? '') ?>
#Gross Totaltotal_amount ?? '') ?>
#Deduction
#Deductiondiscount_desc ?? '') ?>discount_amount ?? '') ?>
#Net Amountnet_amount ?? '') ?>
+
+
+
+
+
+
+ +payment_status ?? 0) == 0 && $canChargePay) : ?> +
+
+
+
+ + + + + + + + + + +
#Amount received : Balance Amount :
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+ 0) : ?> +
+

+ +

+
+
+ +
+
+
+
+

+ +

+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+

+ +

+
+
+ +
+
+
+ + + +
+

+ +

+
+
+ + +
+
+
+ + + insurance_id ?? 0) > 0) : ?> +
+

+ +

+
+
+ +
+
+
+ + + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+ + +
+ + +payment_status ?? 0) == 1 && $canChargeView) : ?> +
+
+
+ +
+ +
+ + +
+ +
+ +
+ + payment_mode ?? 0) === 1 || (int) ($invoice_master[0]->payment_mode ?? 0) === 2)) : ?> +
+
+ + + + + + + + + +
#Deduction + + + + +
+ + +
+
+ + +
+
+
+ +
+
+ + diff --git a/app/Views/billing/ipd/cash_balance.php b/app/Views/billing/ipd/cash_balance.php new file mode 100644 index 0000000..af07052 --- /dev/null +++ b/app/Views/billing/ipd/cash_balance.php @@ -0,0 +1,116 @@ + + + + +
+ +
+
+

Cash Balance

+
+
+
+ DataTable plugin is not loaded. Please include jQuery DataTables to enable filtering. +
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+ Shows pending balances for direct customers within the date range. +
+
+
+
+
+
+
+
+
+
+ + + + diff --git a/app/Views/billing/ipd/cash_balance_table.php b/app/Views/billing/ipd/cash_balance_table.php new file mode 100644 index 0000000..95e797f --- /dev/null +++ b/app/Views/billing/ipd/cash_balance_table.php @@ -0,0 +1,56 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#IPD CodeP CodePerson NamePhone No.Admit DateDischarge DateDoc. NameNet AmountPaid Amt.Balance Amt.Type
ipd_code ?? '') ?>p_code ?? '') ?>p_fname ?? '') ?>Contact_info ?? '') ?>str_register_date ?? '') ?>str_discharge_date ?? '') ?>doc_name ?? '') ?>net_amount ?? '') ?>sum_of_paid ?? '') ?>balance_amount ?? '') ?>admit_type ?? '') ?>
#Total
+
diff --git a/app/Views/billing/ipd/current_admission.php b/app/Views/billing/ipd/current_admission.php new file mode 100644 index 0000000..d7dcbb1 --- /dev/null +++ b/app/Views/billing/ipd/current_admission.php @@ -0,0 +1,78 @@ + + +
+ +
+
+

Current Admission

+
+
+ +
+ DataTable plugin is not loaded. Please include jQuery DataTables to enable filtering. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodeName/Patient CodeBed No. [Type]Register DateNo. of DaysDr. NameAdmit TypeAmount
ipd_code ?? '') ?>[p_code ?? '') ?>] p_fname ?? '') ?>
p_rname ?? '') ?>
Bed_Desc ?? '') ?>str_register_date ?? '') ?>no_days ?? '') ?>doc_name ?? '') ?>admit_type ?? '') ?>
Org_Status ?? '') ?>
insurance_no_1 ?? '') ?>
C:charge_amount ?? '') ?>/M:med_amount ?? '') ?>/P:paid_amount ?? '') ?>/B:balance ?? '') ?> + id)) : ?> + + + + +
IPD CodeName/Patient CodeBed No. [Type]Register DateNo. of DaysDr. NameAdmit TypeAmount
+
+
+
+
+ + diff --git a/app/Views/billing/ipd/dashboard.php b/app/Views/billing/ipd/dashboard.php new file mode 100644 index 0000000..fe2907f --- /dev/null +++ b/app/Views/billing/ipd/dashboard.php @@ -0,0 +1,22 @@ +
+
+
+

IPD Billing

+
+ + + +
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/app/Views/billing/ipd/invoice_list.php b/app/Views/billing/ipd/invoice_list.php new file mode 100644 index 0000000..db7c6f1 --- /dev/null +++ b/app/Views/billing/ipd/invoice_list.php @@ -0,0 +1,180 @@ + + + + +
+ +
+
+

IPD Invoice

+
+
+ +
+ DataTable plugin is not loaded. Please include jQuery DataTables to enable filtering. +
+
+
+
+ + + +
+   + +
+
+
+
+ +
+
+ Use filters to narrow results. Search per column below. +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient CodeNameTypeClaim NoDoctorStatusRegistrationDischargeDis. Status
+
+
+
+
+
+ + + + diff --git a/app/Views/billing/ipd/ipd_model_payment_box.php b/app/Views/billing/ipd/ipd_model_payment_box.php new file mode 100644 index 0000000..d7511a5 --- /dev/null +++ b/app/Views/billing/ipd/ipd_model_payment_box.php @@ -0,0 +1,165 @@ +dob ?? null, $person->age ?? '', $person->age_in_month ?? '', $person->estimate_dob ?? ''); +} +?> +
+
+

+ Name : p_fname ?? '') ?> {p_rname ?? '') ?>} + / Age : + / Gender : xgender ?? '') ?> + / P Code : p_code ?? '') ?> + / IPD Code : ipd_code ?? '') ?> + / No of Days : no_days ?? '') ?> +

+
+
+ +
+
+ Amount +
+
+
+
+ + +
+
+ + +
+
+
+
+ +
+
+

+ +

+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+

+ +

+
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + + diff --git a/app/Views/billing/ipd/ipd_panel_deduction_payment.php b/app/Views/billing/ipd/ipd_panel_deduction_payment.php new file mode 100644 index 0000000..3dae95f --- /dev/null +++ b/app/Views/billing/ipd/ipd_panel_deduction_payment.php @@ -0,0 +1,133 @@ +
+
+ Payment Deduction +
+
+
+
+ + +
+
+
+
+ + + +
+
+

+ +

+
+
+
+
+ + +
+
+ +
+
+
+
+
+
+

+ +

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+ + diff --git a/app/Views/billing/ipd/ipd_panel_tpa_payment.php b/app/Views/billing/ipd/ipd_panel_tpa_payment.php new file mode 100644 index 0000000..9c44574 --- /dev/null +++ b/app/Views/billing/ipd/ipd_panel_tpa_payment.php @@ -0,0 +1,75 @@ +id ?? 0)); +?> +
+
+ TPA and Other Payment / Discount +
+
+ +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ +
+
+
+
+ + diff --git a/app/Views/billing/ipd/ipd_payment_receipt_print.php b/app/Views/billing/ipd/ipd_payment_receipt_print.php new file mode 100644 index 0000000..10a2f00 --- /dev/null +++ b/app/Views/billing/ipd/ipd_payment_receipt_print.php @@ -0,0 +1,28 @@ + +
+
+ IPD Payment Amount_str ?? '') ?> Receipt : +
+
+
+
+

UHID : p_code ?? '') ?>

+

Name : title ?? '') ?> p_fname ?? '') ?>

+

Sex : xgender ?? '') ?> age ?? '') ?>

+

Phone : mphone1 ?? '') ?>

+
+
+

IPD No. : ipd_code ?? '') ?>

+

Date : payment_date_str ?? '') ?>

+
+
+
+

IPD Amount_str ?? '') ?> Amount : Rs. amount ?? '') ?>

+

Amount in Words : Rs. amount ?? 0)) ?>

+

Prepared By : update_by ?? '') ?>

+
+
diff --git a/app/Views/billing/ipd/panel.php b/app/Views/billing/ipd/panel.php new file mode 100644 index 0000000..6d75882 --- /dev/null +++ b/app/Views/billing/ipd/panel.php @@ -0,0 +1,320 @@ +dob ?? null, $person->age ?? '', $person->age_in_month ?? '', $person->estimate_dob ?? ''); +} +?> +
+ + + + +
+
+
+
IPD : ipd_code ?? '') ?>
+
+ +
+
+
+
+
+
+

+ Name : p_fname ?? '') ?> {p_rname ?? '') ?>} + / Age : + / Gender : xgender ?? '') ?> + / UHID : p_code ?? '') ?> + / No of Days : no_days ?? '') ?> +

+

+ Admit Date : str_register_date ?? '') ?> + / Discharge Date : str_discharge_date ?? '') ?> +

+
+ +
+
+ +
+
+ Charges : charge_amount ?? '0') ?> + Pharmacy Cr. IPD : med_amount ?? '0') ?> + Net Amount : net_amount ?? '0') ?> +
+
+ Total Paid : total_paid_amount ?? '0') ?> + Balance : balance_amount ?? '0') ?> +
+    + +
+
+ Pharmacy Bill : cash_med_amount ?? '0') ?> + Paid Amount : med_paid ?? '0') ?> +
+
+ + ins_company_name ?? '') || ! empty($ipd->case_id_code ?? '') || ! empty($ipd->insurance_no ?? '') || ! empty($ipd->insurance_no_1 ?? '') || ! empty($ipd->insurance_no_2 ?? '')) : ?> +
+ ins_company_name ?? '')) : ?> + + Insurance: ins_company_name ?? '') ?> + ins_short_name ?? '')) : ?> + Short: ins_short_name ?? '') ?> + + + + case_id_code ?? '')) : ?> + Org Case: case_id_code ?? '') ?> + + insurance_no ?? '')) : ?> + Card No: insurance_no ?? '') ?> + + insurance_no_1 ?? '')) : ?> + Claim ID: insurance_no_1 ?? '') ?> + + insurance_no_2 ?? '')) : ?> + Service No: insurance_no_2 ?? '') ?> + +
+ +
+
+
+ + +
+
+ +
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
Loading...
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/app/Views/billing/ipd/panel_admission.php b/app/Views/billing/ipd/panel_admission.php new file mode 100644 index 0000000..07dd8ea --- /dev/null +++ b/app/Views/billing/ipd/panel_admission.php @@ -0,0 +1,34 @@ +dob ?? null, $person->age ?? '', $person->age_in_month ?? '', $person->estimate_dob ?? ''); +} +?> +
+
+
+
+
Patient
+

Name : p_fname ?? '') ?> {p_rname ?? '') ?>}

+

UHID : p_code ?? '') ?>

+

Gender : xgender ?? '') ?>

+

Age :

+

Phone : mphone1 ?? '') ?>

+
+
+
+
+
+
+
Admission
+

IPD Code : ipd_code ?? '') ?>

+

Admit Date : str_register_date ?? '') ?>

+

Discharge Date : str_discharge_date ?? '') ?>

+

No. of Days : no_days ?? '') ?>

+

Insurance : ins_company_name ?? 'Direct') ?>

+
+
+
+
diff --git a/app/Views/billing/ipd/panel_bed_assign.php b/app/Views/billing/ipd/panel_bed_assign.php new file mode 100644 index 0000000..6910f68 --- /dev/null +++ b/app/Views/billing/ipd/panel_bed_assign.php @@ -0,0 +1,34 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bed CodeBed NumberWardAssigned DateReleased DateTypeRemarks
bed_code ?? '') ?>bed_number ?? '') ?>ward_name ?? '') ?>assigned_date ?? '') ?>released_date ?? '') ?>assignment_type ?? '') ?>remarks ?? '') ?>
No bed assignments found.
+
diff --git a/app/Views/billing/ipd/panel_bill_details.php b/app/Views/billing/ipd/panel_bill_details.php new file mode 100644 index 0000000..b7e89c3 --- /dev/null +++ b/app/Views/billing/ipd/panel_bill_details.php @@ -0,0 +1,325 @@ +dob ?? null, $person->age ?? '', $person->age_in_month ?? '', $person->estimate_dob ?? ''); +} +$discountTotal = 0.0; +$extraCharge = 0.0; +if ($ipd) { + $discountTotal = (float) ($ipd->Discount ?? 0) + (float) ($ipd->Discount2 ?? 0) + (float) ($ipd->Discount3 ?? 0); + $extraCharge = (float) ($ipd->chargeamount1 ?? 0) + (float) ($ipd->chargeamount2 ?? 0); +} +$billTotals = $bill_totals ?? ['gross' => 0.0, 'net' => 0.0]; +$paidTotal = (float) ($billTotals['paid'] ?? 0); +$balanceTotal = (float) ($billTotals['balance'] ?? 0); +$grossAmount = (float) ($ipd->gross_amount ?? 0); +$netAmount = (float) ($ipd->net_amount ?? 0); + $balanceAmount = (float) ($ipd->balance_amount ?? 0); +if ($grossAmount <= 0) { + $grossAmount = (float) ($billTotals['gross'] ?? 0); +} +if ($netAmount <= 0) { + $netAmount = (float) ($billTotals['net'] ?? 0); +} +if ($balanceAmount <= 0) { + $balanceAmount = $balanceTotal; +} +?> + +
+
+ IPD Invoice + / IPD ID: ipd_code ?? '') ?> +
+
+

+ Name : p_fname ?? '') ?> + / Age : + / Gender : xgender ?? '') ?> + / P Code : p_code ?? '') ?> + + / Ins. Comp. : + +

+ +
+ + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + $headDesc = 'Package'; + $headTotal = 0.0; + + foreach ($ipd_packages as $row) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srNo++; + $headTotal += (float) ($row->package_Amount ?? 0); + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $ipdItems = $ipd_invoice_items ?? []; + $ipdItemCount = count($ipdItems); + for ($i = 0; $i < $ipdItemCount; $i++) { + $row = $ipdItems[$i]; + if ($headDesc !== ($row->group_desc ?? '')) { + echo ''; + echo ''; + echo ''; + echo ''; + $headDesc = (string) ($row->group_desc ?? ''); + $headTotal = 0.0; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srNo++; + $headTotal += (float) ($row->item_amount ?? 0); + echo ''; + + $next = $ipdItems[$i + 1] ?? null; + if ($next === null || ($headDesc !== ($next->group_desc ?? ''))) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + + $showItems = $showinvoice ?? []; + $showCount = count($showItems); + for ($i = 0; $i < $showCount; $i++) { + $row = $showItems[$i]; + if ($headDesc !== ($row->Charge_type ?? '')) { + echo ''; + echo ''; + echo ''; + echo ''; + $headDesc = (string) ($row->Charge_type ?? ''); + $headTotal = 0.0; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srNo++; + $headTotal += (float) ($row->amount ?? 0); + echo ''; + + $next = $showItems[$i + 1] ?? null; + if ($next === null || ($headDesc !== ($next->Charge_type ?? ''))) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + + if (! empty($inv_med_list)) { + echo ''; + echo ''; + echo ''; + echo ''; + + $medTotal = 0.0; + foreach ($inv_med_list as $row) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srNo++; + $medTotal += (float) ($row->net_amount ?? 0); + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + Discount ?? 0) > 0) : ?> + + + + + + + + + Discount2 ?? 0) > 0) : ?> + + + + + + + + + Discount3 ?? 0) > 0) : ?> + + + + + + + + + chargeamount1 ?? 0) > 0) : ?> + + + + + + + + + chargeamount2 ?? 0) > 0) : ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + payable_by_tpa ?? 0) > 0) : ?> + + + + + + + + + discount_for_tpa ?? 0) > 0) : ?> + + + + + + + + + discount_by_hospital ?? 0) > 0) : ?> + + + + + + + + + discount_by_hospital_2 ?? 0) > 0) : ?> + + + + + + + + + + + + + + + + + +
#DescriptionOrg.CodeUnitRateAmount
Package
' . $srNo . '' . esc($row->package_name ?? '') . '' . esc($row->org_code ?? '') . '' . esc(number_format((float) ($row->package_Amount ?? 0), 2)) . '
Sub Total' . esc(number_format($headTotal, 2)) . '
' . esc($row->group_desc ?? '') . '
' . $srNo . '' . esc(($row->item_name ?? '') . ' ' . ($row->comment ?? '')) . '' . esc($row->org_code ?? '') . '' . esc($row->item_qty ?? '') . '' . esc(number_format((float) ($row->item_rate ?? 0), 2)) . '' . esc(number_format((float) ($row->item_amount ?? 0), 2)) . '
Sub Total' . esc(number_format($headTotal, 2)) . '
' . esc($row->Charge_type ?? '') . '
' . $srNo . '' . esc($row->idesc ?? '') . '' . esc($row->orgcode ?? '') . '' . esc($row->no_qty ?? '') . '' . esc(number_format((float) ($row->item_rate ?? 0), 2)) . '' . esc(number_format((float) ($row->amount ?? 0), 2)) . '
Sub Total' . esc(number_format($headTotal, 2)) . '
Medicine
' . $srNo . '' . esc($row->inv_med_code ?? '') . '' . esc(number_format((float) ($row->net_amount ?? 0), 2)) . '
Med. Total' . esc(number_format($medTotal, 2)) . '
#Gross Total
#Remark :
Discount_Remark ?? '') ?>
DeductionDiscount ?? 0), 2)) ?>
#Remark :
Discount_Remark2 ?? '') ?>
DeductionDiscount2 ?? 0), 2)) ?>
#Remark :
Discount_Remark3 ?? '') ?>
DeductionDiscount3 ?? 0), 2)) ?>
#Remark :
charge1 ?? '') ?>
Chargechargeamount1 ?? 0), 2)) ?>
#Remark :
charge2 ?? '') ?>
Chargechargeamount2 ?? 0), 2)) ?>
#Net Amount
# + Payment Recd.
+ id ?? '') . ':' . esc($row->pay_mode ?? '') . ':' . esc($row->pay_date_str ?? '') . ':' . esc($row->amount ?? '') . '] / '; + if ($i % 3 === 0) { + echo '
'; + } + } + ?> +
0 ? $paidTotal : (float) ($ipd->total_paid_amount ?? 0), 2)) ?>
#Balance
#Payable By TPApayable_by_tpa ?? 0), 2)) ?>
#Discount For TPAdiscount_for_tpa ?? 0), 2)) ?>
#Discount By Hospitaldiscount_by_hospital_remark ?? '') ?>discount_by_hospital ?? 0), 2)) ?>
#Discount By Hospital/ Doctordiscount_by_hospital_2_remark ?? '') ?>discount_by_hospital_2 ?? 0), 2)) ?>
#Final Balancebalance_discount_after ?? 0), 2)) ?>
+
+
+
diff --git a/app/Views/billing/ipd/panel_diagnosis.php b/app/Views/billing/ipd/panel_diagnosis.php new file mode 100644 index 0000000..3b9ffdb --- /dev/null +++ b/app/Views/billing/ipd/panel_diagnosis.php @@ -0,0 +1,33 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice CodeDateCharge TypeAmountInclude
invoice_code ?? $row->inv_id ?? '') ?>str_date ?? '') ?>charge_list ?? '') ?>amount ?? '') ?>ipd_include ?? 0) > 0) ? 'Yes' : 'No' ?>
No diagnosis charges found.
+
diff --git a/app/Views/billing/ipd/panel_discharge.php b/app/Views/billing/ipd/panel_discharge.php new file mode 100644 index 0000000..9058934 --- /dev/null +++ b/app/Views/billing/ipd/panel_discharge.php @@ -0,0 +1,26 @@ + +
+
+
+
+
Discharge Status
+

Status : status_desc ?? 'Pending') ?>

+

Discharge Date : discharge_date ?? '') ?>

+

Discharge Time : discharge_time ?? '') ?>

+

Discharge By : discharge_by ?? '') ?>

+
+
+
+
+
+
+
Remarks
+

Remark : discharge_remark ?? '') ?>

+

Balance User : discharge_balance_user ?? '') ?>

+

Balance Remark : discharge_balance_remark ?? '') ?>

+
+
+
+
diff --git a/app/Views/billing/ipd/panel_ipd_charges.php b/app/Views/billing/ipd/panel_ipd_charges.php new file mode 100644 index 0000000..5019363 --- /dev/null +++ b/app/Views/billing/ipd/panel_ipd_charges.php @@ -0,0 +1,312 @@ +id ?? 0); +$packages = $ipd_packages ?? []; +$hasPackage = ! empty($packages); +$defaultPackageId = $hasPackage ? (int) ($packages[0]->id ?? 0) : 0; +$csrfName = csrf_token(); +$csrfHash = csrf_hash(); +$today = date('Y-m-d'); +?> + + + +
+
+
+
+ IPD Charges List +
+
+
+ + + + + + + + + + + + + + + + + + group_desc ?? ''; + if ($currentGroup !== $groupDesc) { + if ($currentGroup !== null) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + $currentGroup = $groupDesc; + $groupTotal = 0.0; + echo ''; + echo ''; + echo ''; + echo ''; + } + $srNo++; + $groupTotal += (float) ($row->item_amount ?? 0); + $itemId = (int) ($row->id ?? 0); + $qty = (float) ($row->item_qty ?? 0); + $rate = (float) ($row->item_rate ?? 0); + $docName = (string) ($row->doc_name ?? ''); + $comment = (string) ($row->comment ?? ''); + $packageChecked = (int) ($row->package_id ?? 0) > 0 ? 'checked' : ''; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Charge NameRateQtyAmount
#Sub Total' . esc(number_format($groupTotal, 2)) . '
#' . esc($currentGroup) . '
item_name ?? '') ?> + + + + + item_amount ?? 0), 2)) ?>
# + +
Dr.
+ + +
+ +
+ + + + +
+ + +
+
#Sub Total
No IPD charges found.
Total
+
+
+
+
+
+
+
+ Add Charges +
+
+
+ itype_id ?? 0); + $items = $item_lists[$typeId] ?? []; + $collapseId = 'chargeType' . $typeId; + $headingId = 'heading' . $typeId; + $typeIndex = ($typeIndex + 1) % count($colorMap); + ?> +
+

+ +

+
+
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ + diff --git a/app/Views/billing/ipd/panel_medical_bills.php b/app/Views/billing/ipd/panel_medical_bills.php new file mode 100644 index 0000000..73e92ae --- /dev/null +++ b/app/Views/billing/ipd/panel_medical_bills.php @@ -0,0 +1,31 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice CodeDateAmountStatus
inv_med_code ?? $row->id ?? '') ?>inv_date ?? '') ?>net_amount ?? '') ?>payment_status ?? 0) > 0) ? 'Paid' : 'Pending' ?>
No medical bills found.
+
diff --git a/app/Views/billing/ipd/panel_package.php b/app/Views/billing/ipd/panel_package.php new file mode 100644 index 0000000..e975076 --- /dev/null +++ b/app/Views/billing/ipd/panel_package.php @@ -0,0 +1,196 @@ +id ?? 0); +$csrfName = csrf_token(); +$csrfHash = csrf_hash(); +?> + +
+
+ IPD Package +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
#Package NameAmount
+ package_name ?? '') ?> + package_desc ?? $row->comment ?? '')) : ?> +
package_desc ?? $row->comment ?? '') ?> + +
+ + + + +
No packages found.
+
+ +
+
+

+ +

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+

+ +

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/billing/ipd/panel_payments.php b/app/Views/billing/ipd/panel_payments.php new file mode 100644 index 0000000..b61088d --- /dev/null +++ b/app/Views/billing/ipd/panel_payments.php @@ -0,0 +1,40 @@ +
+
+
+
+
IPD Payments
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#IDDateAmountMode
id ?? '') ?>pay_date_str ?? '') ?>amount ?? '') ?>pay_mode ?? '') ?>
No payments found.
+
+
+
+
+
diff --git a/app/Views/billing/ipd/panel_placeholder.php b/app/Views/billing/ipd/panel_placeholder.php new file mode 100644 index 0000000..25c7350 --- /dev/null +++ b/app/Views/billing/ipd/panel_placeholder.php @@ -0,0 +1,3 @@ +
+ : This section is under migration. +
diff --git a/app/Views/billing/main.php b/app/Views/billing/main.php new file mode 100644 index 0000000..eeb682a --- /dev/null +++ b/app/Views/billing/main.php @@ -0,0 +1,19 @@ +
+

Welcome

+ +
+ +
+
+
+
Welcome
+

User ID: id ?? '')) ?>

+

Username: username ?? $user->email ?? 'User') ?>

+
+
+
\ No newline at end of file diff --git a/app/Views/billing/opd_advice_workspace.php b/app/Views/billing/opd_advice_workspace.php new file mode 100644 index 0000000..6a139ea --- /dev/null +++ b/app/Views/billing/opd_advice_workspace.php @@ -0,0 +1,276 @@ +
+
+
+
+
+ Advice Master +
+ + +
+
+
+
+ + + + + + + + + + + +
IDAdvice (English)Advice (Local)EditRemove
No advice found
+
+
+
+
+ +
+
+
Add / Edit Advice
+
+ + + +
+ + +
+
+
+ +
+ + +
+
+ +
+ +
+ + +
+ +
Ready.
+
+
+
+
+
+ + diff --git a/app/Views/billing/opd_app_insurance_V.php b/app/Views/billing/opd_app_insurance_V.php new file mode 100644 index 0000000..efca647 --- /dev/null +++ b/app/Views/billing/opd_app_insurance_V.php @@ -0,0 +1,150 @@ +
+
+
+
+
+
OPD Registration
+
+ Name : p_fname ?? '') ?> + / Age : age ?? '') ?> + / Gender : xgender ?? '') ?> + / P Code : + + p_code ?? '') ?> + +
+ + +
No insurance found for this patient.
+ + +
+ + + + +
+
+ + +
+
+ +
+
+ +
+ + + +
+ +
+
+ +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+ + diff --git a/app/Views/billing/opd_appointment_V.php b/app/Views/billing/opd_appointment_V.php new file mode 100644 index 0000000..b3a6fcc --- /dev/null +++ b/app/Views/billing/opd_appointment_V.php @@ -0,0 +1,147 @@ +
+
+
+
+
+
OPD Registration
+
+ Name : p_fname ?? '') ?> + / Age : age ?? '') ?> + / Gender : xgender ?? '') ?> + / P Code : + + p_code ?? '') ?> + +
+ +
+ + + + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+ + + +
+ +
+
+ +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+ + diff --git a/app/Views/billing/opd_appointment_dashboard.php b/app/Views/billing/opd_appointment_dashboard.php new file mode 100644 index 0000000..eba8722 --- /dev/null +++ b/app/Views/billing/opd_appointment_dashboard.php @@ -0,0 +1,60 @@ +
+

OPD Appointments

+
+ +
+
+
+
+ + + +
+
+
+ +
+ + + color_code ?? 0) % 6)] ?? 'bg-primary'; + $total = (int) ($row->No_opd ?? 0); + $textClass = in_array($colorClass, ['bg-warning', 'bg-info', 'bg-light'], true) ? 'text-dark' : 'text-white'; + ?> +
+
+
+

Dr. p_fname ?? '') ?>

+ Spec ?? '') ?> +
+
+ + + + + +
Bookedcount_booking ?? 0)) ?>
Waitingcount_wait ?? 0)) ?>
Visitedcount_visit ?? 0)) ?>
Total
+
+ +
+
+ + +
No OPD appointment records found for selected date.
+ +
+
+ + diff --git a/app/Views/billing/opd_appointment_list.php b/app/Views/billing/opd_appointment_list.php new file mode 100644 index 0000000..7840742 --- /dev/null +++ b/app/Views/billing/opd_appointment_list.php @@ -0,0 +1,311 @@ + +
+
+

Dr. p_fname ?? '') ?> Spec ?? '') ?>

+ Back to OPD +
+
+ +
+
+
Booked : count_booking ?? 0)) ?>
+
Waiting : count_wait ?? 0)) ?>
+
Visited : count_visit ?? 0)) ?>
+
Cancelled : count_cancel ?? 0)) ?>
+
Total : No_opd ?? 0)) ?>
+
+ + + +
+
+ $opd_list_0, 'showQueue' => false, 'tabType' => 'booking', 'opd_date' => $opd_date, 'doc_id' => $doc_id]) ?> +
+
+
+
+ + +
+
+ $opd_list_1, 'showQueue' => true, 'tabType' => 'waiting', 'opd_date' => $opd_date, 'doc_id' => $doc_id]) ?> +
All waiting patients already have vitals.
+
+
+ $opd_list_2, 'showQueue' => true, 'tabType' => 'visited', 'opd_date' => $opd_date, 'doc_id' => $doc_id]) ?> +
+
+ $opd_list_3, 'showQueue' => true, 'tabType' => 'cancelled', 'opd_date' => $opd_date, 'doc_id' => $doc_id]) ?> +
+
+
+ + + + + + diff --git a/app/Views/billing/opd_appointment_list_table.php b/app/Views/billing/opd_appointment_list_table.php new file mode 100644 index 0000000..b3fbac1 --- /dev/null +++ b/app/Views/billing/opd_appointment_list_table.php @@ -0,0 +1,85 @@ +user() : null; +if ($authUser) { + if (method_exists($authUser, 'can') && $authUser->can('opd.doctor-panel.access')) { + $canOpenPrescription = true; + } +} +?> +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD No.Current PatientQ No.UHIDOPD TypeAction
opd_code ?? '') ?>P_name ?? '') . ' { ' . ($row->p_rname ?? '') . ' }') ?>queue_no ?? 0)) ?>p_code ?? '') ?>opd_type ?? '') ?> / Amt: opd_fee_amount ?? '') ?> + has_vitals) && (int) $row->has_vitals === 1; ?> + + + Consult + + + + + + + Profile + + + + + + +
No records.
+
+ + + + diff --git a/app/Views/billing/opd_invoice_V.php b/app/Views/billing/opd_invoice_V.php new file mode 100644 index 0000000..42e0703 --- /dev/null +++ b/app/Views/billing/opd_invoice_V.php @@ -0,0 +1,455 @@ +user(); +if ($user && method_exists($user, 'inGroup')) { + $canEdit = $user->inGroup('OPDEdit'); +} +?> +
+

OPD Invoice

+ +
+ +
+
+ +
+
+ To +
+ P_name ?? '')) ?>
+ p_relative ?? '') ?> : p_rname ?? '') ?>
+ OPD Book Date (y-m-d time) : opd_book_date ?? '') ?>
+ Gender : xgender ?? '') ?>
+ Age : age ?? '') ?>
+ Phone No : mphone1 ?? '') ?> +
+
+
+ OPD ID: opd_code ?? '') ?>
+ Date of Appointment: str_apointment_date ?? '') ?>
+ Patient ID : p_code ?? '') ?>
+ insurance_id ?? 0) > 1 && !empty($insurance)) : ?> + Ins. Comp. : ins_company_name ?? '') ?>
+ + + payment_id)) : ?> + Payment No. : payment_id ?? '') ?>
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + payment_status ?? 0) == 0) : ?> + + + + + + + + opd_discount)) : ?> + + + + + + + + + + + + + + + +
DateDoctorDepartmentOPD Fee
apointment_date ?? '')) ?>Dr. doc_name ?? '') ?>doc_spec ?? '') ?>opd_fee_gross_amount ?? '') ?>opd_fee_desc ?? '') ?>
Any Deduction + + + +
Deductionopd_disc_remark ?? '') ?>opd_discount ?? '') ?>
#Net Amountopd_fee_amount ?? '') ?>
+
+
+ + payment_status ?? 0) == 0 && ($refund_status ?? 0) == 0) : ?> +
+
+
+
+
+ +
+ 0) : ?> +
+

+ +

+
+
+ +
+
+
+
+

+ +

+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+

+ +

+
+
+ +
+
+
+ + + insurance_id ?? 0) > 0) : ?> +
+

+ +

+
+
+ +
+
+
+ + + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+ +
+ + Payment Refund Status : Pending + opd_status ?? 0) == 3) : ?> +

Status is Cancelled

+ + Payment Method by : payment_mode_desc ?? '') ?> + +
+
+ + + opd_status ?? 0) === 1 || (int) ($opd_master[0]->opd_status ?? 0) === 2)) : ?> +
+
+ opd_status ?? 0) === 1) : ?> +
+ +
+
+ +
+ +
+ 0) : ?> + + + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ payment_mode ?? 0) === 4)) : ?> + + +
+
+ +
+
+ +
+ + + diff --git a/app/Views/billing/opd_invoice_pdf_v.php b/app/Views/billing/opd_invoice_pdf_v.php new file mode 100644 index 0000000..10412b1 --- /dev/null +++ b/app/Views/billing/opd_invoice_pdf_v.php @@ -0,0 +1,266 @@ + 42) { + $hospitalNameFontSize = 14; +} elseif ($hospitalNameLen > 36) { + $hospitalNameFontSize = 16; +} elseif ($hospitalNameLen > 30) { + $hospitalNameFontSize = 18; +} + +$invoiceId = (string) ($opd->opd_code ?? ''); +$appointmentDate = (string) ($opd->str_apointment_date ?? ''); +$doctorName = trim((string) ($opd->doc_name ?? '')); +$department = trim((string) ($opd->doc_spec ?? '')); +$description = trim((string) ($opd->opd_fee_desc ?? '')); +$grossAmount = (float) ($opd->opd_fee_gross_amount ?? $opd->opd_fee_amount ?? 0); +$discount = (float) ($opd->opd_discount ?? 0); +$netAmount = (float) ($opd->opd_fee_amount ?? 0); +$paymentMode = trim((string) ($opd->payment_mode_desc ?? $opd->Payment_type_str ?? '')); +$printedOn = date('d-m-Y h:i:s A'); +$invoiceStatus = ((int) ($opd->opd_status ?? 0) === 3) ? 'Cancelled' : (($paymentMode !== '' && strtolower($paymentMode) !== 'pending') ? 'Paid' : 'Pending'); +$currencyPrefix = 'Rs.'; + +$logoPathCandidates = []; +if ($hospitalLogoName !== '') { + $logoPathCandidates[] = FCPATH . 'assets/images/' . $hospitalLogoName; + $logoPathCandidates[] = FCPATH . 'assets/img/' . $hospitalLogoName; +} +$logoPathCandidates[] = FCPATH . 'assets/img/logo.png'; + +$logoSrc = ''; +foreach ($logoPathCandidates as $candidate) { + if (is_file($candidate)) { + $logoSrc = str_replace('\\', '/', $candidate); + break; + } +} + +$qrParts = [ + 'Hospital:' . $hospitalName, + 'HospitalPhone:' . $hospitalPhone, + 'Invoice:' . ($invoiceId !== '' ? $invoiceId : ('OPD-' . (string) ($opd->opd_id ?? ''))), + 'Patient:' . (string) ($patient->p_code ?? ''), + 'Name:' . trim((string) (($patient->title ?? '') . ' ' . ($patient->p_fname ?? ''))), + 'Date:' . $appointmentDate, + 'Net:' . number_format($netAmount, 2, '.', ''), + 'PaymentID:' . (string) ($opd->payment_id ?? ''), + 'Status:' . $invoiceStatus, +]; +$qrContent = implode(' | ', array_filter($qrParts, static fn ($v) => trim((string) $v) !== '')); +$qrPackageAvailable = class_exists('\\Mpdf\\QrCode\\QrCode'); +?> + + + + + OPD Invoice + + + +
+ + + + + + +
+
+ +
+ + +
+ + + +
+ +
+ +
+ +
Scan for invoice info
+
+ +
+
QR unavailable (mpdf/qrcode not installed)
+
+ +
+ + + + + + + +
+
Patient Details
+
Patient ID: p_code ?? '')) ?>
+
Name: title ?? '') . ' ' . ($patient->p_fname ?? '')))) ?>
+
Gender: xgender ?? '')) ?>
+
Age: age ?? '')) ?>
+
Phone: mphone1 ?? '')) ?>
+
+
Visit Details
+
Date:
+
Doctor:
+
Department:
+
Payment No: payment_id ?? '')) ?>
+
Visit Count: no_visit ?? '')) ?>
+
+
Invoice Details
+
Invoice ID:
+
Invoice Date:
+
Printed On:
+
Status:
+
Payment Mode:
+
OPD ID: opd_id ?? '')) ?>
+
+ + + + + + + +
+
Insurance / Organization
+ +
Insurance: ins_company_name ?? '')) ?>
+ + +
Org. Case No: case_id_code ?? '')) ?>
+ +
+
Billing Status
+ opd_status ?? 0) === 3) : ?> +
OPD Cancelled
+
opd_status_remark ?? '')) ?>
+ +
Mode of Payment:
+ +
+ + + + + + + + + + + + + + + + + + + + + 0) : ?> + + + + + + +
DateDoctorDepartmentDescriptionAmount
Discountopd_disc_remark ?? '') ? (' - ' . esc((string) ($opd->opd_disc_remark ?? ''))) : '' ?>-
+ + + + + + +
Amount is collected against OPD consultation and related visit charges. + + + + + + + + + + + + + +
Gross Amount
Discount-
Net Amount
+
+ + +
+ + diff --git a/app/Views/billing/opd_invoice_print_v.php b/app/Views/billing/opd_invoice_print_v.php new file mode 100644 index 0000000..6decc79 --- /dev/null +++ b/app/Views/billing/opd_invoice_print_v.php @@ -0,0 +1,96 @@ + + + + + <?= defined('H_Name') ? H_Name : 'Hospital' ?> | OPD Invoice + + + + +
+

+ + Printed on: +

+
+ +
+
+ OPD Invoice ID: opd_code ?? '') ?>
+ Patient ID: p_code ?? '') ?>
+ insurance_id ?? 0) > 1 && !empty($insurance)) : ?> + Ins. Comp.: ins_company_name ?? '') ?>
+ + insurance_case_id ?? 0) > 0 && !empty($case_master)) : ?> + Org. Case No.: case_id_code ?? '') ?>
+ + payment_id)) : ?> + Payment No.: payment_id ?? '') ?>
+ +
+
+
+
+
+
+ +
+
+ title ?? '') . ' ' . strtoupper($patient_master[0]->p_fname ?? '')) ?>
+ Date: str_apointment_date ?? '') ?>
+ Gender: xgender ?? '') ?>
+ Age: age ?? '') ?>
+ Phone: mphone1 ?? '') ?>
+ Visit Count: no_visit ?? '') ?> +
+
+ +
+ + + + + + + + + + + + + + + + + + + opd_discount) && (float) ($opd_master[0]->opd_discount ?? 0) > 0) : ?> + + + + + + + + + + + + + + +
DateDoctorDepartmentDescriptionOPD Fee
apointment_date ?? '') ?>Dr. doc_name ?? '') ?>doc_spec ?? '') ?>opd_fee_desc ?? '') ?>opd_fee_gross_amount ?? '') ?>
Deductionopd_disc_remark ?? '') ?>-opd_discount ?? '') ?>
Net Amountopd_fee_amount ?? '') ?>
+ + opd_status ?? 0) === 3) : ?> + OPD Cancelled
+ opd_status_remark ?? '') ?> + + Mode of Payment: payment_mode_desc ?? '') ?> + +
+ + diff --git a/app/Views/billing/opd_letter_head.php b/app/Views/billing/opd_letter_head.php new file mode 100644 index 0000000..211c549 --- /dev/null +++ b/app/Views/billing/opd_letter_head.php @@ -0,0 +1,237 @@ + + + + + <?= defined('H_Name') ? constant('H_Name') : 'OPD Letter Head' ?> + + + + +
+
+
+ UHID: p_code ?? '') ?>
+ Name: title ?? '') . ' ' . strtoupper($patient_master[0]->p_fname ?? '')) ?>
+ p_relative ?? '') . ' ' . strtoupper($patient_master[0]->p_rname ?? '')) ?>
+ Sex: xgender ?? '') ?> + / Age: age ?? '') ?> +
+
+ OPD No.: opd_code ?? '') ?> / opd_id ?? '') ?>
+ OPD Fee: opd_fee_amount ?? '') ?> [opd_fee_desc ?? '') ?>]
+ Date: str_apointment_date ?? '') ?>
+ opd_fee_type ?? '') === '3' && !empty($old_opd)) : ?> + Valid Upto: opd_Exp_Date ?? '') ?>
+ + Valid Upto: opd_Exp_Date ?? '') ?>
+ +
+
+ Sr No.: opd_no ?? '') ?>
+ Phone: mphone1 ?? '') ?>
+ Address: add1 ?? '') . ',' . ($patient_master[0]->city ?? '')) ?>
+
+
+ + 'No Pain', + '1' => 'Mild Pain', + '2' => 'Moderate', + '3' => 'Intense', + '4' => 'Worst Pain Possible', + ]; + $painValue = (string) ($rx['pain_value'] ?? ''); + $painText = $painLabels[$painValue] ?? ''; + + $complications = []; + if (!empty($rx['pregnancy'] ?? 0)) { $complications[] = 'Pregnancy'; } + if (!empty($rx['lactation'] ?? 0)) { $complications[] = 'Lactation'; } + if (!empty($rx['liver_insufficiency'] ?? 0)) { $complications[] = 'Liver Insufficiency'; } + if (!empty($rx['renal_insufficiency'] ?? 0)) { $complications[] = 'Renal Insufficiency'; } + if (!empty($rx['pulmonary_insufficiency'] ?? 0)) { $complications[] = 'Pulmonary Insufficiency'; } + if (!empty($rx['corona_suspected'] ?? 0)) { $complications[] = 'Corona Suspected'; } + if (!empty($rx['dengue'] ?? 0)) { $complications[] = 'Dengue'; } + + $addictions = []; + if (!empty($patient_master[0]->is_smoking ?? 0)) { $addictions[] = 'Smoking'; } + if (!empty($patient_master[0]->is_alcohol ?? 0)) { $addictions[] = 'Alcohol'; } + if (!empty($patient_master[0]->is_drug_abuse ?? 0)) { $addictions[] = 'Drug Abuse'; } + + $isFemale = strtoupper((string) ($patient_master[0]->xgender ?? '')) === 'F'; + $womenRelatedProblems = trim((string) ($rx['women_related_problems'] ?? '')); + $womenLmp = trim((string) ($rx['women_lmp'] ?? '')); + $womenLastBaby = trim((string) ($rx['women_last_baby'] ?? '')); + $womenPregnancyRelated = trim((string) ($rx['women_pregnancy_related'] ?? '')); + + $vitals = array_filter([ + trim((string) ($rx['bp'] ?? '')) !== '' ? ('BP: ' . trim((string) ($rx['bp'] ?? '')) . '/' . trim((string) ($rx['diastolic'] ?? ''))) : '', + trim((string) ($rx['pulse'] ?? '')) !== '' ? ('Pulse: ' . trim((string) ($rx['pulse'] ?? '')) . '/min') : '', + trim((string) ($rx['temp'] ?? '')) !== '' ? ('Temp: ' . trim((string) ($rx['temp'] ?? ''))) : '', + trim((string) ($rx['spo2'] ?? '')) !== '' ? ('SpO2: ' . trim((string) ($rx['spo2'] ?? '')) . '%') : '', + trim((string) ($rx['rr_min'] ?? '')) !== '' ? ('RR: ' . trim((string) ($rx['rr_min'] ?? '')) . '/min') : '', + trim((string) ($rx['height'] ?? '')) !== '' ? ('Height: ' . trim((string) ($rx['height'] ?? ''))) : '', + trim((string) ($rx['weight'] ?? '')) !== '' ? ('Weight: ' . trim((string) ($rx['weight'] ?? ''))) : '', + trim((string) ($rx['waist'] ?? '')) !== '' ? ('Waist: ' . trim((string) ($rx['waist'] ?? ''))) : '', + ]); + ?> + + +
+
+
Prescription Summary
+ + +
Complaints:
+ + + +
Diagnosis:
+ + + +
Provisional Diagnosis:
+ + + +
Finding/Examination:
+ + + +
Vitals:
+ + + +
Pain Measurement Scale:
+ + + +
Complication:
+ + + +
Addiction:
+ + + +
Co-Morbidities:
+ + + +
Women Related Problems:
+ + + +
LMP (No. of days before):
+ + + +
Last Baby:
+ + + +
Pregnancy Related:
+ + + +
Investigation:
+ + + +
Prescription Remarks:
+ + + +
Advice:
+ + + +
Next Visit:
+ + + +
Refer To:
+ +
+ + +
Medicines
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
MedicineTypeDoseWhenFrequencyDaysQtyRemark
+ + + +
Investigations
+ + + + + + + + + + + + + + + +
CodeInvestigation Name
+ + + +
Advice List
+ + + + + + + + + + + + + +
Advice
+ + +
+ + diff --git a/app/Views/billing/opd_letter_head_pdf.php b/app/Views/billing/opd_letter_head_pdf.php new file mode 100644 index 0000000..9063c84 --- /dev/null +++ b/app/Views/billing/opd_letter_head_pdf.php @@ -0,0 +1,417 @@ +p_fname ?? '')); +$doctorDegree = trim((string) ($doctor->qualification ?? ($doctor->degree ?? ''))); +$doctorSpec = trim((string) ($doctor->SpecName ?? '')); + +$doctorRegNo = ''; +if ($doctor !== null) { + foreach (['nmc_reg_no', 'mci_reg_no', 'registration_no', 'reg_no', 'doctor_reg_no', 'doc_reg_no', 'council_reg_no'] as $field) { + if (isset($doctor->{$field}) && trim((string) $doctor->{$field}) !== '') { + $doctorRegNo = trim((string) $doctor->{$field}); + break; + } + } + + if ($doctorRegNo === '') { + $shortDescription = trim((string) ($doctor->doc_sign ?? '')); + if ($shortDescription !== '') { + $normalizedShortDescription = preg_replace('/\s+/', ' ', $shortDescription); + if ($normalizedShortDescription !== null) { + if (preg_match('/(?:reg(?:istration)?\s*(?:no|number)?\s*[:\-]?\s*)([A-Z0-9\/-]{4,})/i', $normalizedShortDescription, $matches) === 1 && ! empty($matches[1])) { + $doctorRegNo = trim((string) $matches[1]); + } + } + } + } +} + +$vitals = []; +if (trim((string) ($rx['bp'] ?? '')) !== '') { + $vitals[] = 'BP: ' . trim((string) ($rx['bp'] ?? '')) . (trim((string) ($rx['diastolic'] ?? '')) !== '' ? '/' . trim((string) ($rx['diastolic'] ?? '')) : ''); +} +if (trim((string) ($rx['pulse'] ?? '')) !== '') { + $vitals[] = 'Pulse: ' . trim((string) ($rx['pulse'] ?? '')) . '/min'; +} +if (trim((string) ($rx['temp'] ?? '')) !== '') { + $vitals[] = 'Temp: ' . trim((string) ($rx['temp'] ?? '')); +} +if (trim((string) ($rx['spo2'] ?? '')) !== '') { + $vitals[] = 'SpO2: ' . trim((string) ($rx['spo2'] ?? '')) . '%'; +} + +$visitDate = (string) ($opd->str_apointment_date ?? ''); +$visitDateTime = ''; +if (!empty($opd->apointment_date ?? '')) { + $ts = strtotime((string) $opd->apointment_date); + if ($ts !== false) { + $visitDateTime = date('d-m-Y h:i A', $ts); + } +} +$validUpto = (string) ($opd->opd_Exp_Date ?? ''); +$nextVisit = trim((string) ($rx['next_visit'] ?? '')); +$investigationText = trim((string) ($rx['investigation'] ?? '')); +$printedOn = date('d-m-Y h:i A'); +$layoutMode = strtolower((string) ($print_layout_mode ?? 'full')); +$showPart1 = in_array($layoutMode, ['full', 'header_meta'], true); +$showPart2 = in_array($layoutMode, ['full', 'meta_content', 'header_meta', 'meta_only'], true); +$showPart3 = in_array($layoutMode, ['full', 'meta_content', 'content_only'], true); +$topSpacerMm = in_array($layoutMode, ['content_only', 'meta_content', 'meta_only'], true) ? 22 : 0; +$drugAllergyStatus = trim((string) ($rx['drug_allergy_status'] ?? '')); +$drugAllergyDetails = trim((string) ($rx['drug_allergy_details'] ?? '')); +$adrHistory = trim((string) ($rx['adr_history'] ?? '')); +$currentMedications = trim((string) ($rx['current_medications'] ?? '')); +$painScaleMap = [ + '0' => 'No Pain', + '1' => 'Mild Pain', + '2' => 'Moderate', + '3' => 'Intense', + '4' => 'Worst Pain Possible', +]; +$painValue = trim((string) ($rx['pain_value'] ?? '')); +$painLabel = $painScaleMap[$painValue] ?? ''; + +$toLocalText = static function (string $input): string { + $text = trim($input); + if ($text === '') { + return ''; + } + + $map = [ + 'before food' => 'भोजन से पहले', + 'after food' => 'भोजन के बाद', + 'after breakfast' => 'नाश्ते के बाद', + 'before breakfast' => 'नाश्ते से पहले', + 'after lunch' => 'दोपहर के भोजन के बाद', + 'before lunch' => 'दोपहर के भोजन से पहले', + 'after dinner' => 'रात के भोजन के बाद', + 'before dinner' => 'रात के भोजन से पहले', + 'morning' => 'सुबह', + 'afternoon' => 'दोपहर', + 'evening' => 'शाम', + 'night' => 'रात', + 'once daily' => 'दिन में एक बार', + 'twice daily' => 'दिन में दो बार', + 'thrice daily' => 'दिन में तीन बार', + 'daily' => 'रोज', + 'for' => 'के लिए', + 'days' => 'दिन', + 'day' => 'दिन', + 'tab' => 'टैब', + 'cap' => 'कैप', + 'syp' => 'सिरप', + 'inj' => 'इंजेक्शन', + 'apply' => 'लगाएं', + 'continue' => 'जारी रखें', + 'rest' => 'आराम करें', + 'hydrate' => 'पर्याप्त पानी लें', + 'avoid oily food' => 'तैलीय भोजन से बचें', + 'follow up' => 'फॉलो-अप करें', + 'review' => 'पुनः जांच', + ]; + + $translated = $text; + uksort($map, static function ($a, $b) { + return strlen((string) $b) <=> strlen((string) $a); + }); + foreach ($map as $en => $local) { + $translated = preg_replace('/\\b' . preg_quote($en, '/') . '\\b/i', $local, $translated) ?? $translated; + } + + return $translated; +}; +?> + + + + + OPD Consult Note + + + +
+ + + + + + +
+
+ +
+ + +
Phone:
+ +
+ +
Dr.
+ + +
+ + +
+ +
+ Reg. No.: + + + + ADD_DOCTOR_REG_NO + +
+
+ + + + + + + + + +
+
Name : title ?? '') . ' ' . ($patient->p_fname ?? '')))) ?>
+
p_relative ?? '') . ' ' . ($patient->p_rname ?? '')))) ?>
+
Gender/Age : age ?? '')) ?> Year / xgender ?? '')) ?>
+
Mob : mphone1 ?? '')) ?>
+
Address : add1 ?? '') . ' ' . ($patient->city ?? '')))) ?>
+
+
UHID : p_code ?? '')) ?>
+
Sr No. : opd_no ?? '')) ?>
+
OPD No. : opd_code ?? '')) ?>
+
Date :
+ +
Date & Time :
+ +
Valid Upto :
+
+
DEPARTMENT :
+
+
No. of Visit : 1
+
Last Visit :
+
Book Time :
+
+ + + + +
Complaint :
+ + + +
Vitals :
+ + + +
Pain Measurement Scale :
+ + + +
Finding :
+ + + +
Drug Allergy Status :
+ +
Drug Allergy Details :
+ + +
ADR History :
+ + +
Current Medications :
+ + + + +
Diagnosis :
+ +
Diagnosis :
+ + +
Rx :
+ + + + + + + + + + + + + + $med) : ?> + + + + + + + + + + + +
#Medicine NameDose / FrequencyQtyDayInstruction
+
+ +
Salt/Generic:
+ +
+
+ +
+ +
+
+ +
+ +
+ +
No medicines prescribed.
+ + + + + +
Investigation Advised :
+ + + + + + +
Advice :
+ +
सलाह :
+ + + + +
Advice :
+ +
सलाह :
+ + + + +
Next Visit :
+ + + + +
BP : __________    Pulse Rate : __________    SPO2 : __________    Ht : __________    Wt. : __________    RBS : __________
+ + + +
+ +
Dr.
+ + +
+ + +
+ +
+ Reg. No.: + + + + ADD_DOCTOR_REG_NO + +
+
+ + + +
+ + diff --git a/app/Views/billing/opd_medicince_workspace.php b/app/Views/billing/opd_medicince_workspace.php new file mode 100644 index 0000000..cd47027 --- /dev/null +++ b/app/Views/billing/opd_medicince_workspace.php @@ -0,0 +1,618 @@ +
+
+
+
+
+ List of Medicine +
+ + + + + + + + + + +
+
+
+
Duplicate scan not run yet.
+
+
+
+ + + + + + + + + + + + + + + +
IDFavNameUsedLast UsedGeneric NameCompany NameEditRemove
No medicine found
+
+
+
+ +
+
+
+ Duplicate Medicine Names +
+ + +
+
+
+
+ + + + + + + + + + +
NameCountIDsAction
Click Check Duplicates to scan.
+
+
+
+
+ +
+
+
New Medicine
+
+ + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + +
+ +
+ + + +
+ +
Ready.
+
+
+
+
+
+ + diff --git a/app/Views/billing/opd_parts/content/default.html b/app/Views/billing/opd_parts/content/default.html new file mode 100644 index 0000000..46ff213 --- /dev/null +++ b/app/Views/billing/opd_parts/content/default.html @@ -0,0 +1,13 @@ +
+ {{painscale_img}} + {{vital_content}} + {{Complaint}} + {{diagnosis}} + {{Finding_Examinations}} + {{medical}} + {{investigation}} + {{Prescriber_Remarks}} + {{advice}} + {{next_visit}} + {{refer_to}} +
diff --git a/app/Views/billing/opd_parts/hospital/default.html b/app/Views/billing/opd_parts/hospital/default.html new file mode 100644 index 0000000..8cfd6ca --- /dev/null +++ b/app/Views/billing/opd_parts/hospital/default.html @@ -0,0 +1,23 @@ + + +{{hospital_section}} + + +

Print Time : {{print_time}}

+
+{{patient_section}} +
+{{content_section}} diff --git a/app/Views/billing/opd_parts/layout/default.html b/app/Views/billing/opd_parts/layout/default.html new file mode 100644 index 0000000..8cfd6ca --- /dev/null +++ b/app/Views/billing/opd_parts/layout/default.html @@ -0,0 +1,23 @@ + + +{{hospital_section}} + + +

Print Time : {{print_time}}

+
+{{patient_section}} +
+{{content_section}} diff --git a/app/Views/billing/opd_parts/patient/default.html b/app/Views/billing/opd_parts/patient/default.html new file mode 100644 index 0000000..d1db10f --- /dev/null +++ b/app/Views/billing/opd_parts/patient/default.html @@ -0,0 +1,10 @@ + + + + +
+Patient Name : + + +{{pName}} +
\ No newline at end of file diff --git a/app/Views/billing/opd_parts/patient/edit.html b/app/Views/billing/opd_parts/patient/edit.html new file mode 100644 index 0000000..196a8b7 --- /dev/null +++ b/app/Views/billing/opd_parts/patient/edit.html @@ -0,0 +1,18 @@ + + + + + +
+ {{pName}}
+ {{pRelative}}
+ {{age_sex}}
+ {{p_address}}
+ Phone: {{phoneno}} +
+ UHID: {{uhid_no}}
+ OPD: {{opd_no}}
+ SR: {{opd_sr_no}}
+ Date: {{opd_date}}
+ {{exp_date}} +
diff --git a/app/Views/billing/opd_parts/patient/list.html b/app/Views/billing/opd_parts/patient/list.html new file mode 100644 index 0000000..73e668c --- /dev/null +++ b/app/Views/billing/opd_parts/patient/list.html @@ -0,0 +1,26 @@ + + + + + + +
+ Name : {{pName}}
+ {{pRelative}}
+ Gender/Age : {{age_sex}}
+ Mob : {{phoneno}}
+ Address : {{p_address}} +
+ UHID : {{uhid_no}}
+ Sr No.: {{opd_sr_no}}
+ OPD No.: {{opd_no}}
+ Date: {{opd_date}}
+ {{exp_date}} +
+ Department:
+ {{SpecName}}
+ {{opd_fee_desc}}
+ No. of Visit: {{total_no_visit}}
+ {{last_opdvisit_date}}
+ Book Time : {{str_opd_book_date}} +
diff --git a/app/Views/billing/opd_prescription_basic.php b/app/Views/billing/opd_prescription_basic.php new file mode 100644 index 0000000..2436148 --- /dev/null +++ b/app/Views/billing/opd_prescription_basic.php @@ -0,0 +1,3783 @@ +
+ apointment_date ?? ''); + $opdDateOnly = $opdDateRaw !== '' ? date('Y-m-d', strtotime($opdDateRaw)) : ''; + $opdDateDisplay = $opdDateRaw !== '' ? date('d-m-Y', strtotime($opdDateRaw)) : ''; + $doctorName = trim((string) ($opd_master[0]->doc_name ?? 'Doctor')); + $doctorId = (int) ($opd_master[0]->doc_id ?? $opd_master[0]->doctor_id ?? 0); + + $appointmentBackUrl = $opdDateOnly !== '' + ? base_url('Opd/get_appointment_data') . '/' . $opdDateOnly + : base_url('opd/appointment'); + + $doctorListUrl = ($opdDateOnly !== '' && $doctorId > 0) + ? base_url('Opd/get_appointment_list') . '/' . $doctorId . '/' . $opdDateOnly + : ''; + ?> +
+

Consult

+
+ OPD Appointment + → + + + + + + + + → + +
+
+
+ +
+ + +
+ + + + +
+
+ Not Saved + No local changes +
+
+ + + + + +
+ + +
+ + Back to Invoice +
+
+
+ +
+
+
+
Name: p_fname ?? '') ?>
+
UHID: p_code ?? '') ?>
+
Age: str_age ?? '') ?>
+
Gender: xgender ?? '') ?>
+
+ + +
+
OPD: opd_code ?? '') ?>
+
Date: apointment_date ?? '') ?>
+
Doctor: doc_name ?? '') ?>
+
+
+
Quick Tips
+
+
    +
  • Use Ctrl+S to save quickly.
  • +
  • Draft auto-saves locally every few seconds.
  • +
  • Unsaved changes are warned before leaving.
  • +
+
+
+
+
Patient History Alerts
+
+ + +
+ : +
+
+ + +
No significant prior alerts found.
+ +
+
+
+
Remarks
+
+ + +
+
+ +
+ + +
No remarks available.
+ +
+
+ + + +
+
+ Patient Scan History (All OPDs) + +
+
+
Loading scan history...
+
+
+
+
Old Consult (Fast View)
+
+
+ + +
+ +
+
+
+
+ + PDF + + + scan + + +
+
+
+ + + AI Ready + AI Failed + Alert +
+ +
+ + +
Report details are not available yet.
+ +
+
+
+
+
+ +
+ +
No uploaded scan found for this OPD yet.
+ +
+ + + + + + + +
+
+
+ + + +
+ +
C:
+ + +
D:
+ + +
+ + + + + + + + + + $oldMed) { ?> + + + + + + + +
#Medicine NameAction
+ +
+
+ + +
+ + + Open PDF + + scan + + + +
+ +
+ + +
No old consult record found.
+ + +
No old consult record found.
+ + +
+ + +
+ + +
+
+
+
+
+ +
+
+
+ Single Screen Consult + (Old familiar fields + AI assist) +
+ +
+
+
+
General Examination
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Pain Measurement Scale
+ + pain_value ?? ''); ?> +
+ > + + + > + + + > + + + > + + + > + +
+
+
+
+
Complication
+
+ + + + + + + +
+
+
+
+
+
Addiction(if any)
+
+ + + +
+
+
+
+
+
Drug Allergy / ADR (NABH)
+
Required: Drug Allergy Status is mandatory. If status is Known, Drug Allergy Details are mandatory.
+
+
+ + drug_allergy_status ?? ''))); ?> + + +
+
+ + + +
+
+ + +
+
+ + +
+
+
+
+
+
+
Co-Morbidities
+ +
+ + + +
+ +
Prefilled from patient history.
+ + +
No co-morbidities master data found.
+ +
+
+ xgender ?? '')) === 'female'; ?> + +
+
+
Women Related Problems
+
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ +
+
+
+ +
+ + + +
+ +
+
+
+ + +
0/4000
+
+ +
+ +
AI Assist is optional. Use it only if you want cleaner clinical wording; manual typing works as usual.
+
+ + + + + +
+ +
0/4000
+
+ +
+ +
+ + + + + +
+ +
0/4000
+
+ +
+ +
+ + + + + +
+ +
0/4000
+
+ +
+ +
+ + + + + +
+ +
0/4000
+
+ +
+ +
0/4000
+
+
+ +
+
+ +
+ + + + + +
+ +
0/4000
+
+ +
+
+ +
+ + +
+
+
+
+
Loading predefined advice...
+
+
+
+ +
+
+ + +
+
+ +
+
+
+ + + +
AdviceAction
No advice added
+
+ +
+
+ + +
+
+ + +
+
+ +
+ + + + + + + + + +
+
+ +
+
+ + +
+ +
+
+ + + + + +
+
+ +
+
+ + + +
+
+ + +
+
+
+ + + +
Test NameCodeAction
No investigation added
+
+
+ +
+ +
+
+ + No Rx-Group selected +
+
+ Select group and preview medicines before add. +
+
+
+
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+ + + + Search shows most-used medicines first. +
+ +
+ + + + + + + + + + +
+
+ + + + + + + +
MedicineTypeDoseWhenFreqDaysQtyRemarkAction
No medicine added
+
+
+
+
+ +
+
+
+
+ + + + + + + + +
+ + diff --git a/app/Views/billing/opd_rx_group_workspace.php b/app/Views/billing/opd_rx_group_workspace.php new file mode 100644 index 0000000..8a11c6f --- /dev/null +++ b/app/Views/billing/opd_rx_group_workspace.php @@ -0,0 +1,239 @@ +
+
+
+
+
+ Rx-Group List + +
+
+
+ + + +
Rx-Group NameAccessAction
No data
+
+
+
+
+ +
+
+
Rx-Group
+
+ + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + + +
+ +
Ready.
+
+
+
+
+
+ + diff --git a/app/Views/billing/opd_scan_history_panel.php b/app/Views/billing/opd_scan_history_panel.php new file mode 100644 index 0000000..4ecd1fe --- /dev/null +++ b/app/Views/billing/opd_scan_history_panel.php @@ -0,0 +1,56 @@ + +
No scan history found for this patient.
+ +
+ +
+
+ + +
+ +
+
+ + Open PDF + + + history scan + + + +
+ +
+
+ + + + AI + + AI Ready + + AI Failed + + AI Not Run + +
+ +
+ ⚠ +
+ +
+ +
+ +
+ + +
+
+
+
+ +
+ diff --git a/app/Views/billing/opd_scan_last_list.php b/app/Views/billing/opd_scan_last_list.php new file mode 100644 index 0000000..c30ad96 --- /dev/null +++ b/app/Views/billing/opd_scan_last_list.php @@ -0,0 +1,38 @@ + +
No recent scans.
+ +
+ +
+
+ + Open PDF + + + + + + +
⚠ Alert
+ +
+ + + + AI + + AI Ready + + AI Failed + +
+ +
+ +
+ +
+
+ +
+ diff --git a/app/Views/billing/opd_scan_modal_body.php b/app/Views/billing/opd_scan_modal_body.php new file mode 100644 index 0000000..3bf37a4 --- /dev/null +++ b/app/Views/billing/opd_scan_modal_body.php @@ -0,0 +1,289 @@ +
+
+

Name : p_fname ?? '') ?> + / Age : age ?? '') ?> + / Gender : xgender ?? '') ?> + / P Code : p_code ?? '') ?> + / OPD : opd_code ?? '') ?>

+
+
+
+
+ + + +
+ + +
+
+ + + +
+
+
+
Captured image will appear here.
+
+
+
+
+
Scan to Text
+
+
Loading...
+
+
+
+
AI Diagnosis Support
+
+
AI analysis runs automatically in background after each scan/upload.
+
+
+
+
+ + diff --git a/app/Views/billing/opd_template_builder.php b/app/Views/billing/opd_template_builder.php new file mode 100644 index 0000000..92715b0 --- /dev/null +++ b/app/Views/billing/opd_template_builder.php @@ -0,0 +1,159 @@ +
+
+
+

OPD Print Template Builder

+
+
+
+ Template List + +
+
+
+
+ +
+
+
+
+
+

Edit Template Content

+
+ +
+
+
+ +
+
+ + +
+
+ + + +
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+
+
+
+
+
+

Placeholders

+
+
+ + {{}} + +
+
+
+ Old-style (recommended): save a name (example: opd_print_parcha_chamunda_hospital_ksp), then set that name in doctor master fields:
+ opd_print_format, opd_blank_print, rx_pre_print_letter_head_format, rx_blank_letter_head, rx_plain_paper.

+ Optional composed mode: use compose_default with type-specific parts. +
+
+
+
+ + diff --git a/app/Views/billing/opd_template_builder_list.php b/app/Views/billing/opd_template_builder_list.php new file mode 100644 index 0000000..0837e91 --- /dev/null +++ b/app/Views/billing/opd_template_builder_list.php @@ -0,0 +1,87 @@ +
+
+
+

OPD Print Template Builder

+
+
+ +
+ + Edit Template +
+
+
+ +
+ +
+
+
+

Templates

+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + $nm) : ?> + + + + + + + + +
#Template NameAction
No templates found. Click "Add New Template".
+ Edit +
+
+
+
+
+ + diff --git a/app/Views/billing/opd_template_workspace.php b/app/Views/billing/opd_template_workspace.php new file mode 100644 index 0000000..b1c2a46 --- /dev/null +++ b/app/Views/billing/opd_template_workspace.php @@ -0,0 +1,464 @@ +
+
+
+
+
+ Clinical Templates Workspace + Add, edit and monitor newly added templates +
+
+ + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + + + +
+ +
+
+
+ + +
+
+ + +
+ +
+ +
+
+
+ +
+
+ Usage Analytics (Doctor-wise) + No usage data yet. +
+
+
+
+ + + + + + + + + + + +
TemplateSectionScopeUsesLast Used
No usage data yet.
+
+
+
+
+ + + + + + + + + +
SectionTemplatesUses
No section data.
+
+
+
+
+ +
Use this workspace to maintain templates.
+ +
+ + + + + + + + + + + + + + + +
IDScopeSectionNameTextUpdatedAction
No template data yet.
+
+
+
+
+
+
+ + diff --git a/app/Views/billing/opd_templates/opd_info_print_letter_head.html b/app/Views/billing/opd_templates/opd_info_print_letter_head.html new file mode 100644 index 0000000..97bcfb2 --- /dev/null +++ b/app/Views/billing/opd_templates/opd_info_print_letter_head.html @@ -0,0 +1 @@ +

Hello World

\ No newline at end of file diff --git a/app/Views/billing/opd_templates/opd_info_print_letter_head_1.html b/app/Views/billing/opd_templates/opd_info_print_letter_head_1.html new file mode 100644 index 0000000..97bcfb2 --- /dev/null +++ b/app/Views/billing/opd_templates/opd_info_print_letter_head_1.html @@ -0,0 +1 @@ +

Hello World

\ No newline at end of file diff --git a/app/Views/billing/opd_templates/opd_print_info_letter_head.html b/app/Views/billing/opd_templates/opd_print_info_letter_head.html new file mode 100644 index 0000000..d87d360 --- /dev/null +++ b/app/Views/billing/opd_templates/opd_print_info_letter_head.html @@ -0,0 +1 @@ +

Test

\ No newline at end of file diff --git a/app/Views/billing/opd_templates/opd_print_parcha_chamunda_hospital_ksp.php b/app/Views/billing/opd_templates/opd_print_parcha_chamunda_hospital_ksp.php new file mode 100644 index 0000000..7184541 --- /dev/null +++ b/app/Views/billing/opd_templates/opd_print_parcha_chamunda_hospital_ksp.php @@ -0,0 +1,74 @@ +title ?? '') . ' ' . ($patient->p_fname ?? '')))); +$pRelative = trim((string) (($patient->p_relative ?? '') . ' ' . ($patient->p_rname ?? ''))); +$ageSex = trim((string) (($patient->xgender ?? '') . ' / ' . ($patient->age ?? ''))); +$phone = (string) ($patient->mphone1 ?? ''); +$pAddress = trim((string) (($patient->add1 ?? '') . ', ' . ($patient->add2 ?? '') . ', ' . ($patient->city ?? '')), ' ,'); + +$uhidNo = (string) ($patient->p_code ?? ''); +$opdSrNo = (string) ($opd->opd_no ?? ''); +$opdNo = (string) ($opd->opd_code ?? ''); +$opdDate = (string) ($opd->str_apointment_date ?? ''); +$expDate = (string) ($opd->opd_Exp_Date ?? ''); + +$specName = trim((string) ($doctor->SpecName ?? $opd->doc_spec ?? '')); +$opdFeeDesc = trim((string) ($opd->opd_fee_desc ?? '')); +$totalNoVisit = (string) ($opd->no_visit ?? ''); +$lastVisitDate = trim((string) (($old_opd[0]->str_apointment_date ?? '') ?: '')); +$bookTime = (string) ($opd->apointment_date ?? ''); + +$lastVisitLine = $lastVisitDate !== '' ? ('
Last Visit : ' . esc($lastVisitDate)) : ''; +$expDateLine = $expDate !== '' ? ('Valid Upto : ' . esc($expDate)) : ''; +?> + + + +

+
+ + +

Print Time :

+
+ + + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :
+ Address : +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+ +
+ DEPARTMENT :
+
+
+ No. of Visit : +
+ Book Time : +
diff --git a/app/Views/billing/opd_templates/rx_print_chamunda_plain_paper.html b/app/Views/billing/opd_templates/rx_print_chamunda_plain_paper.html new file mode 100644 index 0000000..170ced1 --- /dev/null +++ b/app/Views/billing/opd_templates/rx_print_chamunda_plain_paper.html @@ -0,0 +1 @@ +

Test again

\ No newline at end of file diff --git a/app/Views/billing/rx_group_medicine_workspace.php b/app/Views/billing/rx_group_medicine_workspace.php new file mode 100644 index 0000000..a22a64f --- /dev/null +++ b/app/Views/billing/rx_group_medicine_workspace.php @@ -0,0 +1,426 @@ +
+
+
+
+
+ Rx-Group Medicine List + +
+
+
+ + + + + + + + + + + +
MedicineSalt/GenericDose PlanEditRemove
No medicine rows found.
+
+
+
+
+ +
+
+
Add / Edit Rx-Group Medicine
+
+ + + + + +
+ + + +
+ +
+ + +
+ +
+ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+ + +
+ +
+ + +
+ +
Ready.
+
+
+
+
+
+ + diff --git a/app/Views/billing/search_adv_data.php b/app/Views/billing/search_adv_data.php new file mode 100644 index 0000000..0cf03d2 --- /dev/null +++ b/app/Views/billing/search_adv_data.php @@ -0,0 +1,11 @@ + + + +
No matching records.
+ diff --git a/app/Views/dashboard/index.php b/app/Views/dashboard/index.php new file mode 100644 index 0000000..8d536e5 --- /dev/null +++ b/app/Views/dashboard/index.php @@ -0,0 +1,315 @@ + + +
+

Dashboard

+ +
+ +
+
+
+
+
+
OPD | Today
+
+
+ +
+
+
+ Last 7 days: +
+
+
+
+
+ +
+
+
+
Admit & Discharge | Today
+
+
+ +
+
+
/
+ Admit / Discharge +
+
+
+
+
+ +
+
+
+
Current IPD | In-house
+
+
+ +
+
+
+ Org cases: +
+
+
+
+
+ +
+
+
+
Daily Trend | Current Month
+
+
+ +
+
+
/
+ OPD / IPD total (this month) +
+
+
+
+
+
+ +
+
+
+
+
Daily Case Trend (Current Month)
+
+ +
+
+
+
+
+ +
+
+
+
+
OPD by Organization
+
+ + + + + + + + + + + + + + + + + + + + + +
OrganizationCases
org_name ?? 'Direct') ?>total_cases) ?>
No data
+
+
+
+ +
+
+
OPD by Doctor
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
DoctorTotalDirectOrg
doc_name) ?>total_cases) ?>direct_cases) ?>org_cases) ?>
No data
+
+
+
+
+ +
+
+
+
IPD Doctors
+
+ + + + + + + + + + + + + + + + + + + + + +
DoctorCases
doc_name) ?>total_cases) ?>
No data
+
+
+
+
+ +
+
+
+
IPD by Organization
+
+ + + + + + + + + + + + + + + + + + + + + +
OrganizationCases
org_name ?? 'Direct') ?>total_cases) ?>
No data
+
+
+
+
+
+
+ + + diff --git a/app/Views/diagnosis/index.php b/app/Views/diagnosis/index.php new file mode 100644 index 0000000..c37eedb --- /dev/null +++ b/app/Views/diagnosis/index.php @@ -0,0 +1,97 @@ +
+

Diagnosis

+ +
+ +
+ +
diff --git a/app/Views/diagnosis/lab_ai_extracted_values.php b/app/Views/diagnosis/lab_ai_extracted_values.php new file mode 100644 index 0000000..353b76d --- /dev/null +++ b/app/Views/diagnosis/lab_ai_extracted_values.php @@ -0,0 +1,58 @@ + + +
+
+ AI Extracted Lab Values + + + + + +
+
+ +
No AI extraction found yet for this invoice.
+ +
+ Batch # | + Panel: | + Model: | + Created: +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
TestValueUnitReferenceFlag
No extracted values found in latest batch.
+
+ +
+
diff --git a/app/Views/diagnosis/lab_date_show.php b/app/Views/diagnosis/lab_date_show.php new file mode 100644 index 0000000..9b5c289 --- /dev/null +++ b/app/Views/diagnosis/lab_date_show.php @@ -0,0 +1,40 @@ + 0) { + $collectedTime = $lab_invoice_request[0]->collected_time ?? ''; + $reportedTime = $lab_invoice_request[0]->reported_time ?? ''; +} +?> + +
+ + + +
+ + +
+ +
+ + +
+ +
+ +
+
diff --git a/app/Views/diagnosis/lab_final_report_show.php b/app/Views/diagnosis/lab_final_report_show.php new file mode 100644 index 0000000..779e022 --- /dev/null +++ b/app/Views/diagnosis/lab_final_report_show.php @@ -0,0 +1,20 @@ + + + +
Report not found.
+ + + + +
+ + +
+ +
+ + +
+ diff --git a/app/Views/diagnosis/lab_final_report_show_xray.php b/app/Views/diagnosis/lab_final_report_show_xray.php new file mode 100644 index 0000000..975845c --- /dev/null +++ b/app/Views/diagnosis/lab_final_report_show_xray.php @@ -0,0 +1,85 @@ + + + +
Report not found.
+ + + + + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ +
+ + + +
+ + + + +
+
+
+ + + diff --git a/app/Views/diagnosis/lab_invoice_main_test_list.php b/app/Views/diagnosis/lab_invoice_main_test_list.php new file mode 100644 index 0000000..171eee9 --- /dev/null +++ b/app/Views/diagnosis/lab_invoice_main_test_list.php @@ -0,0 +1,145 @@ + 0) { + $labInvoiceData = $lab_invoice_request[0]; + $labReqId = $labInvoiceData->id ?? ''; + $labTestNo = $labInvoiceData->lab_test_no ?? ''; +} +?> + +
+
+
+ + 0): ?> +
+
+
Sr. No.
+
daily_sr_no ?? ''); ?>
+
+
+
+ + + +
+
+
+ + + 0): ?> + + status ?? 0); ?> +
+
+
+
item_name ?? ''); ?>
+ + check_sample) || $test->check_sample < 1): ?> + Sample Collection Pending + + + + + In Progress + + Completed + + +
+ + check_sample) || $test->check_sample < 1): ?> + + +
+
+ print_combine) && $test->print_combine > 0) ? 'checked' : ''; ?>> + +
+
+ +
+ + + + + + + + + + + + +
+ + + + +
+ +
+ + + + + diff --git a/app/Views/diagnosis/lab_report_file_list.php b/app/Views/diagnosis/lab_report_file_list.php new file mode 100644 index 0000000..eb233e1 --- /dev/null +++ b/app/Views/diagnosis/lab_report_file_list.php @@ -0,0 +1,148 @@ +
+

Created Report History

+ +
+
+ Image-assisted AI (Doctor verify first): Use "AI Extract Values" on report image/scan to capture LFT/KFT values into DB for doctor support only. +
+ +
+ + + + id ?? 0); + $fullPath = (string) ($row->full_path ?? ''); + $filePath = str_replace('hms_uploads', 'uploads', $fullPath); + $fileDesc = (string) ($row->file_desc ?? 'File'); + $fileName = (string) ($row->file_name ?? 'View'); + $insertTime = (string) ($row->insert_time ?? ''); + ?> +

+ + [] + / Created : + +

+ + +

No report files found.

+ + +
+
+ + diff --git a/app/Views/diagnosis/lab_report_tab.php b/app/Views/diagnosis/lab_report_tab.php new file mode 100644 index 0000000..cf2e064 --- /dev/null +++ b/app/Views/diagnosis/lab_report_tab.php @@ -0,0 +1,110 @@ +
+
+
Diagnosis Report List
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No.Day Sr.No.Lab Test No.Person NameDateTests NameAction
invoice_code ?? '-') ?>daily_sr_no ?? '-') ?>lab_test_no ?? '-') ?>inv_name ?? '-') ?> | age ?? '-') ?>inv_date ?? '-') ?> + data_array)) { + $dataArray = explode('#', $row->data_array); + $hasBadge = false; + foreach ($dataArray as $value) { + if (!empty($value)) { + $valueArray = explode(';', $value); + if (count($valueArray) >= 4) { + $testName = $valueArray[0] ?? ''; + $isRequested = isset($valueArray[3]) ? $valueArray[3] : 0; + + if ($isRequested < 1) { + echo '' . esc($testName) . ' '; + } else { + echo '' . esc($testName) . ' '; + } + $hasBadge = true; + } + } + } + if (!$hasBadge) { + echo '-'; + } + } else { + echo '-'; + } + ?> + + +
Invoice No.Day Sr.No.Lab Test No.Person NameDateTests NameAction
+
+ +
+
+ + + + + diff --git a/app/Views/diagnosis/lab_report_tab_path.php b/app/Views/diagnosis/lab_report_tab_path.php new file mode 100644 index 0000000..d73bca0 --- /dev/null +++ b/app/Views/diagnosis/lab_report_tab_path.php @@ -0,0 +1,116 @@ +
+
+
Pathology Report List
+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No.Day Sr.No.Lab Test No.Person NameDateTests NameAction
invoice_code ?? '-') ?>daily_sr_no ?? '-') ?>lab_test_no ?? '-') ?>inv_name ?? '-') ?> | age ?? '-') ?>inv_date ?? '-') ?> + data_array)) { + $dataArray = explode('#', $row->data_array); + $hasBadge = false; + foreach ($dataArray as $value) { + if (!empty($value)) { + $valueArray = explode(';', $value); + if (count($valueArray) >= 4) { + $testName = $valueArray[0] ?? ''; + $isRequested = isset($valueArray[3]) ? $valueArray[3] : 0; + + if ($isRequested < 1) { + echo '' . esc($testName) . ' '; + } else { + if (isset($valueArray[4]) && $valueArray[4] > 0) { + echo '' . esc($testName) . ' '; + } else { + echo '' . esc($testName) . ' '; + } + } + $hasBadge = true; + } + } + } + if (!$hasBadge) { + echo '-'; + } + } else { + echo '-'; + } + ?> + + +
Invoice No.Day Sr.No.Lab Test No.Person NameDateTests NameAction
+
+ +
+
+ + + + + diff --git a/app/Views/diagnosis/pathology_detail.php b/app/Views/diagnosis/pathology_detail.php new file mode 100644 index 0000000..5b9b863 --- /dev/null +++ b/app/Views/diagnosis/pathology_detail.php @@ -0,0 +1,1008 @@ + + +
+

- Invoice Details

+ +
+ +
+
+ +
+
+
+
Person Profile
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Patient Name:p_fname . ' ' . ($invoice->p_rname ?? '')); ?>
Patient Code:p_code ?? 'N/A'); ?>
Gender:gender ?? 'N/A'); ?>
Age: + age_in_month) && intval($invoice->age_in_month) > 0) { + echo htmlspecialchars($invoice->age_in_month . ' months'); + } elseif (!empty($invoice->age)) { + echo htmlspecialchars($invoice->age . ' years'); + } else { + echo 'N/A'; + } + ?> +
Aadhar:udai ?? 'N/A'); ?>
Phone:phone_number ?? 'N/A'); ?>
Email:email ?? 'N/A'); ?>
Address: + address_line1)) $address[] = $invoice->address_line1; + if (!empty($invoice->city)) $address[] = $invoice->city; + if (!empty($invoice->state)) $address[] = $invoice->state; + echo htmlspecialchars(implode(', ', $address) ?: 'N/A'); + ?> +
Invoice Date:inv_date ?? ''))); ?>
+ + + +
+
+
+ + +
+ +
+
+
+
+
+
+ + + +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + +
+
+
+
+
+
+
+ Loading... +
+
+
+
+
+
+ + + +
+
+
+
+
Report Operations
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+ + + + + + + + diff --git a/app/Views/diagnosis/print_compiled_report.php b/app/Views/diagnosis/print_compiled_report.php new file mode 100644 index 0000000..28360ea --- /dev/null +++ b/app/Views/diagnosis/print_compiled_report.php @@ -0,0 +1,65 @@ + + + + + + <?= esc($invoice->invoice_code ?? 'Report') ?> + + + + + +
+ +
+ +
+ +
+
+
+
+
+
+
Letterhead
+
+ + +
+
Invoice ID: invoice_code ?? '') ?>
+
Patient Name: p_fname ?? '') ?>
+
UHID: p_code ?? '') ?>
+
Report Type:
+
+ +
+ + report_header)): ?> +
report_header ?>
+ + +
report_data ?? '' ?>
+
+ + diff --git a/app/Views/diagnosis/print_single_report.php b/app/Views/diagnosis/print_single_report.php new file mode 100644 index 0000000..32284d8 --- /dev/null +++ b/app/Views/diagnosis/print_single_report.php @@ -0,0 +1,37 @@ + + + + + + Print Single Report + + + +
+ +
+ +
+
Patient: patient_name ?? '') ?>
+
Invoice: invoice_code ?? '') ?>
+
+ +
+ Report_Data)): ?> + Report_Data ?> + +

No report data available for this request.

+ +
+ + diff --git a/app/Views/diagnosis/request_list.php b/app/Views/diagnosis/request_list.php new file mode 100644 index 0000000..07c6d81 --- /dev/null +++ b/app/Views/diagnosis/request_list.php @@ -0,0 +1,206 @@ + + +
+

+ +
+ +
+
+
+
Search
+ +
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+ + diff --git a/app/Views/diagnosis/test_data_entry_form.php b/app/Views/diagnosis/test_data_entry_form.php new file mode 100644 index 0000000..9c2e22f --- /dev/null +++ b/app/Views/diagnosis/test_data_entry_form.php @@ -0,0 +1,51 @@ +item_name ?? ''; +$patientName = $test->p_fname ?? ''; +$patientCode = $test->p_code ?? ''; +$invoiceCode = $test->invoice_code ?? ''; +$status = $test->status ?? 0; +?> + +
+
+
Test Data Entry -
+
+
+ +
+
+

Patient:

+

+
+
+

Invoice:

+

+
+
+ + +
+ + + Enter the laboratory findings and observations for this test. +
+ + +
+ + +
+ + +
+ + +
+
+
diff --git a/app/Views/diagnosis/test_data_entry_table.php b/app/Views/diagnosis/test_data_entry_table.php new file mode 100644 index 0000000..a8b6eb6 --- /dev/null +++ b/app/Views/diagnosis/test_data_entry_table.php @@ -0,0 +1,75 @@ + + + +
No test request data found.
+ + + + +
+
Patient Name :patient_name ?? '') ?> + / invoice_code ?? '') ?> +
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
Test Name/Test IDSaved ValueNew ValueFixedNormals
+ Test ?? '') ?>[TestID ?? '') ?>] + Formula)): ?> +
Formula) ?> + +
lab_test_value ?? '') ?>
+ option_value)): ?> + option_value); ?> +
+ + +
+ Formula)): ?> + After Calculate + + + +
FixedNormals ?? '') ?>
+ +
No test parameters mapped for this report template.
+ +
+ +
+ +
+ + diff --git a/app/Views/errors/cli/error_404.php b/app/Views/errors/cli/error_404.php new file mode 100644 index 0000000..456ea3e --- /dev/null +++ b/app/Views/errors/cli/error_404.php @@ -0,0 +1,7 @@ +getFile()) . ':' . $exception->getLine(), 'green')); +CLI::newLine(); + +$last = $exception; + +while ($prevException = $last->getPrevious()) { + $last = $prevException; + + CLI::write(' Caused by:'); + CLI::write(' [' . $prevException::class . ']', 'red'); + CLI::write(' ' . $prevException->getMessage()); + CLI::write(' at ' . CLI::color(clean_path($prevException->getFile()) . ':' . $prevException->getLine(), 'green')); + CLI::newLine(); +} + +// The backtrace +if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) { + $backtraces = $last->getTrace(); + + if ($backtraces) { + CLI::write('Backtrace:', 'green'); + } + + foreach ($backtraces as $i => $error) { + $padFile = ' '; // 4 spaces + $padClass = ' '; // 7 spaces + $c = str_pad($i + 1, 3, ' ', STR_PAD_LEFT); + + if (isset($error['file'])) { + $filepath = clean_path($error['file']) . ':' . $error['line']; + + CLI::write($c . $padFile . CLI::color($filepath, 'yellow')); + } else { + CLI::write($c . $padFile . CLI::color('[internal function]', 'yellow')); + } + + $function = ''; + + if (isset($error['class'])) { + $type = ($error['type'] === '->') ? '()' . $error['type'] : $error['type']; + $function .= $padClass . $error['class'] . $type . $error['function']; + } elseif (! isset($error['class']) && isset($error['function'])) { + $function .= $padClass . $error['function']; + } + + $args = implode(', ', array_map(static fn ($value): string => match (true) { + is_object($value) => 'Object(' . $value::class . ')', + is_array($value) => $value !== [] ? '[...]' : '[]', + $value === null => 'null', // return the lowercased version + default => var_export($value, true), + }, array_values($error['args'] ?? []))); + + $function .= '(' . $args . ')'; + + CLI::write($function); + CLI::newLine(); + } +} diff --git a/app/Views/errors/cli/production.php b/app/Views/errors/cli/production.php new file mode 100644 index 0000000..7db744e --- /dev/null +++ b/app/Views/errors/cli/production.php @@ -0,0 +1,5 @@ + + + + + <?= lang('Errors.badRequest') ?> + + + + +
+

400

+ +

+ + + + + +

+
+ + diff --git a/app/Views/errors/html/error_404.php b/app/Views/errors/html/error_404.php new file mode 100644 index 0000000..e506f08 --- /dev/null +++ b/app/Views/errors/html/error_404.php @@ -0,0 +1,84 @@ + + + + + <?= lang('Errors.pageNotFound') ?> + + + + +
+

404

+ +

+ + + + + +

+
+ + diff --git a/app/Views/errors/html/error_exception.php b/app/Views/errors/html/error_exception.php new file mode 100644 index 0000000..2c4e009 --- /dev/null +++ b/app/Views/errors/html/error_exception.php @@ -0,0 +1,429 @@ + + + + + + + + <?= esc($title) ?> + + + + + + + +
+
+ Displayed at — + PHP: — + CodeIgniter: -- + Environment: +
+
+

getCode() ? ' #' . $exception->getCode() : '') ?>

+

+ getMessage())) ?> + getMessage())) ?>" + rel="noreferrer" target="_blank">search → +

+
+
+ + +
+

at line

+ + +
+ +
+ +
+ +
+ getPrevious()) { + $last = $prevException; + ?> + +
+    Caused by:
+    getCode() ? ' #' . $prevException->getCode() : '') ?>
+
+    getMessage())) ?>
+    getMessage())) ?>"
+       rel="noreferrer" target="_blank">search →
+    getFile()) . ':' . $prevException->getLine()) ?>
+    
+ + +
+ + +
+ + + +
+ + +
+ +
    + $row) : ?> + +
  1. +

    + + + + + {PHP internal code} + + + + +   —   + + + ( arguments ) +

    + + + getParameters(); + } + + foreach ($row['args'] as $key => $value) : ?> + + + + + + +
    name : "#{$key}") ?>
    +
    + + () + + + + +   —   () + +

    + + + +
    + +
    + +
  2. + + +
+ +
+ + +
+ + + +

$

+ + + + + + + + + + $value) : ?> + + + + + + +
KeyValue
+ + + +
+ +
+ + + + + + +

Constants

+ + + + + + + + + + $value) : ?> + + + + + + +
KeyValue
+ + + +
+ +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathgetUri()) ?>
HTTP MethodgetMethod()) ?>
IP AddressgetIPAddress()) ?>
Is AJAX Request?isAJAX() ? 'yes' : 'no' ?>
Is CLI Request?isCLI() ? 'yes' : 'no' ?>
Is Secure Request?isSecure() ? 'yes' : 'no' ?>
User AgentgetUserAgent()->getAgentString()) ?>
+ + + + + + + + +

$

+ + + + + + + + + + $value) : ?> + + + + + + +
KeyValue
+ + + +
+ +
+ + + + + +
+ No $_GET, $_POST, or $_COOKIE Information to show. +
+ + + + headers(); ?> + + +

Headers

+ + + + + + + + + + $value) : ?> + + + + + + +
HeaderValue
+ getValueLine(), 'html'); + } else { + foreach ($value as $i => $header) { + echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html'); + } + } + ?> +
+ + +
+ + + setStatusCode(http_response_code()); + ?> +
+ + + + + +
Response StatusgetStatusCode() . ' - ' . $response->getReasonPhrase()) ?>
+ + headers(); ?> + +

Headers

+ + + + + + + + + + $value) : ?> + + + + + + +
HeaderValue
+ getHeaderLine($name), 'html'); + } else { + foreach ($value as $i => $header) { + echo ' ('. $i+1 . ') ' . esc($header->getValueLine(), 'html'); + } + } + ?> +
+ + +
+ + +
+ + +
    + +
  1. + +
+
+ + +
+ + + + + + + + + + + + + + + + +
Memory Usage
Peak Memory Usage:
Memory Limit:
+ +
+ +
+ +
+ + + + diff --git a/app/Views/errors/html/production.php b/app/Views/errors/html/production.php new file mode 100644 index 0000000..2f59a8d --- /dev/null +++ b/app/Views/errors/html/production.php @@ -0,0 +1,25 @@ + + + + + + + <?= lang('Errors.whoops') ?> + + + + + +
+ +

+ +

+ +
+ + + + diff --git a/app/Views/medical/company_edit.php b/app/Views/medical/company_edit.php new file mode 100644 index 0000000..11f9d20 --- /dev/null +++ b/app/Views/medical/company_edit.php @@ -0,0 +1,70 @@ +id ?? 0); + $companyName = (string) ($row->company_name ?? ''); + $contactPersonName = (string) ($row->contact_person_name ?? ''); + $contactPhoneNo = (string) ($row->contact_phone_no ?? ''); +} +?> + +
+
Company
+
+
+ +
+ + + +
+ + +
+
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + diff --git a/app/Views/medical/company_master.php b/app/Views/medical/company_master.php new file mode 100644 index 0000000..7e6f993 --- /dev/null +++ b/app/Views/medical/company_master.php @@ -0,0 +1,17 @@ +
+
+
+
Company Master
+ +
+ +
+
+
+ $med_company ?? []]) ?> +
+
+
+
+
+
diff --git a/app/Views/medical/company_master_sub.php b/app/Views/medical/company_master_sub.php new file mode 100644 index 0000000..4e92991 --- /dev/null +++ b/app/Views/medical/company_master_sub.php @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + +
Company NamePerson/PhoneAction
company_name ?? '') ?>contact_person_name ?? '') . '/' . ($row->contact_phone_no ?? '')) ?> + +
+ + diff --git a/app/Views/medical/counter_sale_form.php b/app/Views/medical/counter_sale_form.php new file mode 100644 index 0000000..b5554af --- /dev/null +++ b/app/Views/medical/counter_sale_form.php @@ -0,0 +1,127 @@ +
+
+
Walk-in Customer Details
+ +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+ + +
+
+
+
+ + diff --git a/app/Views/medical/dashboard.php b/app/Views/medical/dashboard.php new file mode 100644 index 0000000..07f755e --- /dev/null +++ b/app/Views/medical/dashboard.php @@ -0,0 +1,40 @@ +
+

Medical Store

+ +
+ +
+ + +
+
diff --git a/app/Views/medical/drug_master_list.php b/app/Views/medical/drug_master_list.php new file mode 100644 index 0000000..84b749b --- /dev/null +++ b/app/Views/medical/drug_master_list.php @@ -0,0 +1,27 @@ +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + diff --git a/app/Views/medical/expiry_stock_list.php b/app/Views/medical/expiry_stock_list.php new file mode 100644 index 0000000..506565b --- /dev/null +++ b/app/Views/medical/expiry_stock_list.php @@ -0,0 +1,139 @@ + 0, + 'd30' => 0, + 'd60' => 0, + 'later' => 0, +]; + +foreach ($rows as $summaryRow) { + $expiryTs = strtotime((string) ($summaryRow->expiry_date ?? '')); + if ($expiryTs === false) { + $expirySummary['later']++; + continue; + } + + $daysToExpiry = (int) floor(($expiryTs - $todayTs) / 86400); + if ($daysToExpiry < 0) { + $expirySummary['expired']++; + } elseif ($daysToExpiry <= 30) { + $expirySummary['d30']++; + } elseif ($daysToExpiry <= 60) { + $expirySummary['d60']++; + } else { + $expirySummary['later']++; + } +} +?> + +
+
+
+
Nearest Expiry / Expired Medicine Stock
+ +
+ +
+ Expired + Expiring in 30 days + Expiring in 2 months + Above 2 months +
+ +
+
+
+
Expired
+
+
+
+
+
+
Expiring in 30 days
+
+
+
+
+
+
Expiring in 2 months
+
+
+
+
+
+
Above 2 months
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + expiry_date ?? ''); + $expiryTs = strtotime($expiryDateRaw); + $daysToExpiry = null; + + if ($expiryTs !== false) { + $daysToExpiry = (int) floor(($expiryTs - $todayTs) / 86400); + + if ($daysToExpiry < 0) { + $statusLabel = 'Expired'; + $statusClass = 'table-danger'; + } elseif ($daysToExpiry <= 30) { + $statusLabel = 'Expiring in 30 days'; + $statusClass = 'table-warning'; + } elseif ($daysToExpiry <= 60) { + $statusLabel = 'Expiring in 2 months'; + $statusClass = 'table-info'; + } + } + ?> + + + + + + + + + + + + + + +
#ItemSupplierPur. DateBatchExp. DtRateQtyC.QtyStatus
item_name ?? $row->Item_name ?? '') ?>name_supplier ?? '') ?>str_date_of_invoice ?? '') ?>batch_no ?? '') ?>exp_date ?? '') ?>mrp ?? 0), 2)) ?>tqty ?? 0), 2)) ?>cur_qty ?? 0), 2)) ?> + + + ( days) + +
+
+
+
diff --git a/app/Views/medical/expiry_stock_pdf.php b/app/Views/medical/expiry_stock_pdf.php new file mode 100644 index 0000000..327f96a --- /dev/null +++ b/app/Views/medical/expiry_stock_pdf.php @@ -0,0 +1,119 @@ + 0, + 'd30' => 0, + 'd60' => 0, + 'later' => 0, +]; + +foreach ($rows as $summaryRow) { + $expiryTs = strtotime((string) ($summaryRow->expiry_date ?? '')); + if ($expiryTs === false) { + $expirySummary['later']++; + continue; + } + + $daysToExpiry = (int) floor(($expiryTs - $todayTs) / 86400); + if ($daysToExpiry < 0) { + $expirySummary['expired']++; + } elseif ($daysToExpiry <= 30) { + $expirySummary['d30']++; + } elseif ($daysToExpiry <= 60) { + $expirySummary['d60']++; + } else { + $expirySummary['later']++; + } +} +?> + + + +

Expiry Medicine Report

+
Generated:
+ + + + + + + + + + + + + + +
ExpiredExpiring in 30 daysExpiring in 2 monthsAbove 2 months
+ + + + + + + + + + + + + + + + + + + expiry_date ?? '')); + if ($expiryTs !== false) { + $daysToExpiry = (int) floor(($expiryTs - $todayTs) / 86400); + $daysText = ' (' . $daysToExpiry . ' days)'; + + if ($daysToExpiry < 0) { + $statusLabel = 'Expired'; + $rowClass = 'expired-row'; + } elseif ($daysToExpiry <= 30) { + $statusLabel = 'Expiring in 30 days'; + $rowClass = 'd30-row'; + } elseif ($daysToExpiry <= 60) { + $statusLabel = 'Expiring in 2 months'; + $rowClass = 'd60-row'; + } + } + ?> + + + + + + + + + + + + + + +
#ItemSupplierPur. DateBatchExp. DtRateQtyC.QtyStatus
item_name ?? $row->Item_name ?? '')) ?>name_supplier ?? '')) ?>str_date_of_invoice ?? '')) ?>batch_no ?? '')) ?>exp_date ?? '')) ?>mrp ?? 0), 2)) ?>tqty ?? 0), 2)) ?>cur_qty ?? 0), 2)) ?>
diff --git a/app/Views/medical/invoice_edit.php b/app/Views/medical/invoice_edit.php new file mode 100644 index 0000000..6b732f6 --- /dev/null +++ b/app/Views/medical/invoice_edit.php @@ -0,0 +1,778 @@ +ipd_id ?? 0) > 0); ?> + +
+
+
+
+
Medical Invoice No. inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) ((int)($invoice->id ?? 0)), -7, 7), 7, '0', STR_PAD_LEFT))) ?>
+
+ ipd_id ?? 0) > 0): ?> + + + + +
+
+
+ + +
+ + + + + +
Invoice is finalized. Edit actions are locked.
+ + +
+ Name : inv_name ?? '-') ?> / + P Code : patient_code ?? '-') ?> / + ipd_id ?? 0) > 0): ?> + IPD ID : ipd_id ?? 0))) ?> / + + Invoice No. : inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) ((int)($invoice->id ?? 0)), -7, 7), 7, '0', STR_PAD_LEFT))) ?> / + Date : inv_date) ? date('d/m/Y', strtotime((string)$invoice->inv_date)) : '-') ?> +
+ + +
+ + +
+ + +
+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + item_code ?? ''); + if ($codeKey !== '') { + $itemCodeCounts[$codeKey] = ($itemCodeCounts[$codeKey] ?? 0) + 1; + } + } + } + ?> + + $item): ?> + sale_return ?? 0) === 1) + || ((float) ($item->amount ?? 0) < 0) + || ((float) ($item->tamount ?? 0) < 0) + || ((float) ($item->twdisc_amount ?? 0) < 0); + + if ($isReturnRow) { + $rowStyle = 'background:orange;'; + } + + $expiryDays = 1000; + if (!empty($item->expiry)) { + $expiryTs = strtotime((string) $item->expiry); + if ($expiryTs !== false) { + $expiryDays = (int) floor(($expiryTs - strtotime(date('Y-m-d'))) / 86400); + } + } + + if ($expiryDays < 90) { + $rowStyle = 'color:red;'; + } + + $sQty = (float) ($item->s_qty ?? 0); + if ($sQty < 6) { + $rowStyle = 'color:red;'; + } + + $itemCode = (string) ($item->item_code ?? ''); + if ($itemCode !== '' && (int) ($itemCodeCounts[$itemCode] ?? 0) > 1) { + $itemNameStyle = 'color:green;'; + } + ?> + > + + >item_Name ?? '-') ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.RateS.Qty.QtyDisc.AmountAction
batch_no ?? '-') ?>expiry) ? date('Y-m-d', strtotime((string)$item->expiry)) : '-') ?>price ?? 0), 2)) ?>qty ?? 0), 0, '.', '')) ?> + sale_return ?? 0) === 0): ?> +
+ + + + + +
+ + qty ?? 0), 2)) ?> + +
disc_amount ?? 0), 2)) ?>tamount ?? 0), 2)) ?> + +
+ + + + +
+ + Locked + +
No items in invoice.
Gross Totalgross ?? 0), 2)) ?>
Net Totalnet ?? 0), 2)) ?>
+
+ + +
+
Product Search
+
+
+
+
+ + +
+
+ +
+
+ + + + + + +

+ + + + +

+ +
+ + + + +
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
ItemBatchExp.S.QtyRateAdd
item_name ?? '-') ?>batch_no ?? '-') ?>expiry_date ?? '-') ?>current_qty ?? 0) ?>selling_unit_rate ?? 0), 2)) ?> +
+ + + + + + +
+
+
+ +
No stock items found for search.
+ +
+ + + +
+
+
+ + +
+
+
+
+
Sale Medicine
+
+ + +
+
+
+
+ + + patient_id) && !empty($oldInvoices)): ?> +
+ + id ?? 0); ?> + + + + + + + + + + + + + + + + + + + _items)): ?> + _items as $n => $oldItem): ?> + + + + + + + + + + + + + + + +
#inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $oldInvId, -7, 7), 7, '0', STR_PAD_LEFT))) ?>inv_date) ? date('Y-m-d', strtotime((string)$old->inv_date)) : '-') ?> + Show Bill +
#ItemBat.Exp.DtQtyR.Qty
item_Name ?? '-') ?>batch_no ?? '-') ?>expiry) ? date('m-Y', strtotime((string)$oldItem->expiry)) : '-') ?>qty ?? 0), 0)) ?> + id)): ?> +
+ + + + + +
+ + - + +
No item rows.
+ +
+ patient_id)): ?> +
No old invoices for this patient.
+ +
Walk-in invoice. Previous patient history is unavailable.
+ +
+
+
+ +
+ + diff --git a/app/Views/medical/invoice_item_log.php b/app/Views/medical/invoice_item_log.php new file mode 100644 index 0000000..713f2a8 --- /dev/null +++ b/app/Views/medical/invoice_item_log.php @@ -0,0 +1,62 @@ + + +
+
+
+
Medical Invoice Item Log
+ Back to Master +
+ +
+
+ + +
+
+ + + +
+
+ +
+
+ +
+
+
+ + diff --git a/app/Views/medical/invoice_item_log_data.php b/app/Views/medical/invoice_item_log_data.php new file mode 100644 index 0000000..b630b5b --- /dev/null +++ b/app/Views/medical/invoice_item_log_data.php @@ -0,0 +1,112 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice CodeInvoice DateNameItem DeletedPayment LogUpdate Log
inv_med_code ?? '') ?>inv_date ?? '') ?>inv_name ?? '') ?> + del_item_list ?? ''))); + $itemAmountTotal = 0.0; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NameQtyPriceAmountDelete By
Total Amount
+ + No Item Deleted + +
+ payment_log ?? ''))); ?> + + + + + + + + + + + + + + + + + + +
Payment TypeAmountPayment By
+ + No Payment Log + +
log ?? '')) ?>
+
+ + diff --git a/app/Views/medical/invoice_master_edit.php b/app/Views/medical/invoice_master_edit.php new file mode 100644 index 0000000..214b2dd --- /dev/null +++ b/app/Views/medical/invoice_master_edit.php @@ -0,0 +1,438 @@ +
+
+
+ Medical Invoice Master Edit : + + Back to Invoice + +
+
+ + +
+ + +
+ + + + + + + +
+
+

+ Name : inv_name ?? '-') ?> + / P Code : patient_code ?? '-') ?> + / Invoice No. : inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) ((int)($invoice->id ?? 0)), -7, 7), 7, '0', STR_PAD_LEFT))) ?> + / Date : inv_date) ? date('d/m/Y', strtotime((string) $invoice->inv_date)) : '-') ?> + ipd_code)): ?> + / IPD Code : ipd_code) ?> + + case_id)): ?> + / Org. Case : case_id) ?> + +

+
+
+
+
+ + +
+
+ +
+
+ +
+ ipd_id ?? 0) > 0): ?> +
+ +
+ ipd_credit ?? 0) === 0) ? 'checked' : '' ?>> + +
+
+ ipd_credit ?? 0) === 1) ? 'checked' : '' ?>> + +
+
+
+ +
+ case_id ?? 0) > 0): ?> +
+ +
+ case_credit ?? 0) === 0) ? 'checked' : '' ?>> + +
+
+ case_credit ?? 0) === 1) ? 'checked' : '' ?>> + +
+
+ +
+
+
+ +
+
+

Change Name : Current Name : inv_name ?? '-') ?>

+
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+ +
+
+

Change UHID : Current UHID : patient_code ?? '-') ?>

+
+
+
+
+ + +
+
+ +
inv_name ?? '-') ?> / inv_phone_number ?? '-') ?>
+
+
+ +
+
+
+
+ +
+
+

Change IPD : ipd_credit ?? 0) > 0): ?>Current IPD : ipd_code ?? '-') ?>

+
+
+
+
+ + +
+
+ +
inv_name ?? '-') ?>
+
+
+ +
+
+
+
+ +
+
+

Change Org. Case : case_credit ?? 0) > 0): ?>Current Org. Case : case_id ?? '-') ?>

+
+
+
+
+ + +
+
+ +
inv_name ?? '-') ?>
+
+
+ +
+
+
+
+ +
+
+
+ + + + +
+
+ + Cancel +
+
+
+
+
+ + diff --git a/app/Views/medical/invoice_med_draft.php b/app/Views/medical/invoice_med_draft.php new file mode 100644 index 0000000..5a9250e --- /dev/null +++ b/app/Views/medical/invoice_med_draft.php @@ -0,0 +1,115 @@ +
+
+
Invoice Draft List
+ + +
+ + +
+ Draft + All +
+ +
+ + + + + + +
+ + +
+
+ + +
+
+ + +
+
+ + Reset +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice CodeNameUHID / Patient IDIPD No.DateNet AmountAmt.PaidBalance / Status
+
+
+
+ + diff --git a/app/Views/medical/invoice_print.php b/app/Views/medical/invoice_print.php new file mode 100644 index 0000000..5ada468 --- /dev/null +++ b/app/Views/medical/invoice_print.php @@ -0,0 +1,116 @@ + + + + + + Medical Invoice <?= esc($invoice->inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) ((int)($invoice->id ?? 0)), -7, 7), 7, '0', STR_PAD_LEFT))) ?> + + + + + +
Medical Invoice
+
Invoice No: inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) ((int)($invoice->id ?? 0)), -7, 7), 7, '0', STR_PAD_LEFT))) ?>
+ +
+
+
Date: inv_date ?? '-') ?>
+
Patient: inv_name ?? '-') ?>
+
Patient Code: patient_code ?? '-') ?>
+
+
+
Doctor: doc_name ?? '-') ?>
+
Phone: inv_phone_number ?? ($patient->mphone1 ?? '-')) ?>
+
Type: ipd_credit ?? 0) === 1) ? 'Credit' : 'Cash' ?>
+
+
+ + + + + + + + + + + + + + + + + + $item): ?> + amount ?? 0); + $rowDisc = (float) ($item->disc_amount ?? 0); + $rowNet = (float) ($item->tamount ?? 0); + $gross += $rowGross; + $discount += $rowDisc; + $net += $rowNet; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#ItemBatchQtyRateDiscountAmountNet
item_Name ?? '-') ?>formulation) ? ' / ' . esc($item->formulation) : '' ?>batch_no ?? '-') ?>qty ?? 0), 2)) ?>price ?? 0), 2)) ?>
No items found.
Grossgross_amount ?? $gross), 2)) ?>
Discountdisc_amount ?? $discount), 2)) ?>
Net Amountnet_amount ?? $net), 2)) ?>
+ +
+
Prepared By: _____________________
+
Authorized Sign: _____________________
+
+ + diff --git a/app/Views/medical/invoice_print_pdf.php b/app/Views/medical/invoice_print_pdf.php new file mode 100644 index 0000000..e399d53 --- /dev/null +++ b/app/Views/medical/invoice_print_pdf.php @@ -0,0 +1,194 @@ +inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) ((int) ($invoice->id ?? 0)), -7, 7), 7, '0', STR_PAD_LEFT))); +$invoiceDate = ! empty($invoice->inv_date) ? date('d-m-Y', strtotime((string) $invoice->inv_date)) : date('d-m-Y'); + +$pharmacyName = defined('M_store') ? (string) M_store : 'Medical Store'; +$pharmacyAddress = defined('M_address') ? (string) M_address : ''; +$pharmacyPhone = defined('M_Phone_Number') ? (string) M_Phone_Number : ''; +$pharmacyState = defined('M_State') ? (string) M_State : ''; +$pharmacyGst = defined('H_Med_GST') ? (string) H_Med_GST : ''; + +$customerName = trim((string) ($invoice->inv_name ?? 'Walk-in Customer')); +$customerCode = trim((string) ($invoice->patient_code ?? '')); +$customerPhone = trim((string) ($invoice->inv_phone_number ?? ($patient->mphone1 ?? ''))); +$doctorName = trim((string) ($invoice->doc_name ?? '')); + +$grossTotal = 0.0; +$discountTotal = 0.0; +$cgstTotal = 0.0; +$sgstTotal = 0.0; +$netTotal = 0.0; + +$compact = in_array((int) ($printFormat ?? 0), [1, 2, 3], true); +$baseFont = $compact ? '10px' : '11px'; +$titleFont = $compact ? '16px' : '20px'; +$thPad = $compact ? '5px 4px' : '6px 5px'; +$tdPad = $compact ? '4px 4px' : '5px 5px'; +?> + + + + + + + +
+
+
+
+ + | Phone: + | GSTIN: +
+
TAX INVOICE
+
+ + + + + + +
+
Bill To
+
+
Patient Code:
+
Phone:
+
Doctor:
+
+
Invoice Details
+
Invoice No:
+
Date:
+
Payment Type: ipd_credit ?? 0) === 1 || (int) ($invoice->case_credit ?? 0) === 1) ? 'Credit' : 'Cash' ?>
+
IPD/Case: ipd_code ?? $invoice->case_id ?? '-')) ?>
+
+ + + + + + + + + + + + + + + + + + + + $item): ?> + amount ?? 0); + $disc = (float) ($item->disc_amount ?? ($item->twdisc_amount ?? 0)); + $net = (float) ($item->twdisc_amount ?? $item->tamount ?? ($item->net_amount ?? 0)); + + $cgstPer = (float) ($item->CGST_per ?? 0); + $sgstPer = (float) ($item->SGST_per ?? 0); + $gstPerTotal = $cgstPer + $sgstPer; + + $cgst = (float) ($item->CGST ?? ($item->c_gst_amt ?? 0)); + $sgst = (float) ($item->SGST ?? ($item->s_gst_amt ?? 0)); + + if (($cgst <= 0 || $sgst <= 0) && $gstPerTotal > 0 && $net > 0) { + $taxableFromInclusive = $net * 100 / (100 + $gstPerTotal); + $taxTotal = $net - $taxableFromInclusive; + $cgst = $taxTotal * ($cgstPer / $gstPerTotal); + $sgst = $taxTotal * ($sgstPer / $gstPerTotal); + } elseif (($cgst <= 0 || $sgst <= 0) && $gstPerTotal > 0 && $gross > 0) { + $cgst = $gross * $cgstPer / 100; + $sgst = $gross * $sgstPer / 100; + } + + $grossTotal += $gross; + $discountTotal += $disc; + $cgstTotal += $cgst; + $sgstTotal += $sgst; + $netTotal += $net; + ?> + + + + + + + + + + + + + + + + + + + + +
#CodeItem NameBatchExp.QtyRateGrossDiscInc. GSTNet
item_code ?? '-')) ?>item_Name ?? '-')) ?>batch_no ?? '-')) ?>expiry ?? '-')) ?>qty ?? 0), 2)) ?>price ?? 0), 2)) ?>
No items available.
+ + gross_amount ?? $grossTotal); + $discFinal = (float) ($invoice->disc_amount ?? $discountTotal); + $netFinal = (float) ($invoice->net_amount ?? $netTotal); + ?> + + + + + + + + + + + + + + + + + + +
Gross Total₹ Discount Total₹
Inc. GST Total₹
Net Amount₹
+ + + + + + + + +
Customer SignatureAuthorized Signatory
+
+ + diff --git a/app/Views/medical/ipd_org_list.php b/app/Views/medical/ipd_org_list.php new file mode 100644 index 0000000..ae2e766 --- /dev/null +++ b/app/Views/medical/ipd_org_list.php @@ -0,0 +1,87 @@ +
+
+
+
IPD List (Current Admit)
+ + High Balance: + +
+ +
+ + + + + + + + + + + + + + + + + + id ?? 0); + $ipdCode = (string) ($row->ipd_code ?? ('IPD-' . $ipdId)); + $patientCode = (string) ($row->p_code ?? '-'); + $patientName = (string) ($row->p_fname ?? '-'); + $patientRelative = (string) ($row->p_rname ?? ''); + $bedDesc = (string) ($row->Bed_Desc ?? ($row->bed_desc ?? '-')); + $regDate = (string) ($row->str_register_date ?? ''); + if ($regDate === '' && !empty($row->register_date)) { + $ts = strtotime((string) $row->register_date); + $regDate = $ts ? date('d-m-Y', $ts) : (string) $row->register_date; + } + $noDays = (string) ($row->no_days ?? '-'); + $docName = (string) ($row->doc_name ?? '-'); + $admitType = (string) ($row->admit_type ?? '-'); + $orgStatus = (string) ($row->Org_Status ?? ($row->org_status ?? '')); + $medAmount = (float) ($row->med_amount ?? 0); + ?> + + + + + + + + + + + + + + + + + + +
IPD CodeName / Patient CodeBed No.[Type]Register DateNo. of DaysDr. NameAdmit TypeAmountAction
[] ' . esc($patientRelative) : '' ?>' . esc($orgStatus) : '' ?>M: + Open Invoices +
No currently admitted IPD records found.
+
+
+
+ + diff --git a/app/Views/medical/ipd_print_report.php b/app/Views/medical/ipd_print_report.php new file mode 100644 index 0000000..47c20cf --- /dev/null +++ b/app/Views/medical/ipd_print_report.php @@ -0,0 +1,607 @@ + 'IPD Medical Invoice (Cash)', + 'cash-return' => 'IPD Medical Invoice (Cash With Return)', + 'credit' => 'IPD Medical Invoice (Credit)', + 'package' => 'IPD Medical Invoice (Package)', + 'med-list' => 'Consolidated Medicine List', + 'med-list-date' => 'Medicine List Datewise', + 'pagewise' => 'IPD Medical Invoice (Page Wise)', + 'return-list' => 'Return Medicine List', +]; + +$title = $modeTitleMap[$mode] ?? 'IPD Medical Print'; +$ipdCode = (string) ($ipd->ipd_code ?? ('IPD-' . (int) ($ipdId ?? 0))); +$isPdf = (bool) ($isPdf ?? false); + +$pharmacyName = defined('M_store') ? (string) M_store : 'Medical Store'; +$pharmacyAddress = defined('M_address') ? (string) M_address : ''; +$pharmacyPhone = defined('M_Phone_Number') ? (string) M_Phone_Number : ''; +$pharmacyEmail = defined('H_Email') ? (string) H_Email : ''; +$pharmacyGst = defined('H_Med_GST') ? (string) H_Med_GST : ''; +$pharmacyLic = defined('M_LIC') ? (string) M_LIC : ''; + +$patientName = trim((string) ($patient->p_fname ?? ($ipd->p_name ?? '-'))); +$patientCode = trim((string) ($patient->p_code ?? '-')); +$doctorName = trim((string) ($ipd->doc_name ?? '-')); +$orgCode = trim((string) ($orgCase->case_id_code ?? '-')); +$orgName = trim((string) ($orgCase->insurance_company_name ?? '-')); + +$invoiceMap = []; +foreach (($invoices ?? []) as $inv) { + $invoiceMap[(int) ($inv->id ?? 0)] = $inv; +} + +$itemsByInvoice = $itemsByInvoice ?? []; +$invoiceItemTotals = $invoiceItemTotals ?? []; +$invoiceTotals = $invoiceTotals ?? ['gross' => 0, 'discount' => 0, 'net' => 0, 'balance' => 0]; +$itemTotals = $itemTotals ?? ['qty' => 0, 'amount' => 0]; +$itemsByDate = $itemsByDate ?? []; +$paymentHistory = $paymentHistory ?? []; +$paymentSummary = $paymentSummary ?? [ + 'total_received' => 0.0, + 'balance' => (float) ($invoiceTotals['net'] ?? 0), +]; + +$abs = static function ($value): float { + return abs((float) $value); +}; + +$fmtDate = static function ($value, string $format = 'd-m-Y'): string { + if (empty($value)) { + return '-'; + } + $ts = strtotime((string) $value); + return $ts ? date($format, $ts) : '-'; +}; + +$fmtMoney = static function ($value): string { + return number_format((float) $value, 2); +}; + +$docType = in_array($mode, ['med-list', 'med-list-date', 'return-list'], true) ? 'LIST REPORT' : 'TAX INVOICE'; +?> + + + + + + + + + +
+
+
+ + | Phone: + | Email:
+ GST: + | L.No: +
+
+
+ + + + + + + + + + + + + + + + + + org_id ?? 0) > 0): ?> + + + + + + + + + + + + + +
Patient:
UHID:
IPD Code:
Refer By:
Org. Code:
Org. Name:
Printed On:
+
+
+
+ + + + + + + +
IPD: | UHID: Page {PAGENO}/{nbpg}
+
+ + +
+
()
+
+ + Back +
+
+ + + + + + + + + + +
Document Type
Invoice Count
Total Qty
Total Net
₹
Balance
₹
+ + + + $dateItems): ?> +
Date:
+ + + + + + + + + + + + + + + + $item): ?> + inv_med_id ?? 0); + $inv = $invoiceMap[$invId] ?? null; + $invCode = (string) ($inv->inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invId, -7, 7), 7, '0', STR_PAD_LEFT))); + $amt = (float) ($item->tamount ?? $item->amount ?? 0); + $dateAmount += $amt; + ?> + + + + + + + + + + + + + + + + +
#InvoiceItem NameBatchExp.QtyRateAmount
item_Name ?? '-') . ' ' . ($item->formulation ?? '')))) ?>batch_no ?? '-')) ?>expiry, 'm-Y')) ?>qty ?? 0)) ?>price ?? 0)) ?>
Date Total
+ + + + + + + + + + + + + + + + + + + $item): ?> + inv_med_id ?? 0); + $inv = $invoiceMap[$invId] ?? null; + $invCode = (string) ($inv->inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invId, -7, 7), 7, '0', STR_PAD_LEFT))); + $invDate = $inv->inv_date ?? null; + $amount = (float) ($item->tamount ?? $item->amount ?? 0); + if ($mode === 'return-list') { + $amount = -1 * $abs($amount); + } + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
#InvoiceDateItem NameBatchExp.QtyRateAmount
item_Name ?? '-') . ' ' . ($item->formulation ?? '')))) ?>batch_no ?? '-')) ?>expiry, 'm-Y')) ?>qty ?? 0)) ?>price ?? 0)) ?>
No rows found.
Total
+ + + + $invoice): ?> + id ?? 0); + $invoiceCode = (string) ($invoice->inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invoiceId, -7, 7), 7, '0', STR_PAD_LEFT))); + $invoiceDate = $fmtDate($invoice->inv_date ?? null); + $invoiceItems = $itemsByInvoice[$invoiceId] ?? []; + $invTotals = $invoiceItemTotals[$invoiceId] ?? ['qty' => 0, 'gross' => 0, 'discount' => 0, 'gst' => 0, 'net' => 0]; + $netAmount = (float) ($invoice->net_amount ?? $invTotals['net']); + ?> +
+
+ Invoice: + Date: | Type: ipd_credit ?? 0) > 0) ? 'Credit' : 'Cash' ?> +
+ + + + + + + + + + + + + + + + + + + $item): ?> + amount ?? 0); + $disc = (float) (($item->disc_amount ?? 0) + ($item->disc_whole ?? 0)); + if ($disc == 0.0) { + $disc = (float) ($item->twdisc_amount ?? 0) > 0 ? ($gross - (float) ($item->twdisc_amount ?? 0)) : 0.0; + } + $net = (float) ($item->twdisc_amount ?? ($item->tamount ?? $gross)); + + $cgstPer = (float) ($item->CGST_per ?? 0); + $sgstPer = (float) ($item->SGST_per ?? 0); + $gstPer = $cgstPer + $sgstPer; + $cgst = (float) ($item->CGST ?? 0); + $sgst = (float) ($item->SGST ?? 0); + + if (($cgst + $sgst) <= 0.0 && $gstPer > 0.0 && $net > 0.0) { + $taxableFromInclusive = $net * 100 / (100 + $gstPer); + $taxTotal = $net - $taxableFromInclusive; + $cgst = $taxTotal * ($cgstPer / $gstPer); + $sgst = $taxTotal * ($sgstPer / $gstPer); + } + + $rowIsReturn = ((float) ($item->amount ?? 0) < 0) + || ((float) ($item->tamount ?? 0) < 0) + || ((int) ($item->sale_return ?? 0) === 1); + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Item NameBatchExp.QtyRateGrossDisc.Inc. GSTNet
item_Name ?? '-') . ' ' . ($item->formulation ?? '')))) ?>batch_no ?? '-')) ?>expiry, 'm-Y')) ?>qty ?? 0)) ?>price ?? 0)) ?>
No item rows available.
Invoice Total
+ + + + + + + + + + + + + + +
Gross Amount₹ gross_amount ?? $invTotals['gross'])) ?>Discount₹ disc_amount ?? 0) + ($invoice->discount_amount ?? 0)))) ?>Inc. GST₹
Net Amount₹
+
+ + +
+ + + +
Grand Summary
+ + + + + + + + + + + + + + + + + + + +
Gross Total₹ Discount Total₹
Net Total₹ Total Payment Received₹
Balance Total₹
+ +
No invoices found for selected print mode.
+ + + + +
Payment Details
+ + + + + + + + + + + + + + + + payment_mode ?? 1) === 2) ? 'Bank Card' : 'Cash'; + if ((int) ($pay->payment_mode ?? 0) > 2) { + $payMode = 'Other'; + } + if ((int) ($pay->credit_debit ?? 0) > 0) { + $payMode .= ' Return'; + } + $signed = (float) ($pay->paid_amount ?? $pay->amount ?? 0); + $payTotal += $signed; + ?> + + + + + + + + + + + + + + + +
#DateModeRef NoRemarkAmountSigned Amount
id ?? '-')) ?>payment_date ?? $pay->entry_date ?? null, 'd-m-Y H:i')) ?>card_trans_id ?? $pay->card_tran_id ?? '-')) ?>payment_desc ?? $pay->payment_remark ?? '-')) ?>amount ?? 0)) ?>
Total Paid (Signed)
+ + +
+ This is a computer-generated document. Please verify medicine name, batch, and quantity at issue time. +
+ + + + + + +
Patient/Relative SignatureFor (Authorized Signatory)
diff --git a/app/Views/medical/ipd_return_medicine.php b/app/Views/medical/ipd_return_medicine.php new file mode 100644 index 0000000..c06fc93 --- /dev/null +++ b/app/Views/medical/ipd_return_medicine.php @@ -0,0 +1,143 @@ +id ?? 0); + $ipdCode = (string) ($ipd->ipd_code ?? ('IPD-' . $ipdId)); + $patientName = (string) ($patient->p_fname ?? '-'); + $patientCode = (string) ($patient->p_code ?? '-'); + $modeLabel = (string) ($modeLabel ?? 'Medicine Reurn'); + + $totalInvoices = !empty($invoices) ? count($invoices) : 0; + $totalItems = 0; + $totalReturnedItems = 0; + foreach (($invoices ?? []) as $invRow) { + $invId = (int) ($invRow->id ?? 0); + $totalItems += (int) ($itemCountMap[$invId] ?? 0); + $totalReturnedItems += (int) ($returnCountMap[$invId] ?? 0); + } + $pendingItems = max(0, $totalItems - $totalReturnedItems); +?> + +
+
+
Medical Return Items
+ +
+ +
+
+ Patient Code : / + Customer Name : / + IPD Code : + +
+ +
+ + +
+ +
+
+
+
Invoices
+
+
+
+
+
+
Total Items
+
+
+
+
+
+
Returned Items
+
+
+
+
+
+
Pending
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + $row): ?> + id ?? 0); + $totalItems = (int) ($itemCountMap[$invId] ?? 0); + $returnedItems = (int) ($returnCountMap[$invId] ?? 0); + $pendingForInvoice = max(0, $totalItems - $returnedItems); + ?> + + + + + + + + + + + + + + + + + +
#Invoice IDDateTotal ItemsReturned ItemsStatusNet AmountAction
inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invId, -7, 7), 7, '0', STR_PAD_LEFT))) ?>inv_date) ? date('Y-m-d', strtotime((string)$row->inv_date)) : '-') ?> + 0): ?> + Pending + + Completed + + net_amount ?? 0), 2)) ?> + Open Bill For Return + Final View +
No invoices found for this IPD.
+
+ +
+ Open bill for return, then use right-side R.Qty flow to add return items. +
+
+
+ + diff --git a/app/Views/medical/main_store_dashboard.php b/app/Views/medical/main_store_dashboard.php new file mode 100644 index 0000000..d32e480 --- /dev/null +++ b/app/Views/medical/main_store_dashboard.php @@ -0,0 +1,69 @@ +
+

Store Main Panel

+
+ +
+ + +
+
diff --git a/app/Views/medical/master.php b/app/Views/medical/master.php new file mode 100644 index 0000000..154016b --- /dev/null +++ b/app/Views/medical/master.php @@ -0,0 +1,123 @@ +
+

Pharmacy Master Panel

+ +
+ +
+ + +
+
diff --git a/app/Views/medical/master_report.php b/app/Views/medical/master_report.php new file mode 100644 index 0000000..f338164 --- /dev/null +++ b/app/Views/medical/master_report.php @@ -0,0 +1,35 @@ +
+
+ + + +
+ + + +
+ + + + + + + + + + + + + + + + + +
+
+ +
+
diff --git a/app/Views/medical/med_model_payment.php b/app/Views/medical/med_model_payment.php new file mode 100644 index 0000000..aad4e09 --- /dev/null +++ b/app/Views/medical/med_model_payment.php @@ -0,0 +1,219 @@ +id ?? 0); + $patientName = (string) ($patient->p_fname ?? '-'); + $patientRelative = (string) ($patient->p_rname ?? ''); + $patientCode = (string) ($patient->p_code ?? '-'); + $genderValue = (string) ($patient->xgender ?? ($patient->gender ?? '')); + if ($genderValue === '1') { + $genderValue = 'Male'; + } elseif ($genderValue === '0' || $genderValue === '2') { + $genderValue = 'Female'; + } + $patientAge = ''; + if (!empty($patient)) { + $patientAge = get_age_1( + $patient->dob ?? null, + $patient->age ?? '', + $patient->age_in_month ?? '', + $patient->estimate_dob ?? '', + $ipd->register_date ?? null + ); + } + $ipdCode = (string) ($ipd->ipd_code ?? ('IPD-' . $ipdId)); + $groupId = (int) ($group->med_group_id ?? 0); + $netAmount = (float) ($paymentSummary['net_amount'] ?? ($group->net_amount ?? 0)); + $paidAmount = (float) ($paymentSummary['paid_amount'] ?? ($group->payment_received ?? 0)); + $balanceAmount = (float) ($paymentSummary['balance_amount'] ?? ($group->payment_balance ?? ($netAmount - $paidAmount))); +?> + +
+
+
IPD Payment : IPD Code :
+ Back to Invoice List +
+ +
+
+ Name : / + Age : / + Gender : / + Patient Code / UHID : / + IPD Code : +
+ +
+
+
+
Add Payment
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
Cash
+ +
+ +
+
Credit / Debit Card
+
+
+ + +
+
+ + +
+
+ +
+
+
+ +
Use Debit/Return when refunding amount.
+
+
+
+ +
+
+
Summary
+
+
Pharmacy Bill Amount: Rs.
+
Total Amount Paid: Rs.
+
Balance Amount: Rs.
+
+
+ +
+
Payment Details
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Pay.No.ModeDateAmount
id ?? '')) ?>Payment_type_str ?? '-') ?>payment_date) ? date('d-m-Y', strtotime((string) $row->payment_date)) : '-') ?>paid_amount ?? 0), 2)) ?>
No payment entries.
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/medical_final_invoice.php b/app/Views/medical/medical_final_invoice.php new file mode 100644 index 0000000..d397af4 --- /dev/null +++ b/app/Views/medical/medical_final_invoice.php @@ -0,0 +1,419 @@ +id ?? 0); + $balance = (float) ($paymentSummary['balance'] ?? 0); + $net = (float) ($paymentSummary['net'] ?? ($invoice->net_amount ?? 0)); + $paid = (float) ($paymentSummary['paid'] ?? ($invoice->payment_received ?? 0)); + $deduction = (float) ($paymentSummary['extra_discount'] ?? ($invoice->discount_amount ?? 0)); + $deductionRemark = (string) ($paymentSummary['discount_remark'] ?? ($invoice->discount_remark ?? '')); + $allowPaymentMode = ((int) ($invoice->ipd_credit ?? 0) === 0) && ((int) ($invoice->case_credit ?? 0) === 0) && ((int) ($invoice->group_invoice_id ?? 0) === 0); +?> + +
+
+
Medical Invoice No. : inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invoiceId, -7, 7), 7, '0', STR_PAD_LEFT))) ?>
+
+ id)): ?> + IPD Bills + id)): ?> + Org Bills + + All Bills + + + Print + + + Print + +
+
+ +
+ +
+ +
+ +
+ Name : inv_name ?? '-') ?> / + P Code : patient_code ?? '-') ?> / + Invoice No. : inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invoiceId, -7, 7), 7, '0', STR_PAD_LEFT))) ?> / + Date : inv_date) ? date('d/m/Y', strtotime((string)$invoice->inv_date)) : '-') ?> + ipd_code)): ?> / IPD : ipd_code) ?> + case_id_code)): ?> / Org Case : case_id_code) ?> + + Open Bill For Edit + + + Open Bill For Edit + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + $item): ?> + twdisc_amount ?? $item->tamount ?? $item->amount ?? 0); + $lineBase = (float) ($item->amount ?? 0); + $cgstPer = (float) ($item->CGST_per ?? 0); + $sgstPer = (float) ($item->SGST_per ?? 0); + + $cgstValue = (float) ($item->CGST ?? ($item->c_gst_amt ?? 0)); + $sgstValue = (float) ($item->SGST ?? ($item->s_gst_amt ?? 0)); + + $gstPerTotal = $cgstPer + $sgstPer; + if (($cgstValue <= 0 || $sgstValue <= 0) && $gstPerTotal > 0 && $lineNet > 0) { + $taxableFromInclusive = $lineNet * 100 / (100 + $gstPerTotal); + $taxTotal = $lineNet - $taxableFromInclusive; + $cgstValue = $taxTotal * ($cgstPer / $gstPerTotal); + $sgstValue = $taxTotal * ($sgstPer / $gstPerTotal); + } elseif (($cgstValue <= 0 || $sgstValue <= 0) && $gstPerTotal > 0 && $lineBase > 0) { + $cgstValue = $lineBase * $cgstPer / 100; + $sgstValue = $lineBase * $sgstPer / 100; + } + + $rowCgstTotal += (float) $cgstValue; + $rowSgstTotal += (float) $sgstValue; + ?> + + + + + + + + + + + + + + + + + + + + + + CGST_Tamount ?? 0); + $invoiceSgstTotal = (float) ($invoice->SGST_Tamount ?? 0); + if ($invoiceCgstTotal <= 0 && $rowCgstTotal > 0) { + $invoiceCgstTotal = $rowCgstTotal; + } + if ($invoiceSgstTotal <= 0 && $rowSgstTotal > 0) { + $invoiceSgstTotal = $rowSgstTotal; + } + ?> + + + + + + + + + + +
#Item codeItem NameFormulationBatch NoExp.RateQty.GrossDisc.HSNCODE/GST%Inc. GSTNet Amount
item_code ?? '-') ?>item_Name ?? '-') ?>formulation ?? '-') ?>batch_no ?? '-') ?>expiry) ? date('Y-m-d', strtotime((string)$item->expiry)) : '-') ?>price ?? 0), 2)) ?>qty ?? 0), 2)) ?>amount ?? 0), 2)) ?>disc_whole ?? $item->disc_amount ?? 0), 2)) ?>HSNCODE ?? '-') . '/' . number_format((float) (($item->CGST_per ?? 0) + ($item->SGST_per ?? 0)), 2)) ?>twdisc_amount ?? $item->tamount ?? 0), 2)) ?>
No item rows.
#Gross Totalgross_amount ?? 0), 2)) ?>disc_amount ?? 0), 2)) ?>
+
+ +
+ + + + + + + + +
#Deduction
+
+ +
+ + + + + + + +
#Amount received :
+ + + [id ?? '-') ?>:Payment_type_str ?? '-') ?>:paid_amount ?? 0), 2)) ?>:payment_date ?? '-') ?>]
+ + +
Balance Amount : Net Amount :
+
+ + 0.0001): ?> +
+ + +
+ + +
+ + 0): ?> +
+
Cash
+
+ +
+
+ +
+
Credit / Debit Card
+
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+ +
+
Cash Return
+
+ +
+
+ +
+ + + + +
+
+ +
+ + diff --git a/app/Views/medical/medical_invoice_list.php b/app/Views/medical/medical_invoice_list.php new file mode 100644 index 0000000..f53039c --- /dev/null +++ b/app/Views/medical/medical_invoice_list.php @@ -0,0 +1,298 @@ +id ?? 0); + $ipdCode = (string) ($ipd->ipd_code ?? ('IPD-' . $ipdId)); + $patientName = (string) ($patient->p_fname ?? '-'); + $patientRelative = (string) ($patient->p_rname ?? ''); + $patientCode = (string) ($patient->p_code ?? '-'); + $age = ''; + if (!empty($patient)) { + $age = get_age_1( + $patient->dob ?? null, + $patient->age ?? '', + $patient->age_in_month ?? '', + $patient->estimate_dob ?? '', + $ipd->register_date ?? null + ); + } + $genderValue = (string) ($patient->xgender ?? ($patient->gender ?? '')); + if ($genderValue === '1') { + $genderValue = 'Male'; + } elseif ($genderValue === '0' || $genderValue === '2') { + $genderValue = 'Female'; + } + + $admitDate = ''; + if (!empty($ipd->register_date)) { + $ts = strtotime((string) $ipd->register_date); + $admitDate = $ts ? date('d-m-Y H:i', $ts) : (string) $ipd->register_date; + } + + $dischargeDate = ''; + if (!empty($ipd->discharge_date)) { + $ts = strtotime((string) $ipd->discharge_date); + $dischargeDate = $ts ? date('d-m-Y H:i', $ts) : (string) $ipd->discharge_date; + } + + $noDays = 0; + if (!empty($ipd->register_date)) { + $noDays = max(1, (int) floor((time() - strtotime((string) $ipd->register_date)) / 86400)); + } + + $docName = (string) ($ipd->doc_name ?? '-'); + $status = ((int) ($ipd->ipd_status ?? 0) === 0) ? 'Admit' : 'Discharge'; + $lockMedical = (int) ($ipd->lock_medical ?? 0); +?> + +
+
+

IPD Code :

+ +
+ Add New + + Refresh + +
+
+ +
+
+
+ Name : + / Age : + / Gender : + / P Code : +
+ +
+ IPD Code : + Admit Date : + / Discharge Date : + / No. of Days : + / Status : +
+ +
+ + + + + + + + + + + + + + + + $row): ?> + id ?? 0); + $ipdCredit = (int)($row->ipd_credit ?? 0); + $groupInvoiceId = (int)($row->group_invoice_id ?? 0); + $creditText = ($ipdCredit > 0) ? 'Credit' : 'CASH'; + $packageText = ($ipdCredit > 0 && $groupInvoiceId > 0) ? 'Yes' : 'No'; + $editMeta = $invoiceEditMeta[$invoiceId] ?? ['can_edit' => true, 'reason' => '']; + $canEditRow = !empty($editMeta['can_edit']); + $editReason = (string) ($editMeta['reason'] ?? 'Invoice is view-only.'); + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice ID.Inv.DateInv.DescCredit/CashPackageAmountAction
inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invoiceId, -7, 7), 7, '0', STR_PAD_LEFT))) ?>inv_date) ? date('Y-m-d', strtotime((string)$row->inv_date)) : '-') ?>remark_ipd ?? '-') ?>net_amount ?? 0), 2)) ?> + + Edit + + Edit + + + PDF + + PDF + +
No invoices found for this IPD.
Total Cash : + + / Total Balance : + / Total CASH Discount : + + + Total Credit : + / Total Package : + / Total Amount : +
+
+ +
+ + + + + + + + + + + +
Medicine ReurnMedicine Reurn New
Payment Add + + + +
+
+ + +
+
+ +
+ + diff --git a/app/Views/medical/medical_org_invoicelist.php b/app/Views/medical/medical_org_invoicelist.php new file mode 100644 index 0000000..cd85f15 --- /dev/null +++ b/app/Views/medical/medical_org_invoicelist.php @@ -0,0 +1,106 @@ +id ?? 0); +$orgCode = (string) ($orgcase->case_id_code ?? ('ORG-' . $orgId)); +$patientName = (string) ($orgcase->p_fname ?? '-'); +$patientRel = (string) ($orgcase->p_rname ?? ''); +$patientCode = (string) ($orgcase->p_code ?? '-'); +$insuranceName = (string) ($orgcase->insurance_company_name ?? '-'); +$amountTotal = (float) ($totals['amount_total'] ?? 0); +$balanceTotal = (float) ($totals['balance_total'] ?? 0); +$hasRows = !empty($invoices); +?> + +
+
+
Org Case:
+ +
+ +
+
+ Name : + / P Code : + / Insurance : +
+ +
+ + + + + + + + + + + + + + + + $row): ?> + id ?? 0); ?> + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice IDInv.DateInv.DescCredit/CashAmountBalanceAction
inv_med_code ?? ('M' . date('ym') . str_pad((string) $invoiceId, 7, '0', STR_PAD_LEFT)))) ?>inv_date) ? date('d-m-Y', strtotime((string) $row->inv_date)) : '-') ?>remark_ipd ?? '-')) ?>case_credit ?? 0) > 0) ? 'CREDIT' : 'CASH' ?>net_amount ?? 0), 2)) ?>payment_balance ?? 0), 2)) ?> + Edit + PDF +
No org credit invoices found for this case.
+
+ +
+ Total Amount: + / Total Balance: +
+
+
+ + diff --git a/app/Views/medical/medicine_category_edit.php b/app/Views/medical/medicine_category_edit.php new file mode 100644 index 0000000..ff25214 --- /dev/null +++ b/app/Views/medical/medicine_category_edit.php @@ -0,0 +1,57 @@ +id ?? 0); + $medCatDesc = (string) ($row->med_cat_desc ?? ''); +} +?> + +
+
Medicine Category
+
+
+ +
+ + + +
+ + +
+ +
+ +
+
+
+
+ + diff --git a/app/Views/medical/medicine_category_master.php b/app/Views/medical/medicine_category_master.php new file mode 100644 index 0000000..117fa1f --- /dev/null +++ b/app/Views/medical/medicine_category_master.php @@ -0,0 +1,17 @@ +
+
+
+
Medicine Category Master
+ +
+ +
+
+
+ $med_product_cat_master ?? []]) ?> +
+
+
+
+
+
diff --git a/app/Views/medical/medicine_category_sub.php b/app/Views/medical/medicine_category_sub.php new file mode 100644 index 0000000..f730898 --- /dev/null +++ b/app/Views/medical/medicine_category_sub.php @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + +
Category NameAction
med_cat_desc ?? '') ?> + +
+ + diff --git a/app/Views/medical/merge_product.php b/app/Views/medical/merge_product.php new file mode 100644 index 0000000..ee1cff3 --- /dev/null +++ b/app/Views/medical/merge_product.php @@ -0,0 +1,152 @@ +
+
+
+
Product Merge
+ Back to Master +
+ + + +
+
+ + + +
+
+
+
+ +
+ + + +
+
+
+
+ +
+ +
+
+ +
+
Recent Product Merge Logs
+
+ + + + + + + + + + + + +
IDSummaryByAt
Loading...
+
+
+
+ + diff --git a/app/Views/medical/mini_invoice.php b/app/Views/medical/mini_invoice.php new file mode 100644 index 0000000..21b2db0 --- /dev/null +++ b/app/Views/medical/mini_invoice.php @@ -0,0 +1,130 @@ +
+
+
+
+
Already Created Today
+ Add New Invoice +
+ +
+ + + + + + + + + + + + + $inv): ?> + id ?? 0); + $editMeta = $invoiceEditMeta[$invId] ?? ['can_edit' => true, 'reason' => '']; + $canEditRow = !empty($editMeta['can_edit']); + $editReason = (string) ($editMeta['reason'] ?? 'Invoice is view-only.'); + ?> + + + + + + + + + + + + + + + + + +
#InvoiceDateNet AmountAction
inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invId, -7, 7), 7, '0', STR_PAD_LEFT))) ?>inv_date ?? '-') ?>net_amount ?? 0), 2)) ?> + + Edit + + Edit + +
+ + + + + + + + + + + + + + + $item): ?> + + + + + + + + + + + + + + + +
#ItemBatch/Exp.RateQtyNet Amt.
item_Name ?? '-') ?>batch_no ?? '-') ?> / expiry) ? date('m-Y', strtotime((string)$item->expiry)) : '-') ?>price ?? 0), 2)) ?>qty ?? 0), 2)) ?>twdisc_amount ?? $item->tamount ?? 0), 2)) ?>
No items in this invoice.
+
No invoice found for today.
+
+
+
+ + diff --git a/app/Views/medical/new_purchase_invoice.php b/app/Views/medical/new_purchase_invoice.php new file mode 100644 index 0000000..f5b595f --- /dev/null +++ b/app/Views/medical/new_purchase_invoice.php @@ -0,0 +1,60 @@ +
+
New Purchase Invoice
+
+
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + diff --git a/app/Views/medical/org_list.php b/app/Views/medical/org_list.php new file mode 100644 index 0000000..877c1b4 --- /dev/null +++ b/app/Views/medical/org_list.php @@ -0,0 +1,60 @@ +
+
+
ORG List
+ +
+ + + + + + + + + + + + + + org_id ?? 0); + $orgCode = (string) ($row->case_id_code ?? ('ORG-' . $orgId)); + ?> + + + + + + + + + + + + + + +
ORG CodeName / Patient CodeRegister DateInsurance CompanyAction
[p_code ?? '-') ?>] p_fname ?? '-') ?>p_rname) ? '
' . esc($row->p_rname) : '' ?>
str_register_date ?? '-') ?>insurance_company_name ?? '-') ?> + Open Invoices +
No active organization credit records found.
+
+
+
+ + diff --git a/app/Views/medical/patient_search_result.php b/app/Views/medical/patient_search_result.php new file mode 100644 index 0000000..4bb768a --- /dev/null +++ b/app/Views/medical/patient_search_result.php @@ -0,0 +1,41 @@ +
+
+
Result
+
+ + + + + + + + + + + + + + + $row): ?> + + + + + + + + + + + + + + + + +
Sr.No.Patient/UHID CodeNameAgeLast VisitPhone No.Action
{$codeField} ?? '-') : '-') ?>{$nameField} ?? '-') : '-') ?>{$ageField} ?? '-') : '-') ?>{$lastVisitField} ?? '-') : '-') ?>{$phoneField} ?? '-') : '-') ?> + Sale +
No patient records found.
+
+
+
diff --git a/app/Views/medical/payment_edit.php b/app/Views/medical/payment_edit.php new file mode 100644 index 0000000..d4c0d8f --- /dev/null +++ b/app/Views/medical/payment_edit.php @@ -0,0 +1,126 @@ + + +
+
+
Payment ID :
+ +
+
Invoice Type :
+
IPD/OPD No :
+
Invoice To :
+
Amount : Rs.
+
Mode of Payment. :
+
+ + + +
+
+
Payment Mode Correction
+
+
+ +
+ + +
+
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+
+ +
+
+
Change User
+
+
+
+ + +
+
+ +
+
+
+ +
+
+
Change/Correct Amount
+
+
+
+ + +
+
+ +
+
+
+
+
+ + diff --git a/app/Views/medical/payment_log.php b/app/Views/medical/payment_log.php new file mode 100644 index 0000000..8167787 --- /dev/null +++ b/app/Views/medical/payment_log.php @@ -0,0 +1,71 @@ +
+

Med. Payment Edit Logs Panel

+
+ +
+
+
+
+
+
+ + +
+
+ + + +
+
+ +
+
+
+ +
+
+
+
+ + diff --git a/app/Views/medical/payment_log_data.php b/app/Views/medical/payment_log_data.php new file mode 100644 index 0000000..c94054b --- /dev/null +++ b/app/Views/medical/payment_log_data.php @@ -0,0 +1,66 @@ + + +
+ Date Range: to + Total Logs: +
+ + +
No payment logs found for selected date range.
+ +
+ + + + + + + + + + + + + + + + + $row): ?> + + + + + + + + + + + + + + +
#Bill NoInvoice CodeBill TypeInsert Date TimeLog InsertUpdate LogAmount / New AmountLog TypeUpdate By
+
+ + + diff --git a/app/Views/medical/payment_search.php b/app/Views/medical/payment_search.php new file mode 100644 index 0000000..18bcb5b --- /dev/null +++ b/app/Views/medical/payment_search.php @@ -0,0 +1,113 @@ +
+
+
Med. Payment Edit
+ +
+
+ +
+ + diff --git a/app/Views/medical/placeholder.php b/app/Views/medical/placeholder.php new file mode 100644 index 0000000..42b22ee --- /dev/null +++ b/app/Views/medical/placeholder.php @@ -0,0 +1,8 @@ +
+
+
+ +
+
diff --git a/app/Views/medical/print_bill_on_uhid.php b/app/Views/medical/print_bill_on_uhid.php new file mode 100644 index 0000000..51a7309 --- /dev/null +++ b/app/Views/medical/print_bill_on_uhid.php @@ -0,0 +1,80 @@ +
+

Report Panel

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+ +
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/product_edit.php b/app/Views/medical/product_edit.php new file mode 100644 index 0000000..ca0732a --- /dev/null +++ b/app/Views/medical/product_edit.php @@ -0,0 +1,160 @@ +id ?? 0); +$selectedCatIds = array_map('intval', (array) ($selected_cat_ids ?? [])); + +$formulationValue = (string) ($product->formulation ?? ''); +$itemName = (string) ($product->item_name ?? ''); +$genericName = (string) ($product->genericname ?? ''); +$packing = (string) ($product->packing ?? ''); +$reOrderQty = (string) ($product->re_order_qty ?? ''); +$hsnCode = (string) ($product->HSNCODE ?? ''); +$cgst = (string) ($product->CGST_per ?? ''); +$sgst = (string) ($product->SGST_per ?? ''); +$rackNo = (string) ($product->rack_no ?? ''); +$shelfNo = (string) ($product->shelf_no ?? ''); +$coldStorage = (string) ($product->cold_storage ?? ''); +$companyId = (int) ($product->company_id ?? 0); +$relatedDrugId = (int) ($product->related_drug_id ?? 0); + +$flag = static function ($v): string { + return ((int) $v === 1) ? 'checked' : ''; +}; +?> + +
+
Product 0 ? '#' . $productId . '' : '' ?>
+
+
+ +
+ + + + +
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
ban_flag_id ?? 0) ?>>
+
batch_applicable ?? 0) ?>>
+
exp_date_applicable ?? 0) ?>>
+
is_continue ?? 0) ?>>
+
narcotic ?? 0) ?>>
+
schedule_h ?? 0) ?>>
+
schedule_h1 ?? 0) ?>>
+
schedule_x ?? 0) ?>>
+
schedule_g ?? 0) ?>>
+
high_risk ?? 0) ?>>
+
+
+ +
+ + +
+
+
+
+ + diff --git a/app/Views/medical/product_search_result.php b/app/Views/medical/product_search_result.php new file mode 100644 index 0000000..b55eed7 --- /dev/null +++ b/app/Views/medical/product_search_result.php @@ -0,0 +1,42 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + +
Prod. IDNameFormulationGeneric NamePacking TypeAction
id ?? 0) ?>item_name ?? '') ?>formulation ?? '') ?>genericname ?? '') ?>packing ?? '') ?> + +
+
+ + diff --git a/app/Views/medical/purchase_challan_list.php b/app/Views/medical/purchase_challan_list.php new file mode 100644 index 0000000..9b2e9e4 --- /dev/null +++ b/app/Views/medical/purchase_challan_list.php @@ -0,0 +1,32 @@ +
+ +

No challan items available for this supplier.

+ + + + + id ?? 0)): ?> + + + + + + + + + + + + + + + + + + + id ?? 0); ?> + + +
Challan No: Invoice_no ?? '')) ?> / Date: str_date_of_invoice ?? '')) ?> / Net Amount: tamount ?? 0)) ?>
Item NameQty + FreeMRPAdd
Item_name ?? '') ?>qty ?? 0)) ?> + qty_free ?? 0)) ?>mrp ?? 0)) ?>Add
+ +
diff --git a/app/Views/medical/purchase_invoice_edit.php b/app/Views/medical/purchase_invoice_edit.php new file mode 100644 index 0000000..f56b3f7 --- /dev/null +++ b/app/Views/medical/purchase_invoice_edit.php @@ -0,0 +1,428 @@ + + + + +
Purchase invoice not found.
+ +
+
+
Purchase Invoice Information
+ + Supplier: name_supplier ?? '-') ?> | + ischallan ?? 0) === 1) ? 'Challan No.' : 'Invoice No.' ?>: Invoice_no ?? '')) ?> | + Invoice Date: str_date_of_invoice ?? '')) ?> + + + +
+
+
+ + + +
+ + inv_status ?? 0) === 0): ?> +
+
+ + + +
+
+ + +
+
+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+
+ +
+
+
+
+
+
Select a product to view last 5 purchase orders.
+
+
+ +
+
+
+ + + diff --git a/app/Views/medical/purchase_invoice_item.php b/app/Views/medical/purchase_invoice_item.php new file mode 100644 index 0000000..b47d078 --- /dev/null +++ b/app/Views/medical/purchase_invoice_item.php @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + item_return ?? 0) === 1) ? 'style="color:red;"' : '' ?>> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#RecNoItem NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
id ?? 0) ?>Item_name ?? '') ?>batch_no ?? '') ?>exp_date_str ?? '') ?>mrp ?? 0)) ?>qty ?? 0)) ?> + qty_free ?? 0)) ?>purchase_price ?? 0)) ?>amount ?? 0)) ?>discount ?? 0)) ?>taxable_amount ?? 0)) ?>CGST_per ?? 0)) ?>SGST_per ?? 0)) ?>net_amount ?? 0)) ?> + inv_status ?? 0) === 0): ?> + + + old_purchase_id ?? 0) > 0): ?> + + + +
TotalTaxable_Amt ?? 0)) ?>CGST_Amt ?? 0)) ?>SGST_Amt ?? 0)) ?>T_Net_Amount ?? 0)) ?>
diff --git a/app/Views/medical/purchase_invoice_master_edit.php b/app/Views/medical/purchase_invoice_master_edit.php new file mode 100644 index 0000000..f0d1f81 --- /dev/null +++ b/app/Views/medical/purchase_invoice_master_edit.php @@ -0,0 +1,156 @@ +Purchase invoice not found.'; + return; +} + +$invStatus = (int) ($inv->inv_status ?? 0); +$canUpdatePurchaseStatus = (bool) ($can_update_purchase_status ?? false); +?> + +
+
Purchase Master Edit
+
+
+ + + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+ +
name_supplier ?? '-') ?>
+
+
+ +
Invoice_no ?? '')) ?>
+
+
+ +
date_of_invoice) ? esc(date('d/m/Y', strtotime((string) $inv->date_of_invoice))) : '' ?>
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + item_return ?? 0) === 1) ? 'style="color:red;"' : '' ?>> + + + + + + + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
Item_name ?? '') ?>batch_no ?? '') ?>expiry_date ?? '')) ?>mrp ?? 0)) ?>qty ?? 0)) ?>+qty_free ?? 0)) ?>purchase_price ?? 0)) ?>amount ?? 0)) ?>discount ?? 0)) ?>taxable_amount ?? 0)) ?>CGST_per ?? 0)) ?>SGST_per ?? 0)) ?>net_amount ?? 0)) ?>
TotalTaxable_Amt ?? 0)) ?>CGST_Amt ?? 0)) ?>SGST_Amt ?? 0)) ?>T_Net_Amount ?? 0)) ?>
+
+ +
+ +
+ +
+ + +
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+ + diff --git a/app/Views/medical/purchase_item_old.php b/app/Views/medical/purchase_item_old.php new file mode 100644 index 0000000..2616fcf --- /dev/null +++ b/app/Views/medical/purchase_item_old.php @@ -0,0 +1,39 @@ +Item_name ?? ''); +} +?> + + +

No purchase history found for selected product.

+ + +

Item : Last 5 Purchase Orders

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DateMRPQtyRateSCH/DiscP.U.RateSupplier/Invoice
date_of_invoice_str ?? '') ?>mrp ?? 0)) ?>qty ?? 0)) ?> + qty_free ?? 0)) ?>purchase_price ?? 0)) ?>sch_disc_per ?? 0)) ?> / discount ?? 0)) ?>purchase_unit_rate ?? 0)) ?>name_supplier ?? '-') . '/' . ($row->Invoice_no ?? '')) ?>
diff --git a/app/Views/medical/purchase_supp_list.php b/app/Views/medical/purchase_supp_list.php new file mode 100644 index 0000000..10ff1ed --- /dev/null +++ b/app/Views/medical/purchase_supp_list.php @@ -0,0 +1,57 @@ +
+ + + + + + + + + + + + + ischallan ?? 0) === 1) ? 'style="color:red;"' : '' ?>> + + + + + + + + +
Invoice IDSupplierDateAmountAction
Invoice_no ?? '')) ?>name_supplier ?? '') ?>str_date_of_invoice ?? $row->date_of_invoice ?? '')) ?>tamount ?? 0)) ?> + + tamount ?? 0) == 0.0): ?> + + +
+
+ + diff --git a/app/Views/medical/purchase_supplier_list.php b/app/Views/medical/purchase_supplier_list.php new file mode 100644 index 0000000..3ea5f6b --- /dev/null +++ b/app/Views/medical/purchase_supplier_list.php @@ -0,0 +1,27 @@ +
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ + diff --git a/app/Views/medical/report_company_med_sale.php b/app/Views/medical/report_company_med_sale.php new file mode 100644 index 0000000..709f951 --- /dev/null +++ b/app/Views/medical/report_company_med_sale.php @@ -0,0 +1,108 @@ +
+

Company Wise Medicine Sale Report

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_company_med_sale_data.php b/app/Views/medical/report_company_med_sale_data.php new file mode 100644 index 0000000..2fe0429 --- /dev/null +++ b/app/Views/medical/report_company_med_sale_data.php @@ -0,0 +1,114 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + + $row): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Item CodeItem NameSale QtySale AmtPur. AmtSale GSTReturn QtyReturn AmtReturn Pur. Amt
No records found for selected filters.
#Total SaleTotal Return
+
+ +
Total Margin (Sale - Purchase - Return + ReturnPurchase - NetGST): Rs.
+
Net GST = Sale GST () - Return GST ()
+ + + + diff --git a/app/Views/medical/report_daily_med_sale.php b/app/Views/medical/report_daily_med_sale.php new file mode 100644 index 0000000..2a2bdf6 --- /dev/null +++ b/app/Views/medical/report_daily_med_sale.php @@ -0,0 +1,99 @@ +
+

Daily Medicine Sale Report

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_daily_med_sale_data.php b/app/Views/medical/report_daily_med_sale_data.php new file mode 100644 index 0000000..a93f539 --- /dev/null +++ b/app/Views/medical/report_daily_med_sale_data.php @@ -0,0 +1,117 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + $row): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Item CodeItem NameSale QtySale AmtPur. AmtSale GSTReturn QtyReturn AmtReturn Pur. AmtCur.Qty
No records found for selected date range.
#Total SaleTotal Return
+
+ +
Total Margin (Sale - Purchase - Return + ReturnPurchase - NetGST): Rs.
+
Net GST = Sale GST () - Return GST ()
+ + + + diff --git a/app/Views/medical/report_daily_med_sale_doc.php b/app/Views/medical/report_daily_med_sale_doc.php new file mode 100644 index 0000000..ff72df2 --- /dev/null +++ b/app/Views/medical/report_daily_med_sale_doc.php @@ -0,0 +1,109 @@ +
+

Daily Medicine Sale Report

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_daily_med_sale_doc_data.php b/app/Views/medical/report_daily_med_sale_doc_data.php new file mode 100644 index 0000000..ef6a252 --- /dev/null +++ b/app/Views/medical/report_daily_med_sale_doc_data.php @@ -0,0 +1,104 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + $row): ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Doc. NameItem CodeItem NameSale QtySale AmtPur. AmtSale GSTCur.Qty
No records found for selected filters.
#Total Sale
+
+ +
Total Margin (Sale - Purchase - SaleGST): Rs.
+ + + + diff --git a/app/Views/medical/report_gst_invoice_hsn_data.php b/app/Views/medical/report_gst_invoice_hsn_data.php new file mode 100644 index 0000000..45ba1cb --- /dev/null +++ b/app/Views/medical/report_gst_invoice_hsn_data.php @@ -0,0 +1,65 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HSN CodeItem QtyTax Per.Tot.Amt.Tot.Tax.AmtTax.Amt.5%CGST 2.5%SGST 2.5%Tax.Amt.12%CGST 6%SGST 6%Tax.Amt.18%CGST 9%SGST 9%Tax.Amt.28%CGST 14%SGST 14%Tax.Amt.0%
No records found.
+
diff --git a/app/Views/medical/report_gst_invoice_list.php b/app/Views/medical/report_gst_invoice_list.php new file mode 100644 index 0000000..eabb520 --- /dev/null +++ b/app/Views/medical/report_gst_invoice_list.php @@ -0,0 +1,144 @@ +
+

GST Invoice List Panel

+
+ +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + +
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_gst_invoice_list_data.php b/app/Views/medical/report_gst_invoice_list_data.php new file mode 100644 index 0000000..2450ca7 --- /dev/null +++ b/app/Views/medical/report_gst_invoice_list_data.php @@ -0,0 +1,69 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice IDInv.DateInv.NameInvoice TypeQtyTot.Amt.Tot.Tax.AmtTax.Amt.5%CGST 2.5%SGST 2.5%Tax.Amt.12%CGST 6%SGST 6%Tax.Amt.18%CGST 9%SGST 9%Tax.Amt.28%CGST 14%SGST 14%Tax.Amt.0%
No records found.
+
diff --git a/app/Views/medical/report_gst_sale.php b/app/Views/medical/report_gst_sale.php new file mode 100644 index 0000000..8d9c7b2 --- /dev/null +++ b/app/Views/medical/report_gst_sale.php @@ -0,0 +1,132 @@ +
+

Sale GST Report Panel

+
+ +
+
+
+ +
+ `H_Med_GST` is empty. Please set GSTIN in constants before using GSTR1 JSON export. +
+ + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+
+ + + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_gst_sale_data.php b/app/Views/medical/report_gst_sale_data.php new file mode 100644 index 0000000..36883e1 --- /dev/null +++ b/app/Views/medical/report_gst_sale_data.php @@ -0,0 +1,54 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#CGST PerT. CGSTSGST PerT. SGSTTotal GSTTaxable AmountAmountItem Qty
Grand Total :' : esc((string) ($row['cgst_per'] ?? '-')) ?>
No records found.
+
diff --git a/app/Views/medical/report_gst_sale_data_pdf.php b/app/Views/medical/report_gst_sale_data_pdf.php new file mode 100644 index 0000000..d1cc48f --- /dev/null +++ b/app/Views/medical/report_gst_sale_data_pdf.php @@ -0,0 +1,70 @@ + + + + + + + + +
Sale GST Report
+
Date range: to
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#CGST PerT. CGSTSGST PerT. SGSTTotal GSTTaxable AmountAmountItem Qty
No records found.
+ + diff --git a/app/Views/medical/report_ipd_credit.php b/app/Views/medical/report_ipd_credit.php new file mode 100644 index 0000000..60fda88 --- /dev/null +++ b/app/Views/medical/report_ipd_credit.php @@ -0,0 +1,116 @@ +
+

IPD Invoice Panel

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_ipd_credit_data.php b/app/Views/medical/report_ipd_credit_data.php new file mode 100644 index 0000000..db8e9fa --- /dev/null +++ b/app/Views/medical/report_ipd_credit_data.php @@ -0,0 +1,115 @@ + (string) ($row['ipd_code'] ?? '-'), + 'patient_code' => (string) ($row['patient_code'] ?? '-'), + 'patient_name' => (string) ($row['patient_name'] ?? '-'), + 'tpa_name' => (string) ($row['tpa_name'] ?? '-'), + 'items' => [], + 'subtotal' => 0.0, + ]; + } + + $amount = (float) ($row['ipd_total_amount'] ?? 0); + $grouped[$ipdId]['items'][] = $row; + $grouped[$ipdId]['subtotal'] += $amount; + $grandTotal += $amount; +} +?> + + +
Discharge date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient CodePatient NameTPA Name
Inv.No.Inv.DateAmountType
Total
Grand Total
No records found for selected filters.
+
+ + + + diff --git a/app/Views/medical/report_ipd_discharge.php b/app/Views/medical/report_ipd_discharge.php new file mode 100644 index 0000000..d4bd7b3 --- /dev/null +++ b/app/Views/medical/report_ipd_discharge.php @@ -0,0 +1,103 @@ +
+

IPD Discharge Report Panel

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_ipd_discharge_data.php b/app/Views/medical/report_ipd_discharge_data.php new file mode 100644 index 0000000..74becc2 --- /dev/null +++ b/app/Views/medical/report_ipd_discharge_data.php @@ -0,0 +1,100 @@ + + +
Date range: to
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient CodePatient NameAdmit Dt.Discharge Dt.TPA NameCashPaid Amt.Cash BalanceCreditPackage
No discharged IPD records found for selected date range.
Total
+
+ + diff --git a/app/Views/medical/report_ipd_sale.php b/app/Views/medical/report_ipd_sale.php new file mode 100644 index 0000000..d7836ce --- /dev/null +++ b/app/Views/medical/report_ipd_sale.php @@ -0,0 +1,103 @@ +
+

IPD Invoice Panel

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_ipd_sale_data.php b/app/Views/medical/report_ipd_sale_data.php new file mode 100644 index 0000000..d23d657 --- /dev/null +++ b/app/Views/medical/report_ipd_sale_data.php @@ -0,0 +1,123 @@ + 0.0, + 'credit' => 0.0, + 'package' => 0.0, + 'total' => 0.0, +]; + +foreach ($rows as $row) { + $ipdId = (string) ($row['ipd_id'] ?? '0'); + if (!isset($grouped[$ipdId])) { + $grouped[$ipdId] = [ + 'ipd_code' => (string) ($row['ipd_code'] ?? '-'), + 'patient_code' => (string) ($row['patient_code'] ?? '-'), + 'patient_name' => (string) ($row['patient_name'] ?? '-'), + 'tpa_name' => (string) ($row['tpa_name'] ?? '-'), + 'items' => [], + ]; + } + + $grouped[$ipdId]['items'][] = $row; + $totals['cash'] += (float) ($row['ipd_cash_amount'] ?? 0); + $totals['credit'] += (float) ($row['ipd_credit_amount'] ?? 0); + $totals['package'] += (float) ($row['ipd_package_amount'] ?? 0); + $totals['total'] += (float) ($row['ipd_total_amount'] ?? 0); +} +?> + + +
Discharge date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient CodePatient NameTPA Name
Inv.No.Inv.DateCashCreditPackageTotal
IPD Total
No records found for selected date range.
+
+ + + + diff --git a/app/Views/medical/report_med_patient.php b/app/Views/medical/report_med_patient.php new file mode 100644 index 0000000..f04f9af --- /dev/null +++ b/app/Views/medical/report_med_patient.php @@ -0,0 +1,154 @@ +
+

Report Drug Sale to Patient Panel

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_med_patient_data.php b/app/Views/medical/report_med_patient_data.php new file mode 100644 index 0000000..0e4081e --- /dev/null +++ b/app/Views/medical/report_med_patient_data.php @@ -0,0 +1,81 @@ + (string) ($row['shed_x_h'] ?? ''), + 'rows' => [], + 'total_qty' => 0.0, + ]; + } + + $qty = (float) ($row['t_qty'] ?? 0); + $groups[$itemName]['rows'][] = $row; + $groups[$itemName]['total_qty'] += $qty; + + if ($groups[$itemName]['head'] === '' && !empty($row['shed_x_h'])) { + $groups[$itemName]['head'] = (string) $row['shed_x_h']; + } +} +?> + +
+ Date Range: to + Total Items: +
+ + +
No records found for selected filters.
+ +
+ + + + + + + + + + + + + + $group): ?> + + + + + + + + + + + + + + + + + + + + +
Inv.No.Inv.DateIPD No.P Code/NameExp. DateBatchQty
+ + + [ ] + +
/
Total Qty ()
+
+ diff --git a/app/Views/medical/report_med_patient_pdf.php b/app/Views/medical/report_med_patient_pdf.php new file mode 100644 index 0000000..01da6dd --- /dev/null +++ b/app/Views/medical/report_med_patient_pdf.php @@ -0,0 +1,114 @@ + (string) ($row['shed_x_h'] ?? ''), + 'rows' => [], + 'total_qty' => 0.0, + ]; + } + + $qty = (float) ($row['t_qty'] ?? 0); + $groups[$itemName]['rows'][] = $row; + $groups[$itemName]['total_qty'] += $qty; + + if ($groups[$itemName]['head'] === '' && !empty($row['shed_x_h'])) { + $groups[$itemName]['head'] = (string) $row['shed_x_h']; + } +} + +$pharmacyName = defined('M_store') ? (string) M_store : 'Medical Store'; +?> + + + + + + + +
+
Drug Sale Customer Wise Report
+
+ Date Range: to + + | Drug/Batch: + + + | Schedule Filter: + + | Total Items: +
+ + + + +
No records found for selected filters.
+ + + + + + + + + + + + + + + $group): ?> + + + + + + + + + + + + + + + + + + + + +
Inv.No.Inv.DateIPD No.P Code/NameExp. DateBatchQty
+ + + [ ] + +
/
Total Qty ()
+ + +
Generated on
+ + diff --git a/app/Views/medical/report_org_bills.php b/app/Views/medical/report_org_bills.php new file mode 100644 index 0000000..563f9db --- /dev/null +++ b/app/Views/medical/report_org_bills.php @@ -0,0 +1,113 @@ +
+

Org. Invoice Panel

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_org_bills_data.php b/app/Views/medical/report_org_bills_data.php new file mode 100644 index 0000000..7638bde --- /dev/null +++ b/app/Views/medical/report_org_bills_data.php @@ -0,0 +1,79 @@ + + + +
Invoice date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Inv. IDOrg.CodeP CodeP NameAmountOrg. Name
Total
No records found for selected filters.
+
+ + + + diff --git a/app/Views/medical/report_purchase_invoice.php b/app/Views/medical/report_purchase_invoice.php new file mode 100644 index 0000000..0d65314 --- /dev/null +++ b/app/Views/medical/report_purchase_invoice.php @@ -0,0 +1,233 @@ +
+

Report Purchase Invoice Panel

+
+ +
+
+
+ +
+ `H_Med_GST` is empty. Please set GSTIN in constants before using GSTR-2B/GSTR-3B export. +
+ + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_purchase_invoice_data.php b/app/Views/medical/report_purchase_invoice_data.php new file mode 100644 index 0000000..e7e445a --- /dev/null +++ b/app/Views/medical/report_purchase_invoice_data.php @@ -0,0 +1,108 @@ +' + . '#' + . 'Total of : ' . esc($supplierName) . '' + . '' . esc(number_format($taxable, 2)) . '' + . '' . esc(number_format($gst, 2)) . '' + . '' . esc(number_format($amount, 0, '.', '')) . '' + . ''; +}; +?> + +
+ Date: to +
+ +
+ + + + + + + '; + } + + $currentSupplier = $supplierName; + $currentGst = $gstNo; + $currentState = $state; + $supplierSr = 0; + $supplierTaxable = 0.0; + $supplierGst = 0.0; + $supplierAmount = 0.0; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_
_
/ GST No. / State :
#Purchase. Inv. IDInv. DateTaxable AmtTax AmtInv. Amount
#Grand Total
+
diff --git a/app/Views/medical/report_purchase_invoice_data_gst.php b/app/Views/medical/report_purchase_invoice_data_gst.php new file mode 100644 index 0000000..fbec376 --- /dev/null +++ b/app/Views/medical/report_purchase_invoice_data_gst.php @@ -0,0 +1,66 @@ + +
+ Date: to +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#InvoiceSupplierDateTaxable AmtGST AmtInv Amount0%5%12%18%28%CGSTSGST/IGST
Total
+
diff --git a/app/Views/medical/report_purchase_invoice_data_gst_pdf.php b/app/Views/medical/report_purchase_invoice_data_gst_pdf.php new file mode 100644 index 0000000..6a8e11d --- /dev/null +++ b/app/Views/medical/report_purchase_invoice_data_gst_pdf.php @@ -0,0 +1,108 @@ + + + + + + + + +
Purchase Invoice GST Rate Report
+
Date: to
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#InvoiceSupplierDateTaxableGSTAmount0%5%12%18%28%CGSTSGST/IGST
Total
+ + diff --git a/app/Views/medical/report_purchase_invoice_data_pdf.php b/app/Views/medical/report_purchase_invoice_data_pdf.php new file mode 100644 index 0000000..dc09120 --- /dev/null +++ b/app/Views/medical/report_purchase_invoice_data_pdf.php @@ -0,0 +1,118 @@ +' + . '#' + . 'Total of : ' . esc($supplierName) . '' + . '' . esc(number_format($taxable, 2)) . '' + . '' . esc(number_format($gst, 2)) . '' + . '' . esc(number_format($amount, 0, '.', '')) . '' + . ''; +}; +?> + + + + + + + +
Purchase Invoice Report
+
Date: to
+ + + + + + '; + } + + $currentSupplier = $supplierName; + $currentGst = $gstNo; + $currentState = $state; + $supplierSr = 0; + $supplierTaxable = 0.0; + $supplierGst = 0.0; + $supplierAmount = 0.0; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_
_
/ GST No. / State :
#Purchase. Inv. IDInv. DateTaxable AmtTax AmtInv. Amount
#Grand Total
+ + diff --git a/app/Views/medical/report_short_medicine.php b/app/Views/medical/report_short_medicine.php new file mode 100644 index 0000000..90174e2 --- /dev/null +++ b/app/Views/medical/report_short_medicine.php @@ -0,0 +1,119 @@ +
+

Medicine Short Report

+
+ +
+
+
+
+
+ + +
+
+ + + +
+
+ + +
Blank = All formulations
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/medical/report_short_medicine_data.php b/app/Views/medical/report_short_medicine_data.php new file mode 100644 index 0000000..1cae003 --- /dev/null +++ b/app/Views/medical/report_short_medicine_data.php @@ -0,0 +1,69 @@ + + + +
Date range: to
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDDateItem NameFormulationQtySupplier
No records found for selected filters.
+
+ + + + diff --git a/app/Views/medical/search_customer.php b/app/Views/medical/search_customer.php new file mode 100644 index 0000000..af64d2e --- /dev/null +++ b/app/Views/medical/search_customer.php @@ -0,0 +1,62 @@ +
+
+
OPD Sale - Patient Search
+ +
+ +
+ +
+
+ + New Counter Sale +
+
+
+
+
+ + diff --git a/app/Views/medical/stock_statement.php b/app/Views/medical/stock_statement.php new file mode 100644 index 0000000..a0fde10 --- /dev/null +++ b/app/Views/medical/stock_statement.php @@ -0,0 +1,109 @@ + + +
+
+
+
Item Stock Statement
+ Back to Master +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+
+ + diff --git a/app/Views/medical/stock_statement_data.php b/app/Views/medical/stock_statement_data.php new file mode 100644 index 0000000..28f0c65 --- /dev/null +++ b/app/Views/medical/stock_statement_data.php @@ -0,0 +1,100 @@ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NamePur Pak.Pur CostCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order Qty
item_name ?? '') ?>total_pak_qty ?? 0), 2)) ?>purchase_cost ?? 0), 2)) ?>C_Pak_Qty ?? 0), 2)) ?>C_Unit_Stock_Qty ?? 0), 2)) ?>C_Pak_Sale_Qty ?? 0), 2)) ?>sale_unit ?? 0), 2)) ?>total_lost_unit ?? 0), 2)) ?>packing ?? 0)) ?>/re_order_qty ?? 0)) ?>
+
+ + diff --git a/app/Views/medical/stock_transfer.php b/app/Views/medical/stock_transfer.php new file mode 100644 index 0000000..dfabe2a --- /dev/null +++ b/app/Views/medical/stock_transfer.php @@ -0,0 +1,174 @@ +
+
+
+
Purchase Item Transfer
+ Back to Master +
+ + + +
+
+ + + + +
+
+
+
+ +
+ + + + +
+
+
+
+ +
+ + +
+
+ +
+
+ +
+
Recent Transfer Logs
+
+ + + + + + + + + + + + +
IDSummaryByAt
Loading...
+
+
+
+ + diff --git a/app/Views/medical/store_stock_result.php b/app/Views/medical/store_stock_result.php new file mode 100644 index 0000000..94119c1 --- /dev/null +++ b/app/Views/medical/store_stock_result.php @@ -0,0 +1,478 @@ + 0, 'd0_30' => 0, 'd31_60' => 0, 'd61_90' => 0]; +$topSaleRows = $top_sale_rows ?? []; +$topSaleLabels = $top_sale_labels ?? []; +$topSaleValues = $top_sale_values ?? []; +$ratioRows = $ratio_rows ?? []; +$ratioLabels = $ratio_labels ?? []; +$ratioValues = $ratio_values ?? []; +?> + +
+
+
+
Total Items
+
+
+
+
+
+
Low Stock Items
+
+
+
+
+ +
+
+
Pharmacy Stock Graph (Top 10 by Current Unit Qty)
+
+ +
+
+
+ +
+
+
+
Expired Units
+
+
+
+
+
+
Due 0-30 Days
+
+
+
+
+
+
Due 31-60 Days
+
+
+
+
+
+
Due 61-90 Days
+
+
+
+
+ +
+
+
Near Expiry Graph (Current Units)
+
+ +
+
+
+ +
+
+
+
+
Highest Sale Medicines (Last 30 Days)
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
MedicineSale Qty (30d)
No sale data found for last 30 days.
+
+
+
+
+ +
+
+
+
High Stock / Low Sale Ratio
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
MedicineCurrent StockSale Qty (30d)Ratio
No stock ratio data found.
+
+
+
+
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NameGeneric NameCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order Qty
item_name ?? '') ?>genericname ?? '') ?>C_Pak_Qty ?? 0)) ?>C_Unit_Stock_Qty ?? 0), 2)) ?>C_Pak_Sale_Qty ?? 0), 2)) ?>sale_unit ?? 0), 2)) ?>total_lost_unit ?? 0), 2)) ?>packing ?? 0)) ?>/re_order_qty ?? 0)) ?>
No stock items found for selected filters.
+
+ + diff --git a/app/Views/medical/store_stock_search.php b/app/Views/medical/store_stock_search.php new file mode 100644 index 0000000..3e3ae98 --- /dev/null +++ b/app/Views/medical/store_stock_search.php @@ -0,0 +1,146 @@ +
+
+
+
Store Stock : Pharmacy
+ Datewise Statement +
+ +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+ +
+ + + + +
+
+
+ +
+
+
+ + diff --git a/app/Views/medical/supplier_account.php b/app/Views/medical/supplier_account.php new file mode 100644 index 0000000..a5ccd53 --- /dev/null +++ b/app/Views/medical/supplier_account.php @@ -0,0 +1,51 @@ +
+
+
+
Supplier List
+ Back to Master +
+ +
+ + + + + + + + + + + + + Tot_Balance ?? 0); ?> + + + + + + + + + +
NameBalanceLast Inv. DateLast Payment Date
name_supplier ?? '') ?> Dr' : 'Cr' ?>Last_InvDate ?? '') ?>Last_Payment ?? '') ?> + Open +
+
+
+
+ + diff --git a/app/Views/medical/supplier_account_add_entry.php b/app/Views/medical/supplier_account_add_entry.php new file mode 100644 index 0000000..865b046 --- /dev/null +++ b/app/Views/medical/supplier_account_add_entry.php @@ -0,0 +1,51 @@ + + + +
+ + +
+ + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
diff --git a/app/Views/medical/supplier_account_detail.php b/app/Views/medical/supplier_account_detail.php new file mode 100644 index 0000000..c5a4aae --- /dev/null +++ b/app/Views/medical/supplier_account_detail.php @@ -0,0 +1,256 @@ +sid ?? 0); +$today = date('Y-m-d'); +$defaultDateFrom = (string) ($default_date_from ?? $today); +$defaultDateTo = (string) ($default_date_to ?? $today); +?> + +
+
+
+
+ Ledger Account: name_supplier ?? '-') ?> + Balance: Tot_Balance ?? 0), 2)) ?> +
+
+ + Back to List +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+ + + + diff --git a/app/Views/medical/supplier_account_edit_entry.php b/app/Views/medical/supplier_account_edit_entry.php new file mode 100644 index 0000000..fa1dff3 --- /dev/null +++ b/app/Views/medical/supplier_account_edit_entry.php @@ -0,0 +1,52 @@ + + + +
+ + +
+ + + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
diff --git a/app/Views/medical/supplier_account_ledger_data.php b/app/Views/medical/supplier_account_ledger_data.php new file mode 100644 index 0000000..cca5668 --- /dev/null +++ b/app/Views/medical/supplier_account_ledger_data.php @@ -0,0 +1,35 @@ +
+ Opening Balance: + | Total Credit: + | Total Debit: + | Closing Balance: +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
IDDate TranDescriptionCreditDebitActions
tran_date) ? date('d-m-Y', strtotime((string) $row->tran_date)) : '') ?>mode_desc ?? '') . ' ' . ($row->tran_desc ?? '')))) ?>credit_debit ?? 0) === 0 ? esc(number_format((float) ($row->amount ?? 0), 2)) : '' ?>credit_debit ?? 0) === 1 ? esc(number_format((float) ($row->amount ?? 0), 2)) : '' ?> + +
+
diff --git a/app/Views/medical/supplier_account_ledger_pdf.php b/app/Views/medical/supplier_account_ledger_pdf.php new file mode 100644 index 0000000..3e30cef --- /dev/null +++ b/app/Views/medical/supplier_account_ledger_pdf.php @@ -0,0 +1,119 @@ + + + + + Supplier Ledger + + + + + +
+
+
+
+ + Phone: + + | + + GST No.: + +
+
+ +

Supplier Ledger: name_supplier ?? '-') ?>

+ {$addrField} ?? '')) { + $supplierAddress = trim((string) $supplier->{$addrField}); + break; + } + } + + $supplierCity = trim((string) ($supplier->city ?? '')); + $supplierState = trim((string) ($supplier->state ?? '')); + $supplierPhone = trim((string) ($supplier->contact_no ?? '')); + $supplierGst = trim((string) ($supplier->gst_no ?? '')); + + $supplierAddressLine = $supplierAddress; + if ($supplierCity !== '') { + $supplierAddressLine .= ($supplierAddressLine !== '' ? ', ' : '') . $supplierCity; + } + if ($supplierState !== '') { + $supplierAddressLine .= ($supplierAddressLine !== '' ? ', ' : '') . $supplierState; + } + ?> +
+ + Supplier Address:
+ + + Supplier Phone: + + | + + Supplier GST No.: + +
+
Date Range: to
+ +
+ Opening Balance: + | Total Credit: + | Total Debit: + | Closing Balance: +
+ + + + + + + + + + + + + + + + + + + + + + +
#Date TranDescriptionCreditDebit
tran_date) ? date('d-m-Y', strtotime((string) $row->tran_date)) : '') ?>mode_desc ?? '') . ' ' . ($row->tran_desc ?? '')))) ?>credit_debit ?? 0) === 0 ? esc(number_format((float) ($row->amount ?? 0), 2)) : '' ?>credit_debit ?? 0) === 1 ? esc(number_format((float) ($row->amount ?? 0), 2)) : '' ?>
+ + diff --git a/app/Views/medical/supplier_edit.php b/app/Views/medical/supplier_edit.php new file mode 100644 index 0000000..e5da5bb --- /dev/null +++ b/app/Views/medical/supplier_edit.php @@ -0,0 +1,103 @@ +sid ?? 0); + $nameSupplier = (string) ($row->name_supplier ?? ''); + $shortName = (string) ($row->short_name ?? ''); + $contactNo = (string) ($row->contact_no ?? ''); + $gstNo = (string) ($row->gst_no ?? ''); + $city = (string) ($row->city ?? ''); + $state = (string) ($row->state ?? ''); + $active = (int) ($row->active ?? 1); +} +?> + +
+
Supplier
+
+
+ +
+ + + +
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+ +
+ + +
+
+ + +
+ +
+
+ > + +
+
+ +
+ +
+
+
+
+ + diff --git a/app/Views/medical/supplier_master.php b/app/Views/medical/supplier_master.php new file mode 100644 index 0000000..2d4f773 --- /dev/null +++ b/app/Views/medical/supplier_master.php @@ -0,0 +1,17 @@ +
+
+
+
Supplier Master
+ +
+ +
+
+
+ $supplier_data ?? []]) ?> +
+
+
+
+
+
diff --git a/app/Views/medical/supplier_master_sub.php b/app/Views/medical/supplier_master_sub.php new file mode 100644 index 0000000..f5f337c --- /dev/null +++ b/app/Views/medical/supplier_master_sub.php @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?? '') ?>gst_no ?? '') ?> + +
+ + diff --git a/app/Views/medical/uhid_report_pdf.php b/app/Views/medical/uhid_report_pdf.php new file mode 100644 index 0000000..997d560 --- /dev/null +++ b/app/Views/medical/uhid_report_pdf.php @@ -0,0 +1,155 @@ + 0, 'paid' => 0, 'balance' => 0]; + +$pharmacyName = defined('M_store') ? (string) M_store : 'Medical Store'; +$pharmacyAddress = defined('M_address') ? (string) M_address : ''; +$pharmacyPhone = defined('M_Phone_Number') ? (string) M_Phone_Number : ''; +$pharmacyGst = defined('H_Med_GST') ? (string) H_Med_GST : ''; + +$patientName = (string) ($patient->p_fname ?? '-'); +$patientCode = (string) ($patient->p_code ?? $searchUhid ?: '-'); +?> + + + + + + + +
+
+ + | Phone: + | GST:
+ Print Bill on UHID | Date Range: to | UHID: | Patient: +
+ + + + +
No record found.
+ + + id ?? 0); + $invoiceCode = (string) ($invoice->inv_med_code ?? ('M' . date('ym') . str_pad(substr((string) $invoiceId, -7, 7), 7, '0', STR_PAD_LEFT))); + $invoiceDate = !empty($invoice->inv_date) ? date('d-m-Y', strtotime((string) $invoice->inv_date)) : '-'; + $docName = trim((string) ($invoice->doc_name ?? '-')); + $itemRows = $itemsByInvoice[$invoiceId] ?? []; + $paymentRows = $paymentsByInvoice[$invoiceId] ?? []; + ?> + +
Invoice: | Date: | Doctor:
+ + + + + + + + + + + + + + + + + + + + + $item): ?> + amount ?? 0); + $disc = (float) (($item->disc_amount ?? 0) + ($item->disc_whole ?? 0)); + $net = (float) ($item->twdisc_amount ?? $item->tamount ?? $gross); + $cgst = (float) ($item->CGST ?? 0); + $sgst = (float) ($item->SGST ?? 0); + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
#Item NameBatchExp.QtyRateGrossDisc.Inc. GSTNet
No items
item_Name ?? $item->item_name ?? '-') . ' ' . ($item->formulation ?? '')))) ?>batch_no ?? '-')) ?>expiry) ? date('m-Y', strtotime((string) $item->expiry)) : '-') ?>qty ?? 0), 2)) ?>price ?? 0), 2)) ?>
Invoice Totalgross_amount ?? 0), 2)) ?>disc_amount ?? 0) + ($invoice->discount_amount ?? 0)), 2)) ?>CGST_Tamount ?? 0) + ($invoice->SGST_Tamount ?? 0)), 2)) ?>net_amount ?? 0), 2)) ?>
+ + + + + + +
Payment Details: + + payment_mode ?? 1) === 2) ? 'Bank Card' : 'Cash'; + if ((int) ($pay->payment_mode ?? 0) > 2) { + $mode = 'Other'; + } + if ((int) ($pay->credit_debit ?? 0) > 0) { + $mode .= ' Return'; + } + ?> + [id ?? '-')) ?>::amount ?? 0), 2)) ?>] + +
+ + +
+ + + + + + + + + + + + + +
Total Net AmountPaid AmountBalance Amount
+ + + diff --git a/app/Views/org_packing/cases_list.php b/app/Views/org_packing/cases_list.php new file mode 100644 index 0000000..6d08eee --- /dev/null +++ b/app/Views/org_packing/cases_list.php @@ -0,0 +1,66 @@ + +
+ No cases added to this packing yet. Use the search above to add cases. +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sr.Case CodeUHIDPatient NameAgeTypeInsurance Co.Insurance NoAction
case_id_code) ?>p_code) ?>p_fname) ?>age) ?> + ipd_opd == 'OPD'): ?> + OPD + + IPD + + insurance_company_name) ?> + insurance_no) ?> + insurance_no_1)): ?> +
insurance_no_1) ?> + +
+ +
+ Total Cases: +
+
+ diff --git a/app/Views/org_packing/create.php b/app/Views/org_packing/create.php new file mode 100644 index 0000000..8b434fe --- /dev/null +++ b/app/Views/org_packing/create.php @@ -0,0 +1,122 @@ + + + + Create New Packing + + + + + +
+
+
+
+
+
+ Create New Packing +
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + + Cancel + +
+
+
+
+
+
+
+
+ + + + + + diff --git a/app/Views/org_packing/edit.php b/app/Views/org_packing/edit.php new file mode 100644 index 0000000..5765cd5 --- /dev/null +++ b/app/Views/org_packing/edit.php @@ -0,0 +1,231 @@ + + + + Edit Packing + + + + + + + +
+
+
+
+
+
+ Edit Packing: label_no) ?> +
+
+
+ +
+
Packing Details
+
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + + Back to List + + + Print List + +
+
+
+ +
+ + +
+
Add Cases to Packing
+
+ +
+
+ + +
+
+ +
+
+ +
+ + +
+
Cases in this Packing
+
+ +
+ $cases, 'packing_id' => $packing_id]) ?> +
+
+
+
+
+
+ + + + + + + diff --git a/app/Views/org_packing/index.php b/app/Views/org_packing/index.php new file mode 100644 index 0000000..973215e --- /dev/null +++ b/app/Views/org_packing/index.php @@ -0,0 +1,130 @@ + + + + Organization Packing Management + + + + + +
+
+
+
+
+
+ Organization Packing Management +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ +
+
+ Enter search term or leave blank to show recent packings +
+
+
+
+
+
+
+ + + + + + diff --git a/app/Views/org_packing/print_ipd.php b/app/Views/org_packing/print_ipd.php new file mode 100644 index 0000000..a40bf4f --- /dev/null +++ b/app/Views/org_packing/print_ipd.php @@ -0,0 +1,137 @@ + + + + IPD Packing List - <?= esc($packing->label_no) ?> + + + + +
+ +
+ + +
+ + +
+

IPD TPA PACKING LIST

+

Label No: label_no) ?> | + Date: date_of_create)) ?>

+
+ + +
+
+
+ Total Cases: +
+
+ Type: IPD TPA Cases +
+
+
+ + + + + + + + + + + + + + + + + + + + claim_amt; + ?> + + + + + + + + + + + + + + + + + + + + +
Sr.Case CodeIPD CodeUHIDPatient NameAgeAdmit DateDischarge DateInsurance NoClaim Amount
case_id_code) ?>ipd_code ?? '-') ?>p_code) ?>p_fname) ?>age) ?>admit_date ?? '-') ?>discharge_date ?? '-') ?> + insurance_no) ?> + insurance_no_1)): ?> +
insurance_no_1) ?> + +
claim_amt, 2) ?>
Total Claim Amount:
+ +
No cases in this packing
+ + + +
+
+ Prepared By
+ +
+
+ Verified By +
+
+ Approved By +
+
+
+ + + + diff --git a/app/Views/org_packing/print_opd.php b/app/Views/org_packing/print_opd.php new file mode 100644 index 0000000..212060e --- /dev/null +++ b/app/Views/org_packing/print_opd.php @@ -0,0 +1,133 @@ + + + + OPD Packing List - <?= esc($packing->label_no) ?> + + + + +
+ +
+ + +
+ + +
+

OPD ORGANIZATION PACKING LIST

+

Label No: label_no) ?> | + Date: date_of_create)) ?>

+
+ + +
+
+
+ Total Cases: +
+
+ Type: OPD Organization Cases +
+
+
+ + + + + + + + + + + + + + + + + + claim_amt; + ?> + + + + + + + + + + + + + + + + + + +
Sr.Case CodeUHIDPatient NameAgeOPD DateInsurance NoClaim Amount
case_id_code) ?>p_code) ?>p_fname) ?>age) ?>opd_date ?? '-') ?> + insurance_no) ?> + insurance_no_1)): ?> +
insurance_no_1) ?> + +
claim_amt, 2) ?>
Total Claim Amount:
+ +
No cases in this packing
+ + + +
+
+ Prepared By
+ +
+
+ Verified By +
+
+ Approved By +
+
+
+ + + + diff --git a/app/Views/org_packing/search_result.php b/app/Views/org_packing/search_result.php new file mode 100644 index 0000000..1b1aaf7 --- /dev/null +++ b/app/Views/org_packing/search_result.php @@ -0,0 +1,67 @@ + +
+ No packing records found +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Sr.Label NoDate CreatedTypeNo. of CasesStatusActions
label_no) ?>date_created) ?> + list_type == 'OPD'): ?> + list_type ?> + + list_type ?> + + no_records ?> + files_status == 1): ?> + Completed + + Pending + + + +
+
+
+ Showing packing record(s) +
+ diff --git a/app/Views/partials/header.php b/app/Views/partials/header.php new file mode 100644 index 0000000..a091ba8 --- /dev/null +++ b/app/Views/partials/header.php @@ -0,0 +1,78 @@ + \ No newline at end of file diff --git a/app/Views/partials/sidebar.php b/app/Views/partials/sidebar.php new file mode 100644 index 0000000..5cba00d --- /dev/null +++ b/app/Views/partials/sidebar.php @@ -0,0 +1,215 @@ +user() : null; +$canTemplate = false; +if ($user && method_exists($user, 'can')) { + $canTemplate = $user->can('template.pathology') + || $user->can('template.ultrasound') + || $user->can('template.xray') + || $user->can('template.ct') + || $user->can('template.mri') + || $user->can('template.echo') + || $user->can('template.*'); +} + +if (! $canTemplate && $user && method_exists($user, 'inGroup')) { + $canTemplate = $user->inGroup('superadmin', 'admin', 'developer'); +} + +$canIpdBilling = $user && method_exists($user, 'can') + ? ($user->can('billing.ipd.access') + || $user->can('billing.ipd.current-admission') + || $user->can('billing.ipd.invoice') + || $user->can('billing.ipd.cash-balance') + || $user->can('billing.access')) + : false; + +$canPharmacy = true; +if ($user && method_exists($user, 'can')) { + $canPharmacy = $user->can('pharmacy.access') + || $user->can('billing.access'); +} + +if (! $canPharmacy && $user && method_exists($user, 'inGroup')) { + $canPharmacy = $user->inGroup('superadmin', 'admin', 'developer'); +} +?> + \ No newline at end of file diff --git a/app/Views/report/collection_report.php b/app/Views/report/collection_report.php new file mode 100644 index 0000000..020c4b3 --- /dev/null +++ b/app/Views/report/collection_report.php @@ -0,0 +1,116 @@ + +
+
+
+
Collection Report
+
+
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
Select filters and click Show.
+
+
+
+ + diff --git a/app/Views/report/collection_report_table.php b/app/Views/report/collection_report_table.php new file mode 100644 index 0000000..6b58758 --- /dev/null +++ b/app/Views/report/collection_report_table.php @@ -0,0 +1,59 @@ + + +

Date(YYYY-MM-DD h:m) between and

+ + +
No records found for the selected filters.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PayIDDateType of PaymentOPD/IPD/In. CodePay ModeAmt (Cr.)Amt (Dr.)Bank/SourceRemarkEmployee
pay_id ?? '') ?>str_payment_date ?? '') ?>pay_type ?? '') ?>payof_code ?? '') . ' ' . ($row->patient_name ?? '')) ?>pay_mode ?? '') ?>cr_amount ?? 0), 2)) ?>dr_amount ?? 0), 2)) ?>bank_name ?? '') . ' ' . ($row->bank_type ?? ''))) ?>remark ?? '') ?>update_by ?? '') ?>
Total
+ +

Total Amount :

+ diff --git a/app/Views/report/diagnosis_report.php b/app/Views/report/diagnosis_report.php new file mode 100644 index 0000000..eaf7273 --- /dev/null +++ b/app/Views/report/diagnosis_report.php @@ -0,0 +1,116 @@ + +
+
+
+
Diagnosis Report
+
+
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
Select filters and click Show.
+
+
+
+ + diff --git a/app/Views/report/diagnosis_report_table.php b/app/Views/report/diagnosis_report_table.php new file mode 100644 index 0000000..eeaeba9 --- /dev/null +++ b/app/Views/report/diagnosis_report_table.php @@ -0,0 +1,111 @@ + + +
+

Date Range: to

+

Invoice Type:

+
+ + +
No data found for the selected criteria.
+ + + + + + + + + + + + + + group_desc ?? ''; + $itemName = $row->item_name ?? ''; + $noQty = (float) ($row->no_qty ?? 0); + $totalAmount = (float) ($row->total_amount ?? 0); + $totalActAmount = (float) ($row->total_act_amount ?? 0); + + // Diagnosis group header + if ($groupDesc !== $diagnosisHead) { + // Show previous group total if not first group + if ($diagnosisHead !== '') { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $diagnosisHeadTotal = 0.0; + $diagnosisActHeadTotal = 0.0; + $diagnosisQtyTotal = 0.0; + } + + echo ''; + echo ''; + echo ''; + $diagnosisHead = $groupDesc; + } + + // Item row + $rowNum++; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + // Update totals + $diagnosisHeadTotal += $totalAmount; + $diagnosisActHeadTotal += $totalActAmount; + $diagnosisQtyTotal += $noQty; + $grandTotal += $totalAmount; + $grandActTotal += $totalActAmount; + $grandQtyTotal += $noQty; + } + + // Show last group total + if ($diagnosisHead !== '' && $rowCount > 0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + +
#Diagnosis GroupTest NameNo. of QtyAmountCost Amt
Total of ' . esc($diagnosisHead) . '' . number_format($diagnosisQtyTotal, 0) . '' . number_format($diagnosisHeadTotal, 2) . '' . number_format($diagnosisActHeadTotal, 2) . '
' . esc($groupDesc) . '
' . $rowNum . '' . esc($itemName) . '' . number_format($noQty, 0) . '' . number_format($totalAmount, 2) . '' . number_format($totalActAmount, 2) . '
Total of ' . esc($diagnosisHead) . '' . number_format($diagnosisQtyTotal, 0) . '' . number_format($diagnosisHeadTotal, 2) . '' . number_format($diagnosisActHeadTotal, 2) . '
Grand Total
+ diff --git a/app/Views/report/insurance_combined_report.php b/app/Views/report/insurance_combined_report.php new file mode 100644 index 0000000..5778ebb --- /dev/null +++ b/app/Views/report/insurance_combined_report.php @@ -0,0 +1,111 @@ + +
+
+
+
+ Combined Insurance Summary Report +
+ +
+
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+ +

Select filters and click Show to generate report

+
+
+
+
+
+ + diff --git a/app/Views/report/insurance_combined_report_table.php b/app/Views/report/insurance_combined_report_table.php new file mode 100644 index 0000000..b000ce4 --- /dev/null +++ b/app/Views/report/insurance_combined_report_table.php @@ -0,0 +1,186 @@ + + +
+

Date Range: to

+
+ + +
No data found for the selected criteria.
+ + + +
+ OPD Organization Cases Summary +
+ + + + + + + + + + + + + $row) { + $cases = (int) ($row->total_cases ?? 0); + $charge = (float) ($row->total_charge ?? 0); + $med = (float) ($row->total_med ?? 0); + $net = (float) ($row->total_net ?? 0); + + $opdTotalCases += $cases; + $opdTotalCharge += $charge; + $opdTotalMed += $med; + $opdTotalNet += $net; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + +
#Insurance CompanyTotal CasesTotal ChargeTotal MedicineTotal Net
' . ($index + 1) . '' . esc($row->insurance_company ?? '') . '' . number_format($cases) . '' . number_format($charge, 2) . '' . number_format($med, 2) . '' . number_format($net, 2) . '
OPD Total:
+ + + +
+ IPD TPA Cases Summary +
+ + + + + + + + + + + + + + + + + $row) { + $cases = (int) ($row->total_cases ?? 0); + $charge = (float) ($row->total_charge ?? 0); + $med = (float) ($row->total_med ?? 0); + $discount = (float) ($row->total_discount ?? 0); + $net = (float) ($row->total_net ?? 0); + $received = (float) ($row->total_received ?? 0); + $deducted = (float) ($row->total_deducted ?? 0); + $balance = $net - $received; + + $ipdTotalCases += $cases; + $ipdTotalCharge += $charge; + $ipdTotalMed += $med; + $ipdTotalDiscount += $discount; + $ipdTotalNet += $net; + $ipdTotalReceived += $received; + $ipdTotalDeducted += $deducted; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + + + + +
#Insurance CompanyCasesChargeMedicineDiscountNetReceivedDeductedBalance
' . ($index + 1) . '' . esc($row->insurance_company ?? '') . '' . number_format($cases) . '' . number_format($charge, 2) . '' . number_format($med, 2) . '' . number_format($discount, 2) . '' . number_format($net, 2) . '' . number_format($received, 2) . '' . number_format($deducted, 2) . '' . number_format($balance, 2) . '
IPD Total:
+ + + +
+
+
+ Grand Summary +
+
+
+ + + + + + + + + +
Total Cases (OPD + IPD):
Total Net Amount:
+
+
+ + + + + + + + + +
IPD Amount Received:
IPD Balance Pending:
+
+
+
+
+ + + diff --git a/app/Views/report/insurance_credit_main.php b/app/Views/report/insurance_credit_main.php new file mode 100644 index 0000000..1f270ed --- /dev/null +++ b/app/Views/report/insurance_credit_main.php @@ -0,0 +1,100 @@ +
+
+
+
Insurance Credit Reports
+
+
+

Select a report type to view insurance credit details

+ +
+ +
+
+
+
+ +
+
OPD Organization Cases
+

+ View OPD cases submitted to insurance organizations +

+ +
+
+
+ + +
+
+
+
+ +
+
IPD TPA Cases
+

+ View IPD cases submitted to TPA/Insurance companies +

+ +
+
+
+ + +
+
+
+
+ +
+
Combined Summary
+

+ View combined OPD & IPD insurance summary +

+ +
+
+
+
+ +
+
+
+
+
+ Report Information +
+
    +
  • OPD Organization Cases: Shows outpatient cases with insurance coverage (case_type = 0)
  • +
  • IPD TPA Cases: Shows inpatient cases with TPA/insurance coverage (case_type = 1)
  • +
  • Combined Summary: Consolidated view of all insurance cases with totals
  • +
  • Status Types: Pending (0), Bill Complete (1), Submitted to Organization (2)
  • +
+
+
+
+
+
+
+
+ + diff --git a/app/Views/report/insurance_ipd_report.php b/app/Views/report/insurance_ipd_report.php new file mode 100644 index 0000000..36fe945 --- /dev/null +++ b/app/Views/report/insurance_ipd_report.php @@ -0,0 +1,112 @@ + +
+
+
+
+ IPD TPA Cases Report +
+ +
+
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+ +

Select filters and click Show to generate report

+
+
+
+
+
+ + diff --git a/app/Views/report/insurance_ipd_report_table.php b/app/Views/report/insurance_ipd_report_table.php new file mode 100644 index 0000000..ffde03c --- /dev/null +++ b/app/Views/report/insurance_ipd_report_table.php @@ -0,0 +1,100 @@ + + +
+

Date Range: to

+

Type: TPA Cases

+
+ + +
No data found for the selected criteria.
+ + + + + + + + + + + + + + + + + + + + + + + $row) { + $chargeAmt = (float) ($row->charge_amount ?? 0); + $medAmt = (float) ($row->med_amount ?? 0); + $discount = (float) ($row->discount ?? 0); + $netAmt = (float) ($row->net_amount ?? 0); + $received = (float) ($row->amount_recived ?? 0); + $deducted = (float) ($row->amount_deduction ?? 0); + + $totalCharge += $chargeAmt; + $totalMed += $medAmt; + $totalDiscount += $discount; + $totalNet += $netAmt; + $totalReceived += $received; + $totalDeducted += $deducted; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + + + + + + + + + + +
#Case InfoIPD CodeUHIDPatient NameInsuranceStatusAdmit DateDischargeChargeMedDisc.Net AmtReceivedDeducted
' . ($index + 1) . '' . esc($row->case_info ?? '') . '' . esc($row->ipd_code ?? '') . '' . esc($row->p_code ?? '') . '' . esc($row->p_fname ?? '') . '' . esc($row->insurance_company ?? '') . '' . esc($row->org_submit_status ?? '') . '' . esc($row->str_register_date ?? '') . '' . esc($row->str_discharge_date ?? '-') . '' . number_format($chargeAmt, 2) . '' . number_format($medAmt, 2) . '' . number_format($discount, 2) . '' . number_format($netAmt, 2) . '' . number_format($received, 2) . '' . number_format($deducted, 2) . '
Total:
Total Cases:
Balance (Net - Received):
+ diff --git a/app/Views/report/insurance_opd_report.php b/app/Views/report/insurance_opd_report.php new file mode 100644 index 0000000..1348f0c --- /dev/null +++ b/app/Views/report/insurance_opd_report.php @@ -0,0 +1,112 @@ + +
+
+
+
+ OPD Organization Cases Report +
+ +
+
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+ +

Select filters and click Show to generate report

+
+
+
+
+
+ + diff --git a/app/Views/report/insurance_opd_report_table.php b/app/Views/report/insurance_opd_report_table.php new file mode 100644 index 0000000..259d458 --- /dev/null +++ b/app/Views/report/insurance_opd_report_table.php @@ -0,0 +1,78 @@ + + +
+

Date Range: to

+

Type: Organization Cases

+
+ + +
No data found for the selected criteria.
+ + + + + + + + + + + + + + + + + + + + $row) { + $chargeAmt = (float) ($row->charge_amount ?? 0); + $medAmt = (float) ($row->med_amount ?? 0); + $netAmt = (float) ($row->net_amount ?? 0); + + $totalCharge += $chargeAmt; + $totalMed += $medAmt; + $totalNet += $netAmt; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + + + +
#Bill No.Case InfoOrg. CodeUHIDPatient NameInsurance CompanyDateStatusCharge AmtMed AmtNet Amt
' . ($index + 1) . '' . esc($row->id ?? '') . '' . esc($row->case_info ?? '') . '' . esc($row->case_id_code ?? '') . '' . esc($row->p_code ?? '') . '' . esc($row->p_fname ?? '') . '' . esc($row->insurance_company ?? '') . '' . esc($row->str_date_registration ?? '') . '' . esc($row->org_submit_status ?? '') . '' . number_format($chargeAmt, 2) . '' . number_format($medAmt, 2) . '' . number_format($netAmt, 2) . '
Total:
Total Cases:
+ diff --git a/app/Views/welcome_message.php b/app/Views/welcome_message.php new file mode 100644 index 0000000..9e36c00 --- /dev/null +++ b/app/Views/welcome_message.php @@ -0,0 +1,264 @@ + + + + + + + + Welcome + + + + + + + + + + + + + + + + + + + + + + + + + + + + user(); ?> + + + + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..69df4e1 --- /dev/null +++ b/app/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/builds b/builds new file mode 100644 index 0000000..cc2ca08 --- /dev/null +++ b/builds @@ -0,0 +1,125 @@ +#!/usr/bin/env php + 'vcs', + 'url' => GITHUB_URL, + ]; + } + + $array['require']['codeigniter4/codeigniter4'] = 'dev-develop'; + unset($array['require']['codeigniter4/framework']); + } else { + unset($array['minimum-stability']); + + if (isset($array['repositories'])) { + foreach ($array['repositories'] as $i => $repository) { + if ($repository['url'] === GITHUB_URL) { + unset($array['repositories'][$i]); + break; + } + } + + if (empty($array['repositories'])) { + unset($array['repositories']); + } + } + + $array['require']['codeigniter4/framework'] = LATEST_RELEASE; + unset($array['require']['codeigniter4/codeigniter4']); + } + + file_put_contents($file, json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL); + + $modified[] = $file; + } else { + echo 'Warning: Unable to decode composer.json! Skipping...' . PHP_EOL; + } + } else { + echo 'Warning: Unable to read composer.json! Skipping...' . PHP_EOL; + } +} + +$files = [ + __DIR__ . DIRECTORY_SEPARATOR . 'app/Config/Paths.php', + __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml.dist', + __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml', +]; + +foreach ($files as $file) { + if (is_file($file)) { + $contents = file_get_contents($file); + + if ($dev) { + $contents = str_replace('vendor/codeigniter4/framework', 'vendor/codeigniter4/codeigniter4', $contents); + } else { + $contents = str_replace('vendor/codeigniter4/codeigniter4', 'vendor/codeigniter4/framework', $contents); + } + + file_put_contents($file, $contents); + + $modified[] = $file; + } +} + +if ($modified === []) { + echo 'No files modified.' . PHP_EOL; +} else { + echo 'The following files were modified:' . PHP_EOL; + + foreach ($modified as $file) { + echo " * {$file}" . PHP_EOL; + } + + echo 'Run `composer update` to sync changes with your vendor folder.' . PHP_EOL; +} diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..94c54ff --- /dev/null +++ b/composer.json @@ -0,0 +1,46 @@ +{ + "name": "codeigniter4/appstarter", + "description": "CodeIgniter4 starter app", + "license": "MIT", + "type": "project", + "homepage": "https://codeigniter.com", + "support": { + "forum": "https://forum.codeigniter.com/", + "source": "https://github.com/codeigniter4/CodeIgniter4", + "slack": "https://codeigniterchat.slack.com" + }, + "require": { + "php": "^8.2", + "codeigniter4/framework": "^4.7", + "codeigniter4/shield": "^1.2", + "mpdf/mpdf": "^8.2", + "mpdf/qrcode": "^1.2" + }, + "require-dev": { + "fakerphp/faker": "^1.9", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^10.5.16" + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Config\\": "app/Config/" + }, + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\Support\\": "tests/_support" + } + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true + }, + "scripts": { + "test": "phpunit" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..d933b6e --- /dev/null +++ b/composer.lock @@ -0,0 +1,2656 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "b1a7e3eeff0fc159e79f74e5ddedf77e", + "packages": [ + { + "name": "codeigniter4/framework", + "version": "v4.7.0", + "source": { + "type": "git", + "url": "https://github.com/codeigniter4/framework.git", + "reference": "e7753bc03f8b74af428f46b5e2bb74925487c930" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codeigniter4/framework/zipball/e7753bc03f8b74af428f46b5e2bb74925487c930", + "reference": "e7753bc03f8b74af428f46b5e2bb74925487c930", + "shasum": "" + }, + "require": { + "ext-intl": "*", + "ext-mbstring": "*", + "laminas/laminas-escaper": "^2.18", + "php": "^8.2", + "psr/log": "^3.0" + }, + "require-dev": { + "codeigniter/coding-standard": "^1.7", + "fakerphp/faker": "^1.24", + "friendsofphp/php-cs-fixer": "^3.47.1", + "kint-php/kint": "^6.1", + "mikey179/vfsstream": "^1.6.12", + "nexusphp/cs-config": "^3.6", + "phpunit/phpunit": "^10.5.16 || ^11.2", + "predis/predis": "^3.0" + }, + "suggest": { + "ext-apcu": "If you use Cache class ApcuHandler", + "ext-curl": "If you use CURLRequest class", + "ext-dom": "If you use TestResponse", + "ext-exif": "If you run Image class tests", + "ext-fileinfo": "Improves mime type detection for files", + "ext-gd": "If you use Image class GDHandler", + "ext-imagick": "If you use Image class ImageMagickHandler", + "ext-libxml": "If you use TestResponse", + "ext-memcache": "If you use Cache class MemcachedHandler with Memcache", + "ext-memcached": "If you use Cache class MemcachedHandler with Memcached", + "ext-mysqli": "If you use MySQL", + "ext-oci8": "If you use Oracle Database", + "ext-pcntl": "If you use Signals", + "ext-pgsql": "If you use PostgreSQL", + "ext-posix": "If you use Signals", + "ext-readline": "Improves CLI::input() usability", + "ext-redis": "If you use Cache class RedisHandler", + "ext-simplexml": "If you format XML", + "ext-sodium": "If you use Encryption SodiumHandler", + "ext-sqlite3": "If you use SQLite3", + "ext-sqlsrv": "If you use SQL Server", + "ext-xdebug": "If you use CIUnitTestCase::assertHeaderEmitted()" + }, + "type": "project", + "autoload": { + "psr-4": { + "CodeIgniter\\": "system/" + }, + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The CodeIgniter framework v4", + "homepage": "https://codeigniter.com", + "support": { + "forum": "https://forum.codeigniter.com/", + "slack": "https://codeigniterchat.slack.com", + "source": "https://github.com/codeigniter4/CodeIgniter4" + }, + "time": "2026-02-01T20:39:35+00:00" + }, + { + "name": "codeigniter4/settings", + "version": "v2.2.0", + "source": { + "type": "git", + "url": "https://github.com/codeigniter4/settings.git", + "reference": "2748f2b4572d44a940f98c31847d65272cac5666" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codeigniter4/settings/zipball/2748f2b4572d44a940f98c31847d65272cac5666", + "reference": "2748f2b4572d44a940f98c31847d65272cac5666", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "codeigniter4/devkit": "^1.1.2", + "codeigniter4/framework": "^4.2.3", + "rector/rector": "0.18.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "CodeIgniter\\Settings\\": "src" + }, + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lonnie Ezell", + "email": "lonnieje@gmail.com", + "role": "Developer" + } + ], + "description": "Settings library for CodeIgniter 4", + "homepage": "https://github.com/codeigniter4/settings", + "keywords": [ + "Settings", + "codeigniter", + "codeigniter4" + ], + "support": { + "issues": "https://github.com/codeigniter4/settings/issues", + "source": "https://github.com/codeigniter4/settings/tree/v2.2.0" + }, + "time": "2024-01-06T07:10:58+00:00" + }, + { + "name": "codeigniter4/shield", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/codeigniter4/shield.git", + "reference": "2d1b2177a914dcd490f54a6706792eacabd9e3e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/codeigniter4/shield/zipball/2d1b2177a914dcd490f54a6706792eacabd9e3e8", + "reference": "2d1b2177a914dcd490f54a6706792eacabd9e3e8", + "shasum": "" + }, + "require": { + "codeigniter4/settings": "^2.1", + "php": "^8.1" + }, + "provide": { + "codeigniter4/authentication-implementation": "1.0" + }, + "require-dev": { + "codeigniter/phpstan-codeigniter": "^1.3", + "codeigniter4/devkit": "^1.3", + "codeigniter4/framework": ">=4.3.5 <4.5.0 || ^4.5.1", + "firebase/php-jwt": "^6.4", + "mikey179/vfsstream": "^1.6.7", + "mockery/mockery": "^1.0", + "phpstan/phpstan-strict-rules": "^2.0" + }, + "suggest": { + "ext-curl": "Required to use the password validation rule via PwnedValidator class.", + "ext-openssl": "Required to use the JWT Authenticator." + }, + "type": "library", + "autoload": { + "psr-4": { + "CodeIgniter\\Shield\\": "src" + }, + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lonnie Ezell", + "email": "lonnieje@gmail.com", + "role": "Developer" + } + ], + "description": "Authentication and Authorization for CodeIgniter 4", + "homepage": "https://github.com/codeigniter4/shield", + "keywords": [ + "Authentication", + "authorization", + "codeigniter", + "codeigniter4" + ], + "support": { + "docs": "https://codeigniter4.github.io/shield/", + "forum": "https://github.com/codeigniter4/shield/discussions", + "issues": "https://github.com/codeigniter4/shield/issues", + "slack": "https://codeigniterchat.slack.com", + "source": "https://github.com/codeigniter4/shield" + }, + "time": "2025-07-14T10:26:03+00:00" + }, + { + "name": "laminas/laminas-escaper", + "version": "2.18.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-escaper.git", + "reference": "06f211dfffff18d91844c1f55250d5d13c007e18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-escaper/zipball/06f211dfffff18d91844c1f55250d5d13c007e18", + "reference": "06f211dfffff18d91844c1f55250d5d13c007e18", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-mbstring": "*", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" + }, + "conflict": { + "zendframework/zend-escaper": "*" + }, + "require-dev": { + "infection/infection": "^0.31.0", + "laminas/laminas-coding-standard": "~3.1.0", + "phpunit/phpunit": "^11.5.42", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Escaper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Securely and safely escape HTML, HTML attributes, JavaScript, CSS, and URLs", + "homepage": "https://laminas.dev", + "keywords": [ + "escaper", + "laminas" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-escaper/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-escaper/issues", + "rss": "https://github.com/laminas/laminas-escaper/releases.atom", + "source": "https://github.com/laminas/laminas-escaper" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2025-10-14T18:31:13+00:00" + }, + { + "name": "mpdf/mpdf", + "version": "v8.2.7", + "source": { + "type": "git", + "url": "https://github.com/mpdf/mpdf.git", + "reference": "b59670a09498689c33ce639bac8f5ba26721dab3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/b59670a09498689c33ce639bac8f5ba26721dab3", + "reference": "b59670a09498689c33ce639bac8f5ba26721dab3", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "ext-mbstring": "*", + "mpdf/psr-http-message-shim": "^1.0 || ^2.0", + "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", + "myclabs/deep-copy": "^1.7", + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "setasign/fpdi": "^2.1" + }, + "require-dev": { + "mockery/mockery": "^1.3.0", + "mpdf/qrcode": "^1.1.0", + "squizlabs/php_codesniffer": "^3.5.0", + "tracy/tracy": "~2.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-bcmath": "Needed for generation of some types of barcodes", + "ext-xml": "Needed mainly for SVG manipulation", + "ext-zlib": "Needed for compression of embedded resources, such as fonts" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Mpdf\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-only" + ], + "authors": [ + { + "name": "Matěj Humpál", + "role": "Developer, maintainer" + }, + { + "name": "Ian Back", + "role": "Developer (retired)" + } + ], + "description": "PHP library generating PDF files from UTF-8 encoded HTML", + "homepage": "https://mpdf.github.io", + "keywords": [ + "pdf", + "php", + "utf-8" + ], + "support": { + "docs": "https://mpdf.github.io", + "issues": "https://github.com/mpdf/mpdf/issues", + "source": "https://github.com/mpdf/mpdf" + }, + "funding": [ + { + "url": "https://www.paypal.me/mpdf", + "type": "custom" + } + ], + "time": "2025-12-01T10:18:02+00:00" + }, + { + "name": "mpdf/psr-http-message-shim", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/mpdf/psr-http-message-shim.git", + "reference": "f25a0153d645e234f9db42e5433b16d9b113920f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/f25a0153d645e234f9db42e5433b16d9b113920f", + "reference": "f25a0153d645e234f9db42e5433b16d9b113920f", + "shasum": "" + }, + "require": { + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrHttpMessageShim\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + }, + { + "name": "Nigel Cunningham", + "email": "nigel.cunningham@technocrat.com.au" + } + ], + "description": "Shim to allow support of different psr/message versions.", + "support": { + "issues": "https://github.com/mpdf/psr-http-message-shim/issues", + "source": "https://github.com/mpdf/psr-http-message-shim/tree/v2.0.1" + }, + "time": "2023-10-02T14:34:03+00:00" + }, + { + "name": "mpdf/psr-log-aware-trait", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/mpdf/psr-log-aware-trait.git", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78", + "reference": "a633da6065e946cc491e1c962850344bb0bf3e78", + "shasum": "" + }, + "require": { + "psr/log": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\PsrLogAwareTrait\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Dorison", + "email": "mark@chromatichq.com" + }, + { + "name": "Kristofer Widholm", + "email": "kristofer@chromatichq.com" + } + ], + "description": "Trait to allow support of different psr/log versions.", + "support": { + "issues": "https://github.com/mpdf/psr-log-aware-trait/issues", + "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0" + }, + "time": "2023-05-03T06:19:36+00:00" + }, + { + "name": "mpdf/qrcode", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/mpdf/qrcode.git", + "reference": "d4fa19117a7241c30ac84902b6236a02c7a3f268" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mpdf/qrcode/zipball/d4fa19117a7241c30ac84902b6236a02c7a3f268", + "reference": "d4fa19117a7241c30ac84902b6236a02c7a3f268", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.4|^2.0|^9.99.99", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.5 || ^1.0", + "squizlabs/php_codesniffer": "^3.4", + "tracy/tracy": "^2.5", + "yoast/phpunit-polyfills": "^1.0" + }, + "suggest": { + "ext-gd": "To output QR codes to PNG files", + "ext-simplexml": "To output QR codes to SVG files" + }, + "type": "library", + "autoload": { + "psr-4": { + "Mpdf\\QrCode\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Matěj Humpál", + "role": "maintainer" + }, + { + "name": "Laurent Minguet", + "role": "author" + } + ], + "description": "QR code generator for mPDF", + "keywords": [ + "mpdf", + "pdf", + "php", + "qr", + "qrcode" + ], + "support": { + "issues": "https://github.com/mpdf/qrcode/issues", + "source": "https://github.com/mpdf/qrcode/tree/v1.2.2" + }, + "funding": [ + { + "url": "https://www.paypal.me/mpdf", + "type": "custom" + } + ], + "time": "2025-12-19T16:21:49+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "setasign/fpdi", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDI.git", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", + "shasum": "" + }, + "require": { + "ext-zlib": "*", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "setasign/tfpdf": "<1.31" + }, + "require-dev": { + "phpunit/phpunit": "^7", + "setasign/fpdf": "~1.8.6", + "setasign/tfpdf": "~1.33", + "squizlabs/php_codesniffer": "^3.5", + "tecnickcom/tcpdf": "^6.8" + }, + "suggest": { + "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." + }, + "type": "library", + "autoload": { + "psr-4": { + "setasign\\Fpdi\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Slabon", + "email": "jan.slabon@setasign.com", + "homepage": "https://www.setasign.com" + }, + { + "name": "Maximilian Kresse", + "email": "maximilian.kresse@setasign.com", + "homepage": "https://www.setasign.com" + } + ], + "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", + "homepage": "https://www.setasign.com/fpdi", + "keywords": [ + "fpdf", + "fpdi", + "pdf" + ], + "support": { + "issues": "https://github.com/Setasign/FPDI/issues", + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", + "type": "tidelift" + } + ], + "time": "2025-08-05T09:57:14+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "mikey179/vfsstream", + "version": "v1.6.12", + "source": { + "type": "git", + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", + "reference": "fe695ec993e0a55c3abdda10a9364eb31c6f1bf0", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "^7.5||^8.5||^9.6", + "yoast/phpunit-polyfills": "^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } + ], + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "support": { + "issues": "https://github.com/bovigo/vfsStream/issues", + "source": "https://github.com/bovigo/vfsStream/tree/master", + "wiki": "https://github.com/bovigo/vfsStream/wiki" + }, + "time": "2024-08-29T18:43:31+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.16", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "10.5.63", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "33198268dad71e926626b618f3ec3966661e4d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/33198268dad71e926626b618f3ec3966661e4d90", + "reference": "33198268dad71e926626b618f3ec3966661e4d90", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.5", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.4", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.63" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2026-01-27T05:48:37+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:12:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "reference": "55dfef806eb7dfeb6e7a6935601fef866f8ca48d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-01-24T09:25:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:15:17+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-23T08:47:14+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "0735b90f4da94969541dac1da743446e276defa6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:09:11+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-03-02T07:19:19+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-10T07:50:56+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:21:43+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^8.2" + }, + "platform-dev": {}, + "plugin-api-version": "2.6.0" +} diff --git a/env b/env new file mode 100644 index 0000000..f359ec2 --- /dev/null +++ b/env @@ -0,0 +1,69 @@ +#-------------------------------------------------------------------- +# Example Environment Configuration file +# +# This file can be used as a starting point for your own +# custom .env files, and contains most of the possible settings +# available in a default install. +# +# By default, all of the settings are commented out. If you want +# to override the setting, you must un-comment it by removing the '#' +# at the beginning of the line. +#-------------------------------------------------------------------- + +#-------------------------------------------------------------------- +# ENVIRONMENT +#-------------------------------------------------------------------- + +# CI_ENVIRONMENT = production + +#-------------------------------------------------------------------- +# APP +#-------------------------------------------------------------------- + +# app.baseURL = '' +# If you have trouble with `.`, you could also use `_`. +# app_baseURL = '' +# app.forceGlobalSecureRequests = false +# app.CSPEnabled = false + +#-------------------------------------------------------------------- +# DATABASE +#-------------------------------------------------------------------- + +# database.default.hostname = localhost +# database.default.database = ci4 +# database.default.username = root +# database.default.password = root +# database.default.DBDriver = MySQLi +# database.default.DBPrefix = +# database.default.port = 3306 + +# If you use MySQLi as tests, first update the values of Config\Database::$tests. +# database.tests.hostname = localhost +# database.tests.database = ci4_test +# database.tests.username = root +# database.tests.password = root +# database.tests.DBDriver = MySQLi +# database.tests.DBPrefix = +# database.tests.charset = utf8mb4 +# database.tests.DBCollat = utf8mb4_general_ci +# database.tests.port = 3306 + +#-------------------------------------------------------------------- +# ENCRYPTION +#-------------------------------------------------------------------- + +# encryption.key = + +#-------------------------------------------------------------------- +# SESSION +#-------------------------------------------------------------------- + +# session.driver = 'CodeIgniter\Session\Handlers\FileHandler' +# session.savePath = null + +#-------------------------------------------------------------------- +# LOGGER +#-------------------------------------------------------------------- + +# logger.threshold = 4 diff --git a/old_code_ci3/controllers/Auth.php b/old_code_ci3/controllers/Auth.php new file mode 100644 index 0000000..937e659 --- /dev/null +++ b/old_code_ci3/controllers/Auth.php @@ -0,0 +1,825 @@ +load->database(); + $this->load->library(array('ion_auth','form_validation')); + $this->load->helper(array('url','language')); + + $this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')); + + $this->lang->load('auth'); + } + + // redirect if needed, otherwise display the user list + public function index() + { + + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth/index', $this->data); + } + } + + // log the user in + public function login() + { + $this->data['title'] = $this->lang->line('login_heading'); + + //validate form input + $this->form_validation->set_rules('identity', str_replace(':', '', $this->lang->line('login_identity_label')), 'required'); + $this->form_validation->set_rules('password', str_replace(':', '', $this->lang->line('login_password_label')), 'required'); + + if ($this->form_validation->run() == true) + { + // check to see if the user is logging in + // check for "remember me" + $remember = (bool) $this->input->post('remember'); + + if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) + { + //if the login is successful + //redirect them back to the home page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect('/', 'refresh'); + + + redirect('welcome',$user); + } + else + { + // if the login was un-successful + // redirect them back to the login page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth/login', 'refresh'); // use redirects instead of loading views for compatibility with MY_Controller libraries + } + } + else + { + // the user is not logging in so display the login page + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['identity'] = array('name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'value' => $this->form_validation->set_value('identity'), + ); + $this->data['password'] = array('name' => 'password', + 'id' => 'password', + 'type' => 'password', + ); + + $this->_render_page('auth/login', $this->data); + } + } + + // log the user out + public function logout() + { + $this->data['title'] = "Logout"; + + // log the user out + $logout = $this->ion_auth->logout(); + + // redirect them to the login page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect('auth/login', 'refresh'); + } + + // change password + public function change_password() + { + $this->form_validation->set_rules('old', $this->lang->line('change_password_validation_old_password_label'), 'required'); + $this->form_validation->set_rules('new', $this->lang->line('change_password_validation_new_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[new_confirm]'); + $this->form_validation->set_rules('new_confirm', $this->lang->line('change_password_validation_new_password_confirm_label'), 'required'); + + if (!$this->ion_auth->logged_in()) + { + redirect('auth/login', 'refresh'); + } + + $user = $this->ion_auth->user()->row(); + + if ($this->form_validation->run() == false) + { + // display the form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['min_password_length'] = $this->config->item('min_password_length', 'ion_auth'); + $this->data['old_password'] = array( + 'name' => 'old', + 'id' => 'old', + 'type' => 'password', + ); + $this->data['new_password'] = array( + 'name' => 'new', + 'id' => 'new', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['new_password_confirm'] = array( + 'name' => 'new_confirm', + 'id' => 'new_confirm', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['user_id'] = array( + 'name' => 'user_id', + 'id' => 'user_id', + 'type' => 'hidden', + 'value' => $user->id, + ); + + // render + $this->_render_page('auth/change_password', $this->data); + } + else + { + $identity = $this->session->userdata('identity'); + + $change = $this->ion_auth->change_password($identity, $this->input->post('old'), $this->input->post('new')); + + if ($change) + { + //if the password was successfully changed + $this->session->set_flashdata('message', $this->ion_auth->messages()); + $this->logout(); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth/change_password', 'refresh'); + } + } + } + + // forgot password + public function forgot_password() + { + // setting validation rules by checking whether identity is username or email + if($this->config->item('identity', 'ion_auth') != 'email' ) + { + $this->form_validation->set_rules('identity', $this->lang->line('forgot_password_identity_label'), 'required'); + } + else + { + $this->form_validation->set_rules('identity', $this->lang->line('forgot_password_validation_email_label'), 'required|valid_email'); + } + + + if ($this->form_validation->run() == false) + { + $this->data['type'] = $this->config->item('identity','ion_auth'); + // setup the input + $this->data['identity'] = array('name' => 'identity', + 'id' => 'identity', + ); + + if ( $this->config->item('identity', 'ion_auth') != 'email' ){ + $this->data['identity_label'] = $this->lang->line('forgot_password_identity_label'); + } + else + { + $this->data['identity_label'] = $this->lang->line('forgot_password_email_identity_label'); + } + + // set any errors and display the form + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + $this->_render_page('auth/forgot_password', $this->data); + } + else + { + $identity_column = $this->config->item('identity','ion_auth'); + $identity = $this->ion_auth->where($identity_column, $this->input->post('identity'))->users()->row(); + + if(empty($identity)) { + + if($this->config->item('identity', 'ion_auth') != 'email') + { + $this->ion_auth->set_error('forgot_password_identity_not_found'); + } + else + { + $this->ion_auth->set_error('forgot_password_email_not_found'); + } + + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + + // run the forgotten password method to email an activation code to the user + $forgotten = $this->ion_auth->forgotten_password($identity->{$this->config->item('identity', 'ion_auth')}); + + if ($forgotten) + { + // if there were no errors + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth/login", 'refresh'); //we should display a confirmation page here instead of the login page + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + } + + // reset password - final step for forgotten password + public function reset_password($code = NULL) + { + if (!$code) + { + show_404(); + } + + $user = $this->ion_auth->forgotten_password_check($code); + + if ($user) + { + // if the code is valid then display the password reset form + + $this->form_validation->set_rules('new', $this->lang->line('reset_password_validation_new_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[new_confirm]'); + $this->form_validation->set_rules('new_confirm', $this->lang->line('reset_password_validation_new_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == false) + { + // display the form + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['min_password_length'] = $this->config->item('min_password_length', 'ion_auth'); + $this->data['new_password'] = array( + 'name' => 'new', + 'id' => 'new', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['new_password_confirm'] = array( + 'name' => 'new_confirm', + 'id' => 'new_confirm', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['user_id'] = array( + 'name' => 'user_id', + 'id' => 'user_id', + 'type' => 'hidden', + 'value' => $user->id, + ); + $this->data['csrf'] = $this->_get_csrf_nonce(); + $this->data['code'] = $code; + + // render + $this->_render_page('auth/reset_password', $this->data); + } + else + { + // do we have a valid request? + if ($this->_valid_csrf_nonce() === FALSE || $user->id != $this->input->post('user_id')) + { + + // something fishy might be up + $this->ion_auth->clear_forgotten_password_code($code); + + show_error($this->lang->line('error_csrf')); + + } + else + { + // finally change the password + $identity = $user->{$this->config->item('identity', 'ion_auth')}; + + $change = $this->ion_auth->reset_password($identity, $this->input->post('new')); + + if ($change) + { + // if the password was successfully changed + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth/login", 'refresh'); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth/reset_password/' . $code, 'refresh'); + } + } + } + } + else + { + // if the code is invalid then send them back to the forgot password page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + + // activate the user + public function activate($id, $code=false) + { + if ($code !== false) + { + $activation = $this->ion_auth->activate($id, $code); + } + else if ($this->ion_auth->is_admin()) + { + $activation = $this->ion_auth->activate($id); + } + + if ($activation) + { + // redirect them to the auth page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth", 'refresh'); + } + else + { + // redirect them to the forgot password page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + + // deactivate the user + public function deactivate($id = NULL) + { + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + + $id = (int) $id; + + $this->load->library('form_validation'); + $this->form_validation->set_rules('confirm', $this->lang->line('deactivate_validation_confirm_label'), 'required'); + $this->form_validation->set_rules('id', $this->lang->line('deactivate_validation_user_id_label'), 'required|alpha_numeric'); + + if ($this->form_validation->run() == FALSE) + { + // insert csrf check + $this->data['csrf'] = $this->_get_csrf_nonce(); + $this->data['user'] = $this->ion_auth->user($id)->row(); + + $this->_render_page('auth/deactivate_user', $this->data); + } + else + { + // do we really want to deactivate? + if ($this->input->post('confirm') == 'yes') + { + // do we have a valid request? + if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + + // do we have the right userlevel? + if ($this->ion_auth->logged_in() && $this->ion_auth->is_admin()) + { + $this->ion_auth->deactivate($id); + } + } + + // redirect them back to the auth page + redirect('auth', 'refresh'); + } + } + + // create a new user + public function create_user() + { + $this->data['title'] = $this->lang->line('create_user_heading'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required'); + if($identity_column!=='email') + { + $this->form_validation->set_rules('identity',$this->lang->line('create_user_validation_identity_label'),'required|is_unique['.$tables['users'].'.'.$identity_column.']'); + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email'); + } + else + { + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|is_unique[' . $tables['users'] . '.email]'); + } + $this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'trim'); + //$this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'trim'); + $this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == true) + { + $email = strtolower($this->input->post('email')); + $identity = ($identity_column==='email') ? $email : $this->input->post('identity'); + $password = $this->input->post('password'); + + $additional_data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + } + if ($this->form_validation->run() == true && $this->ion_auth->register($identity, $password, $email, $additional_data)) + { + // check to see if we are creating the user + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth", 'refresh'); + + } + else + { + // display the create user form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('first_name'), + ); + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('last_name'), + ); + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('identity'), + ); + + $this->data['email'] = array( + 'name' => 'email', + 'id' => 'email', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('email'), + ); + + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('phone'), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('password'), + ); + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('password_confirm'), + ); + + $this->_render_page('auth/create_user', $this->data); + } + } + + // edit a user + public function edit_user($id) + { + $this->data['title'] = $this->lang->line('edit_user_heading'); + + if (!$this->ion_auth->logged_in() || (!$this->ion_auth->is_admin() && !($this->ion_auth->user()->row()->id == $id))) + { + redirect('auth', 'refresh'); + } + + $user = $this->ion_auth->user($id)->row(); + $groups=$this->ion_auth->groups()->result_array(); + $currentGroups = $this->ion_auth->get_users_groups($id)->result(); + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('edit_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('edit_user_validation_lname_label'), 'required'); + $this->form_validation->set_rules('phone', $this->lang->line('edit_user_validation_phone_label'), 'required'); + $this->form_validation->set_rules('company', $this->lang->line('edit_user_validation_company_label'), 'required'); + + if (isset($_POST) && !empty($_POST)) + { + // do we have a valid request? + if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + + // update the password if it was posted + if ($this->input->post('password')) + { + $this->form_validation->set_rules('password', $this->lang->line('edit_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('edit_user_validation_password_confirm_label'), 'required'); + } + + if ($this->form_validation->run() === TRUE) + { + $data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + + // update the password if it was posted + if ($this->input->post('password')) + { + $data['password'] = $this->input->post('password'); + } + + + + // Only allow updating groups if user is admin + if ($this->ion_auth->is_admin()) + { + //Update the groups user belongs to + $groupData = $this->input->post('groups'); + + if (isset($groupData) && !empty($groupData)) { + + $this->ion_auth->remove_from_group('', $id); + + foreach ($groupData as $grp) { + $this->ion_auth->add_to_group($grp, $id); + } + + } + } + + // check to see if we are updating the user + if($this->ion_auth->update($user->id, $data)) + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->messages() ); + if ($this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + redirect('/', 'refresh'); + } + + } + else + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->errors() ); + if ($this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + redirect('/', 'refresh'); + } + + } + + } + } + + // display the edit user form + $this->data['csrf'] = $this->_get_csrf_nonce(); + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['user'] = $user; + $this->data['groups'] = $groups; + $this->data['currentGroups'] = $currentGroups; + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('first_name', $user->first_name), + ); + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('last_name', $user->last_name), + ); + $this->data['company'] = array( + 'name' => 'company', + 'id' => 'company', + 'type' => 'text', + 'value' => $this->form_validation->set_value('company', $user->company), + ); + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'value' => $this->form_validation->set_value('phone', $user->phone), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password' + ); + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password' + ); + + $this->_render_page('auth/edit_user', $this->data); + } + + // create a new group + public function create_group() + { + $this->data['title'] = $this->lang->line('create_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('create_group_validation_name_label'), 'required|alpha_dash'); + + if ($this->form_validation->run() == TRUE) + { + $new_group_id = $this->ion_auth->create_group($this->input->post('group_name'), $this->input->post('description')); + if($new_group_id) + { + // check to see if we are creating the group + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth", 'refresh'); + } + } + else + { + // display the create group form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name'), + ); + $this->data['description'] = array( + 'name' => 'description', + 'id' => 'description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('description'), + ); + + $this->_render_page('auth/create_group', $this->data); + } + } + + // edit a group + public function edit_group($id) + { + // bail if no group id given + if(!$id || empty($id)) + { + redirect('auth', 'refresh'); + } + + $this->data['title'] = $this->lang->line('edit_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + $group = $this->ion_auth->group($id)->row(); + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('edit_group_validation_name_label'), 'required|alpha_dash'); + + if (isset($_POST) && !empty($_POST)) + { + if ($this->form_validation->run() === TRUE) + { + $group_update = $this->ion_auth->update_group($id, $_POST['group_name'], $_POST['group_description']); + + if($group_update) + { + $this->session->set_flashdata('message', $this->lang->line('edit_group_saved')); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + } + redirect("auth", 'refresh'); + } + } + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['group'] = $group; + + $readonly = $this->config->item('admin_group', 'ion_auth') === $group->name ? 'readonly' : ''; + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name', $group->name), + $readonly => $readonly, + ); + $this->data['group_description'] = array( + 'name' => 'group_description', + 'id' => 'group_description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_description', $group->description), + ); + + $this->_render_page('auth/edit_group', $this->data); + } + + + public function _get_csrf_nonce() + { + $this->load->helper('string'); + $key = random_string('alnum', 8); + $value = random_string('alnum', 20); + $this->session->set_flashdata('csrfkey', $key); + $this->session->set_flashdata('csrfvalue', $value); + + return array($key => $value); + } + + public function _valid_csrf_nonce() + { + if ($this->input->post($this->session->flashdata('csrfkey')) !== FALSE && + $this->input->post($this->session->flashdata('csrfkey')) == $this->session->flashdata('csrfvalue')) + { + return TRUE; + } + else + { + return FALSE; + } + } + + public function _render_page($view, $data=null, $returnhtml=false)//I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data: $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html;//This will return html on 3rd argument being true + } + +} diff --git a/old_code_ci3/controllers/Auth_dst copy.php b/old_code_ci3/controllers/Auth_dst copy.php new file mode 100644 index 0000000..89337e9 --- /dev/null +++ b/old_code_ci3/controllers/Auth_dst copy.php @@ -0,0 +1,796 @@ +load->database(); + $this->load->library(array('ion_auth','form_validation')); + $this->load->helper(array('url','language')); + + $this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')); + + $this->lang->load('auth'); + } + + // log the user in + public function login() + { + $this->data['title'] = $this->lang->line('login_heading'); + + //validate form input + $this->form_validation->set_rules('identity', str_replace(':', '', $this->lang->line('login_identity_label')), 'required'); + $this->form_validation->set_rules('password', str_replace(':', '', $this->lang->line('login_password_label')), 'required'); + + if ($this->form_validation->run() == true) + { + // check to see if the user is logging in + // check for "remember me" + $remember = (bool) $this->input->post('remember'); + + if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) + { + //if the login is successful + //redirect them back to the home page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect('/', 'refresh'); + + redirect('welcome'); + } + else + { + // if the login was un-successful + // redirect them back to the login page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth_dst/login', 'refresh'); // use redirects instead of loading views for compatibility with MY_Controller libraries + } + } + else + { + // the user is not logging in so display the login page + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['identity'] = array('name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'value' => $this->form_validation->set_value('identity'), + ); + $this->data['password'] = array('name' => 'password', + 'id' => 'password', + 'type' => 'password', + ); + + $this->_render_page('auth_dst/login', $this->data); + } + } + + // log the user out + public function logout() + { + $this->data['title'] = "Logout"; + + // log the user out + $logout = $this->ion_auth->logout(); + + // redirect them to the login page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect('auth_dst/login', 'refresh'); + } + + public function create_user_form() + { + $this->data['title'] = $this->lang->line('create_user_heading'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth_dst', 'refresh'); + } + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required'); + if($identity_column!=='email') + { + $this->form_validation->set_rules('identity',$this->lang->line('create_user_validation_identity_label'),'required|is_unique['.$tables['users'].'.'.$identity_column.']'); + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email'); + } + else + { + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|is_unique[' . $tables['users'] . '.email]'); + } + $this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'trim'); + //$this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'trim'); + $this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == true) + { + $email = strtolower($this->input->post('email')); + $identity = ($identity_column==='email') ? $email : $this->input->post('identity'); + $password = $this->input->post('password'); + + $additional_data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + } + if ($this->form_validation->run() == true && $this->ion_auth->register($identity, $password, $email, $additional_data)) + { + // check to see if we are creating the user + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect("auth_dst", 'refresh'); + + $rvar=array( + 'insertid' =>1 + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + // display the create user form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + $error_text=$this->data['message']; + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('first_name'), + ); + + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('last_name'), + ); + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('identity'), + ); + + $this->data['email'] = array( + 'name' => 'email', + 'id' => 'email', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('email'), + ); + + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('phone'), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('password'), + ); + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('password_confirm'), + ); + + $this->_render_page('auth_dst/create_user', $this->data); + } + } + + public function save_new_user() + { + $this->data['title'] = $this->lang->line('create_user_heading'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth_dst', 'refresh'); + } + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required'); + if($identity_column!=='email') + { + $this->form_validation->set_rules('identity',$this->lang->line('create_user_validation_identity_label'),'required|is_unique['.$tables['users'].'.'.$identity_column.']'); + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email'); + } + else + { + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|is_unique[' . $tables['users'] . '.email]'); + } + $this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'trim'); + //$this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'trim'); + $this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == true) + { + $email = strtolower($this->input->post('email')); + $identity = ($identity_column==='email') ? $email : $this->input->post('identity'); + $password = $this->input->post('password'); + + $additional_data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + } + if ($this->form_validation->run() == true && $this->ion_auth->register($identity, $password, $email, $additional_data)) + { + // check to see if we are creating the user + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect("auth_dst", 'refresh'); + + $rvar=array( + 'insertid' =>1 + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + // display the create user form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + $error_text=$this->data['message']; + + $rvar=array( + 'insertid' =>0, + 'error_text'=>$error_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + } + + // edit a user + public function edit_user($id) + { + $this->data['title'] = $this->lang->line('edit_user_heading'); + + if (!$this->ion_auth->logged_in() || (!$this->ion_auth->is_admin() && !($this->ion_auth->user()->row()->id == $id))) + { + redirect('auth_dst/login', 'refresh'); + } + + $user = $this->ion_auth->user($id)->row(); + $groups=$this->ion_auth->groups()->result_array(); + $currentGroups = $this->ion_auth->get_users_groups($id)->result(); + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('edit_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('edit_user_validation_lname_label'), 'required'); + $this->form_validation->set_rules('phone', $this->lang->line('edit_user_validation_phone_label'), 'required'); + + if (isset($_POST) && !empty($_POST)) + { + // do we have a valid request? + /*if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + */ + + // update the password if it was posted + if ($this->input->post('password')) + { + $this->form_validation->set_rules('password', $this->lang->line('edit_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('edit_user_validation_password_confirm_label'), 'required'); + } + + if ($this->form_validation->run() === TRUE) + { + $data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'phone' => $this->input->post('phone'), + ); + + // update the password if it was posted + if ($this->input->post('password')) + { + $data['password'] = $this->input->post('password'); + } + + // Only allow updating groups if user is admin + if ($this->ion_auth->is_admin()) + { + //Update the groups user belongs to + $groupData = $this->input->post('groups'); + + if (isset($groupData) && !empty($groupData)) { + + $this->ion_auth->remove_from_group('', $id); + + foreach ($groupData as $grp) { + $this->ion_auth->add_to_group($grp, $id); + } + + } + } + + // check to see if we are updating the user + if($this->ion_auth->update($user->id, $data)) + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->messages() ); + $this->data['message']=$this->ion_auth->messages(); + if ($this->ion_auth->is_admin()) + { + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth_dst/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + //$this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + else + { + //$this->_render_page('/', 'refresh'); + + } + + } + else + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->errors() ); + $this->data['message']=$this->ion_auth->errors(); + if ($this->ion_auth->is_admin()) + { + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth_dst/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + //$this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + else + { + $this->_render_page('/', 'refresh'); + } + + } + + } + } + + // display the edit user form + $this->data['csrf'] = $this->_get_csrf_nonce(); + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['user'] = $user; + $this->data['groups'] = $groups; + $this->data['currentGroups'] = $currentGroups; + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('first_name', $user->first_name), + ); + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('last_name', $user->last_name), + ); + + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('phone', $user->phone), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'readonly' => 'true', + 'value' => $this->form_validation->set_value('identity',$user->username), + ); + + $this->_render_page('auth_dst/edit_user', $this->data); + } + + public function edit_user_self($id) + { + $this->data['title'] = $this->lang->line('edit_user_heading'); + + if (!$this->ion_auth->logged_in() || !($this->ion_auth->user()->row()->id == $id)) + { + redirect('auth_dst/login', 'refresh'); + } + + $user = $this->ion_auth->user($id)->row(); + $groups=$this->ion_auth->groups()->result_array(); + $currentGroups = $this->ion_auth->get_users_groups($id)->result(); + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + if (isset($_POST) && !empty($_POST)) + { + // do we have a valid request? + /*if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + */ + + // update the password if it was posted + if ($this->input->post('password')) + { + $this->form_validation->set_rules('password', $this->lang->line('edit_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('edit_user_validation_password_confirm_label'), 'required'); + } + + if ($this->form_validation->run() === TRUE) + { + $data = array(); + + // update the password if it was posted + if ($this->input->post('password')) + { + $data['password'] = $this->input->post('password'); + } + + // Only allow updating groups if user is admin + + + // check to see if we are updating the user + if($this->ion_auth->update($user->id, $data)) + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->messages() ); + $this->data['message']=$this->ion_auth->messages(); + + + } + else + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->errors() ); + $this->data['message']=$this->ion_auth->errors(); + $this->_render_page('/', 'refresh'); + + } + + } + } + + // display the edit user form + $this->data['csrf'] = $this->_get_csrf_nonce(); + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['user'] = $user; + $this->data['groups'] = $groups; + $this->data['currentGroups'] = $currentGroups; + + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'readonly' => 'true', + 'value' => $this->form_validation->set_value('identity',$user->username), + ); + + $this->_render_page('auth_dst/profile_update', $this->data); + } + + + // redirect if needed, otherwise display the user list + public function search() + { + + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth_dst/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + } + } + + public function create_group() + { + $this->data['title'] = $this->lang->line('create_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth_dst/login', 'refresh'); + } + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('create_group_validation_name_label'), 'required|alpha_dash'); + + if ($this->form_validation->run() == TRUE) + { + $new_group_id = $this->ion_auth->create_group($this->input->post('group_name'), $this->input->post('description')); + if($new_group_id) + { + // check to see if we are creating the group + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + $this->data['message']=$this->ion_auth->messages(); + //redirect("auth", 'refresh'); + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + else + { + // display the create group form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name'), + ); + $this->data['description'] = array( + 'name' => 'description', + 'id' => 'description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('description'), + ); + + $this->_render_page('auth_dst/create_group', $this->data); + } + } + + // edit a group + public function edit_group($id) + { + // bail if no group id given + if(!$id || empty($id)) + { + redirect('auth', 'refresh'); + } + + $this->data['title'] = $this->lang->line('edit_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + $group = $this->ion_auth->group($id)->row(); + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('edit_group_validation_name_label'), 'required|alpha_dash'); + + if (isset($_POST) && !empty($_POST)) + { + if ($this->form_validation->run() === TRUE) + { + $group_update = $this->ion_auth->update_group($id, $_POST['group_name'], $_POST['group_description']); + + if($group_update) + { + $this->session->set_flashdata('message', $this->lang->line('edit_group_saved')); + $this->data['message']=$this->lang->line('edit_group_saved'); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + $this->data['message']=$this->ion_auth->errors(); + } + + //redirect("auth", 'refresh'); + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['group'] = $group; + + $readonly = $this->config->item('admin_group', 'ion_auth') === $group->name ? 'readonly' : ''; + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name', $group->name), + $readonly => $readonly, + ); + $this->data['group_description'] = array( + 'name' => 'group_description', + 'id' => 'group_description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_description', $group->description), + ); + + $this->_render_page('auth_dst/edit_group', $this->data); + } + + + public function _get_csrf_nonce() + { + $this->load->helper('string'); + $key = random_string('alnum', 8); + $value = random_string('alnum', 20); + $this->session->set_flashdata('csrfkey', $key); + $this->session->set_flashdata('csrfvalue', $value); + + return array($key => $value); + } + + public function _valid_csrf_nonce() + { + if ($this->input->post($this->session->flashdata('csrfkey')) !== FALSE && + $this->input->post($this->session->flashdata('csrfkey')) == $this->session->flashdata('csrfvalue')) + { + return TRUE; + } + else + { + return FALSE; + } + } + + + public function _render_page($view, $data=null, $returnhtml=false)//I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data: $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html;//This will return html on 3rd argument being true + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Auth_dst.php b/old_code_ci3/controllers/Auth_dst.php new file mode 100644 index 0000000..89fdf72 --- /dev/null +++ b/old_code_ci3/controllers/Auth_dst.php @@ -0,0 +1,813 @@ +load->database(); + $this->load->library(array('ion_auth','form_validation')); + $this->load->helper(array('url','language')); + + $this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')); + + $this->lang->load('auth'); + } + + // log the user in + public function login() + { + $this->data['title'] = $this->lang->line('login_heading'); + + //validate form input + $this->form_validation->set_rules('identity', str_replace(':', '', $this->lang->line('login_identity_label')), 'required'); + $this->form_validation->set_rules('password', str_replace(':', '', $this->lang->line('login_password_label')), 'required'); + + if ($this->form_validation->run() == true) + { + // check to see if the user is logging in + // check for "remember me" + $remember = (bool) $this->input->post('remember'); + + if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) + { + //if the login is successful + //redirect them back to the home page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect('/', 'refresh'); + + redirect('welcome'); + } + else + { + // if the login was un-successful + // redirect them back to the login page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth_dst/login', 'refresh'); // use redirects instead of loading views for compatibility with MY_Controller libraries + } + } + else + { + // the user is not logging in so display the login page + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['identity'] = array('name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'value' => $this->form_validation->set_value('identity'), + ); + $this->data['password'] = array('name' => 'password', + 'id' => 'password', + 'type' => 'password', + ); + + $this->_render_page('auth_dst/login', $this->data); + } + } + + public function activate_status($user_id,$status) + { + $data = array( + 'active' => $status, + ); + + $this->ion_auth->update($user_id, $data); + redirect('Auth_dst/search'); + + } + // log the user out + public function logout() + { + $this->data['title'] = "Logout"; + + // log the user out + $logout = $this->ion_auth->logout(); + + // redirect them to the login page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect('auth_dst/login', 'refresh'); + } + + public function create_user_form() + { + $this->data['title'] = $this->lang->line('create_user_heading'); + + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth_dst', 'refresh'); + } + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required'); + if($identity_column!=='email') + { + $this->form_validation->set_rules('identity',$this->lang->line('create_user_validation_identity_label'),'required|is_unique['.$tables['users'].'.'.$identity_column.']'); + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email'); + } + else + { + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|is_unique[' . $tables['users'] . '.email]'); + } + $this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'trim'); + //$this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'trim'); + $this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == true) + { + $email = strtolower($this->input->post('email')); + $identity = ($identity_column==='email') ? $email : $this->input->post('identity'); + $password = $this->input->post('password'); + + $additional_data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + } + if ($this->form_validation->run() == true && $this->ion_auth->register($identity, $password, $email, $additional_data)) + { + // check to see if we are creating the user + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect("auth_dst", 'refresh'); + + $rvar=array( + 'insertid' =>1 + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + // display the create user form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + $error_text=$this->data['message']; + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('first_name'), + ); + + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('last_name'), + ); + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('identity'), + ); + + $this->data['email'] = array( + 'name' => 'email', + 'id' => 'email', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('email'), + ); + + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('phone'), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('password'), + ); + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('password_confirm'), + ); + + $this->_render_page('auth_dst/create_user', $this->data); + } + } + + public function save_new_user() + { + $this->data['title'] = $this->lang->line('create_user_heading'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth_dst', 'refresh'); + } + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required'); + if($identity_column!=='email') + { + $this->form_validation->set_rules('identity',$this->lang->line('create_user_validation_identity_label'),'required|is_unique['.$tables['users'].'.'.$identity_column.']'); + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email'); + } + else + { + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|is_unique[' . $tables['users'] . '.email]'); + } + $this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'trim'); + //$this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'trim'); + $this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == true) + { + $email = strtolower($this->input->post('email')); + $identity = ($identity_column==='email') ? $email : $this->input->post('identity'); + $password = $this->input->post('password'); + + $additional_data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + } + if ($this->form_validation->run() == true && $this->ion_auth->register($identity, $password, $email, $additional_data)) + { + // check to see if we are creating the user + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + //redirect("auth_dst", 'refresh'); + + $rvar=array( + 'insertid' =>1 + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + // display the create user form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + $error_text=$this->data['message']; + + $rvar=array( + 'insertid' =>0, + 'error_text'=>$error_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + } + + // edit a user + public function edit_user($id) + { + $this->data['title'] = $this->lang->line('edit_user_heading'); + + if (!$this->ion_auth->logged_in() || (!$this->ion_auth->is_admin() && !($this->ion_auth->user()->row()->id == $id))) + { + redirect('auth_dst/login', 'refresh'); + } + + $user = $this->ion_auth->user($id)->row(); + $groups=$this->ion_auth->groups()->result_array(); + $currentGroups = $this->ion_auth->get_users_groups($id)->result(); + + $sql = "SELECT g.*,m.module_name + FROM groups g JOIN module_master m ON g.head_group=m.id order by m.id"; + $query = $this->db->query($sql); + $this->data['groups_data']= $query->result(); + + + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('edit_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('edit_user_validation_lname_label'), 'required'); + $this->form_validation->set_rules('phone', $this->lang->line('edit_user_validation_phone_label'), 'required'); + + if (isset($_POST) && !empty($_POST)) + { + // do we have a valid request? + /*if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + */ + + // update the password if it was posted + if ($this->input->post('password')) + { + $this->form_validation->set_rules('password', $this->lang->line('edit_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('edit_user_validation_password_confirm_label'), 'required'); + } + + if ($this->form_validation->run() === TRUE) + { + $data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'phone' => $this->input->post('phone'), + ); + + // update the password if it was posted + if ($this->input->post('password')) + { + $data['password'] = $this->input->post('password'); + } + + // Only allow updating groups if user is admin + if ($this->ion_auth->is_admin()) + { + //Update the groups user belongs to + $groupData = $this->input->post('groups'); + + if (isset($groupData) && !empty($groupData)) { + + $this->ion_auth->remove_from_group('', $id); + + foreach ($groupData as $grp) { + $this->ion_auth->add_to_group($grp, $id); + } + + } + } + + // check to see if we are updating the user + if($this->ion_auth->update($user->id, $data)) + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->messages() ); + $this->data['message']=$this->ion_auth->messages(); + if ($this->ion_auth->is_admin()) + { + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth_dst/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + //$this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + else + { + //$this->_render_page('/', 'refresh'); + + } + + } + else + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->errors() ); + $this->data['message']=$this->ion_auth->errors(); + if ($this->ion_auth->is_admin()) + { + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth_dst/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + //$this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + else + { + $this->_render_page('/', 'refresh'); + } + + } + + } + } + + // display the edit user form + $this->data['csrf'] = $this->_get_csrf_nonce(); + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['user'] = $user; + $this->data['groups'] = $groups; + $this->data['currentGroups'] = $currentGroups; + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('first_name', $user->first_name), + ); + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('last_name', $user->last_name), + ); + + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('phone', $user->phone), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'readonly' => 'true', + 'value' => $this->form_validation->set_value('identity',$user->username), + ); + + $this->_render_page('auth_dst/edit_user', $this->data); + } + + public function edit_user_self($id) + { + $this->data['title'] = $this->lang->line('edit_user_heading'); + + if (!$this->ion_auth->logged_in() || !($this->ion_auth->user()->row()->id == $id)) + { + redirect('auth_dst/login', 'refresh'); + } + + $user = $this->ion_auth->user($id)->row(); + $groups=$this->ion_auth->groups()->result_array(); + $currentGroups = $this->ion_auth->get_users_groups($id)->result(); + + $tables = $this->config->item('tables','ion_auth'); + $identity_column = $this->config->item('identity','ion_auth'); + $this->data['identity_column'] = $identity_column; + + if (isset($_POST) && !empty($_POST)) + { + // do we have a valid request? + /*if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + */ + + // update the password if it was posted + if ($this->input->post('password')) + { + $this->form_validation->set_rules('password', $this->lang->line('edit_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('edit_user_validation_password_confirm_label'), 'required'); + } + + if ($this->form_validation->run() === TRUE) + { + $data = array(); + + // update the password if it was posted + if ($this->input->post('password')) + { + $data['password'] = $this->input->post('password'); + } + + // Only allow updating groups if user is admin + + + // check to see if we are updating the user + if($this->ion_auth->update($user->id, $data)) + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->messages() ); + $this->data['message']=$this->ion_auth->messages(); + + + } + else + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->errors() ); + $this->data['message']=$this->ion_auth->errors(); + $this->_render_page('/', 'refresh'); + + } + + } + } + + // display the edit user form + $this->data['csrf'] = $this->_get_csrf_nonce(); + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['user'] = $user; + $this->data['groups'] = $groups; + $this->data['currentGroups'] = $currentGroups; + + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'class' => 'form-control' + ); + + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'class' => 'form-control', + 'readonly' => 'true', + 'value' => $this->form_validation->set_value('identity',$user->username), + ); + + $this->_render_page('auth_dst/profile_update', $this->data); + } + + + // redirect if needed, otherwise display the user list + public function search() + { + + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth_dst/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + } + } + + public function create_group() + { + $this->data['title'] = $this->lang->line('create_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth_dst/login', 'refresh'); + } + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('create_group_validation_name_label'), 'required|alpha_dash'); + + if ($this->form_validation->run() == TRUE) + { + $new_group_id = $this->ion_auth->create_group($this->input->post('group_name'), $this->input->post('description')); + if($new_group_id) + { + // check to see if we are creating the group + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + $this->data['message']=$this->ion_auth->messages(); + //redirect("auth", 'refresh'); + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + else + { + // display the create group form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name'), + ); + $this->data['description'] = array( + 'name' => 'description', + 'id' => 'description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('description'), + ); + + $this->_render_page('auth_dst/create_group', $this->data); + } + } + + // edit a group + public function edit_group($id) + { + // bail if no group id given + if(!$id || empty($id)) + { + redirect('auth', 'refresh'); + } + + $this->data['title'] = $this->lang->line('edit_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + $group = $this->ion_auth->group($id)->row(); + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('edit_group_validation_name_label'), 'required|alpha_dash'); + + if (isset($_POST) && !empty($_POST)) + { + if ($this->form_validation->run() === TRUE) + { + $group_update = $this->ion_auth->update_group($id, $_POST['group_name'], $_POST['group_description']); + + if($group_update) + { + $this->session->set_flashdata('message', $this->lang->line('edit_group_saved')); + $this->data['message']=$this->lang->line('edit_group_saved'); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + $this->data['message']=$this->ion_auth->errors(); + } + + //redirect("auth", 'refresh'); + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth_dst/index', $this->data); + return; + } + } + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['group'] = $group; + + $readonly = $this->config->item('admin_group', 'ion_auth') === $group->name ? 'readonly' : ''; + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name', $group->name), + $readonly => $readonly, + ); + $this->data['group_description'] = array( + 'name' => 'group_description', + 'id' => 'group_description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_description', $group->description), + ); + + $this->_render_page('auth_dst/edit_group', $this->data); + } + + + public function _get_csrf_nonce() + { + $this->load->helper('string'); + $key = random_string('alnum', 8); + $value = random_string('alnum', 20); + $this->session->set_flashdata('csrfkey', $key); + $this->session->set_flashdata('csrfvalue', $value); + + return array($key => $value); + } + + public function _valid_csrf_nonce() + { + if ($this->input->post($this->session->flashdata('csrfkey')) !== FALSE && + $this->input->post($this->session->flashdata('csrfkey')) == $this->session->flashdata('csrfvalue')) + { + return TRUE; + } + else + { + return FALSE; + } + } + + + public function _render_page($view, $data=null, $returnhtml=false)//I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data: $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html;//This will return html on 3rd argument being true + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/C_test.php b/old_code_ci3/controllers/C_test.php new file mode 100644 index 0000000..6277aa1 --- /dev/null +++ b/old_code_ci3/controllers/C_test.php @@ -0,0 +1,95 @@ +load->library("Pdf"); + } + + public function create_pdf() { + + + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('TCPDF Example 001'); + $pdf->SetSubject('TCPDF Tutorial'); + $pdf->SetKeywords('TCPDF, PDF, example, test, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 14, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + // set text shadow effect + $pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $test= '

Report Sample Page TEsted

'; + // Set some content to print + $html = << + This is the first example of Report. + +

Please check the source code documentation and other examples for further information.

+ +EOD; + + // Print text using writeHTMLCell() + $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('example_002.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } +} + +/* End of file c_test.php */ +/* Location: ./application/controllers/c_test.php */ \ No newline at end of file diff --git a/old_code_ci3/controllers/Dashboard.php b/old_code_ci3/controllers/Dashboard.php new file mode 100644 index 0000000..8e94a84 --- /dev/null +++ b/old_code_ci3/controllers/Dashboard.php @@ -0,0 +1,133 @@ +1,i.ins_company_name,\'Direct\') as Ins_name, + if(o.insurance_id>1,i.short_name,\'Direct\') as Ins_short_name, + count(o.opd_id) as No_OPD + from opd_master o left join hc_insurance i on o.insurance_id=i.id + where date(o.apointment_date) =curdate() and (payment_mode>0 or running_opd=1) + group by o.insurance_id'; + + $query = $this->db->query($sql); + $data['opd_count']= $query->result(); + + $sql='select count(*) as T_opd + from opd_master o left join hc_insurance i on o.insurance_id=i.id + where date(o.apointment_date) =curdate() and (payment_mode>0 or running_opd=1) '; + + $query = $this->db->query($sql); + $data['opd_count_total']= $query->result(); + + $sql="select v.doc_name,v.doc_list,count(v.id) as No_patient, + sum(if(v.ipd_status=0,1,0)) as Admit_Current, + sum(if(v.discharge_date=curdate(),1,0)) as Discharge_Day, + sum(if(v.register_date=curdate(),1,0)) as Admit_Day + from v_ipd_list v + where curdate() between v.register_date and if(v.discharge_date is null,sysdate(),v.discharge_date) + group by v.doc_list + order by v.doc_name"; + $query = $this->db->query($sql); + $data['ipd_doc_total']= $query->result(); + + + $sql="select d.id as doc_id, d.p_fname,count(DISTINCT o.opd_id) as No_opd, + sum(if(o.payment_mode=4,1,0)) as Org_OPD, + sum(if(o.payment_mode IN (1,2),1,0)) as Direct_OPD, + MOD(d.id,5) as color_code + from (doctor_master d + join opd_master o on d.id=o.doc_id and o.apointment_date =CURDATE()) + group by d.id + having count(DISTINCT o.opd_id)>0 + order by d.p_fname"; + $query = $this->db->query($sql); + $data['opd_doc_wise']= $query->result(); + + if (stristr(PHP_OS, 'win')) { + $load = "3"; + $memory_usage="4"; + $disksize=""; + $disksizetotal=""; + $bytesPer=""; + } else { + //Disk Size Status + $bytes = disk_free_space("."); + $bytestotal=disk_total_space("."); + + $si_prefix = array( 'B', 'KB', 'MB', 'GB', 'TB', 'EB', 'ZB', 'YB' ); + $base = 1024; + $class = min((int)log($bytes , $base) , count($si_prefix) - 1); + + $bytesPer=round($bytes*100/$bytestotal,2); + + $disksize= sprintf('%1.2f' , $bytes / pow($base,$class)) . ' ' . $si_prefix[$class] . '
'; + $disksizetotal= sprintf('%1.2f' , $bytestotal / pow($base,$class)) . ' ' . $si_prefix[$class] . '
'; + + + $free = shell_exec('free'); + $free = (string)trim($free); + $free_arr = explode("\n", $free); + $mem = explode(" ", $free_arr[1]); + $mem = array_filter($mem); + $mem = array_merge($mem); + $memory_usage = round($mem[2]/$mem[1]*100,2); + + $sys_load = sys_getloadavg(); + $load = $sys_load[0]; + + } + + $data['load'] = $load; + $data['mem'] = $memory_usage ; + $data['dsize'] = $disksize ; + $data['dsizetot'] = $disksizetotal ; + $data['bytesPer'] = $bytesPer ; + + $sql="select count(*) as no_rec from ipd_master where ipd_status=0"; + $query = $this->db->query($sql); + $data['ipd_count']= $query->result(); + + $data['no_admit_ipd']=$data['ipd_count'][0]->no_rec; + + $sql="select count(*) as no_rec from ipd_master where ipd_status=1 and discharge_date=Date(sysdate())"; + $query = $this->db->query($sql); + $data['ipd_count']= $query->result(); + + $data['no_admit_ipd_discharge']=$data['ipd_count'][0]->no_rec; + + $sql="select count(*) as no_rec from ipd_master where register_date=Date(sysdate())"; + $query = $this->db->query($sql); + $data['ipd_count']= $query->result(); + + $data['no_admit_ipd_admit']=$data['ipd_count'][0]->no_rec; + + $sql="select count(*) as no_rec from ipd_master where ipd_status=0 and case_id>0"; + $query = $this->db->query($sql); + $data['ipd_count']= $query->result(); + + $data['no_admit_ipd_org']=$data['ipd_count'][0]->no_rec; + + $sql="select o.insurance_id, + i.ins_company_name , + i.short_name, + count(o.id) as No_IPD + from (organization_case_master o join hc_insurance i on o.insurance_id=i.id) + join ipd_master m on o.id=m.case_id + where ipd_status=0 and m.case_id>0 and o.insurance_id>0 + group by o.insurance_id"; + $query = $this->db->query($sql); + $data['ipd_org_list']= $query->result(); + + $this->load->view('dashboard/dash1',$data); + } + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Data.php b/old_code_ci3/controllers/Data.php new file mode 100644 index 0000000..e6abe35 --- /dev/null +++ b/old_code_ci3/controllers/Data.php @@ -0,0 +1,156 @@ +load->database(); + } + + public function index() + { + $sql="select * from payment_mode"; + $query = $this->db->query($sql); + $data['pay_mode']= $query->result(); + + $this->load->view('Report/opd_report_v',$data); + } + + public function getTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'opd_code', + 1 => 'P_name', + 2 => 'p_code', + 3=> 'App_Date', + 4=> 'doc_name', + 5=> 'Inv_Type', + 6=> 'PaymentMode', + 7=> 'opd_fee_amount' + ); + + // getting total number records without any search + $sql_f_all = "select o.opd_code,o.P_name,o.p_id,Date_Format(o.apointment_date,'%d-%m-%Y') as App_Date, + o.doc_name,if(o.insurance_id>1,'Org.','Direct') as Inv_Type,p_code, + o.insurance_id,o.insurance_credit, + m.mode_desc as PaymentMode,o.payment_mode, + o.opd_fee_gross_amount,o.opd_discount,o.opd_fee_amount,o.apointment_date,o.payment_mode"; + + $sql_count="Select count(*) as no_rec,sum(o.opd_fee_amount) as t_opd_fee_amount "; + + $sql_from=" from opd_master o join payment_mode m join patient_master p on o.payment_mode=m.id and p.id=o.p_id"; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1 = 1"; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //name + $sql_where.=" AND o.opd_code LIKE '%".$requestData['columns'][0]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //salary + $sql_where.=" AND o.P_name LIKE '%".$requestData['columns'][1]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][3]['search']['value']) ){ //salary + $sql_where.=" AND o.doc_name LIKE '%".$requestData['columns'][3]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][2]['search']['value']) ){ //salary + $sql_where.=" AND p_code LIKE '%".$requestData['columns'][2]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][4]['search']['value']) ){ //age + + if($requestData['columns'][4]['search']['value']=='1') + { + $sql_where.=" AND o.insurance_id<=1 "; + }else + { + $sql_where.=" AND o.insurance_id>1 "; + } + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][5]['search']['value'])){ //age + $sql_where.=" AND o.payment_mode=".$requestData['columns'][5]['search']['value']; + $sql_where_flag=1; + }elseif($requestData['columns'][5]['search']['value']=='0') + { + $sql_where.=" AND o.payment_mode=".$requestData['columns'][5]['search']['value']; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][6]['search']['value']) ) + { //OPD Date Range + $rangeArray = explode("/",$requestData['columns'][6]['search']['value']); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + $sql_where.=" AND ( Date(o.apointment_date) between '".$minRange."' AND '".$maxRange."' ) "; + $sql_where_flag=1; + } + + if($sql_where_flag==0) + { + $sql_where.=" AND Date(o.apointment_date) = curdate() "; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + $foot_t_sum=$data['total_rec_filter'][0]->t_opd_fee_amount; + + $sql_order=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "foot_t_sum" => $foot_t_sum, + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/controllers/Doc_Admin.php b/old_code_ci3/controllers/Doc_Admin.php new file mode 100644 index 0000000..39eb8d1 --- /dev/null +++ b/old_code_ci3/controllers/Doc_Admin.php @@ -0,0 +1,348 @@ +db->query($sql); + $data['doc_master']= $query->result(); + + $this->load->view('DocAdmin/doc_list',$data); + } + + public function docedit_load($doc_id=0) + { + $sql="select * from doc_format_master where df_id=".$doc_id; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + + $sql="select m.df_id,m.doc_name,s.input_name,s.input_code,s.short_order,s.id as item_id + from (doc_format_master m join doc_format_sub s on m.df_id=s.doc_format_id) + where m.df_id=".$doc_id. " order by s.short_order" ; + $query = $this->db->query($sql); + $data['doc_Item_List']= $query->result(); + + $sql="select * from doc_pre_input"; + $query = $this->db->query($sql); + $data['doc_pre_input']= $query->result(); + + + $sql="select * from color "; + $query = $this->db->query($sql); + $data['color_name']= $query->result(); + + $this->load->view('DocAdmin/doc_master_edit',$data); + } + + public function report_insert() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('DocFormat_M'); + + $FormRules = array( + array( + 'field' => 'input_docname', + 'label' => 'Name', + 'rules' => 'required|min_length[1]|max_length[100]|is_unique[lab_repo.Title]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + $insertid=0; + $showcontent=""; + if ($this->form_validation->run() == TRUE) + { + $id_key=$this->input->post('df_id'); + $data = array( + 'doc_name'=> $this->input->post('input_docname'), + 'doc_desc'=> $this->input->post('input_doc_desc'), + 'doc_raw_format'=> $this->input->post('HTMLData') + ); + $insertid=$this->DocFormat_M->insert_master($data); + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + + + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + $rvar=array( + 'insertid' => $insertid, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function report_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('DocFormat_M'); + + $id_key=$this->input->post('df_id'); + + $update_record=0; + + $FormRules = array( + array( + 'field' => 'input_docname', + 'label' => 'Name', + 'rules' => 'required|min_length[1]|max_length[100]|is_unique[lab_repo.Title]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'doc_name'=> $this->input->post('input_docname'), + 'doc_desc'=> $this->input->post('input_doc_desc'), + 'doc_raw_format'=> $this->input->post('HTMLData') + ); + + $this->DocFormat_M->update_master($data,$id_key); + + $update_record=1; + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + + $rvar=array( + 'update_record' => $update_record, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function doc_input_list($doc_id) + { + $sql="select m.df_id,s.id,m.doc_name,s.input_name,s.input_code,s.short_order,s.id as item_id + from (doc_format_master m join doc_format_sub s on m.df_id=s.doc_format_id) + where m.df_id=".$doc_id. " order by s.short_order" ; + $query = $this->db->query($sql); + $data['doc_Item_List']= $query->result(); + + $data['doc_id']=$doc_id; + + $this->load->view('DocAdmin/doc_input_list',$data); + } + + public function input_parameter_load($item_id,$doc_id) + { + $sql="select m.df_id,s.id,m.doc_name,s.input_name,s.input_code,s.short_order,s.id as item_id,s.input_type,s.input_default_value + from (doc_format_master m join doc_format_sub s on m.df_id=s.doc_format_id) + where m.df_id=".$doc_id. " and s.id=".$item_id." order by s.short_order" ; + $query = $this->db->query($sql); + $data['input_parameter']= $query->result(); + + $data['doc_id']=$doc_id; + + $this->load->view('DocAdmin/doc_item_edit',$data); + } + + public function input_parameter_edit() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('DocFormat_M'); + + $doc_id=$this->input->post('doc_id'); + $doc_sub_id=$this->input->post('doc_sub_id'); + $input_input_code=$this->input->post('input_input_code'); + + $sql="select * from doc_format_sub where id=".$doc_sub_id." and input_code='".$input_input_code."' and doc_format_id=".$doc_id; + $query = $this->db->query($sql); + $doc_input_list= $query->result(); + + $FormRules = array( + array( + 'field' => 'input_input_name', + 'label' => 'Input Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_input_code', + 'label' => 'Input Code', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + $update_value=1; + $showcontent=""; + if ($this->form_validation->run() == TRUE) + { + $udata = array( + 'doc_format_id'=> $this->input->post('doc_id'), + 'input_name'=> $this->input->post('input_input_name'), + 'input_code'=> $this->input->post('input_input_code'), + 'input_type'=> $this->input->post('input_type'), + 'input_default_value'=> $this->input->post('input_default_value') + ); + + $this->DocFormat_M->update_sub($udata,$doc_sub_id); + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + }else{ + $update_value=0; + + if(count($doc_input_list)>0) + { + $showcontent =Show_Alert('danger','Error','Already Exist'); + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + } + + $rvar=array( + 'update_value' => $update_value, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function input_parameter_add() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('DocFormat_M'); + + $doc_id=$this->input->post('doc_id'); + $input_input_code=$this->input->post('input_input_code'); + + $sql="select * from doc_format_sub where input_code='".$input_input_code."' and doc_format_id=".$doc_id; + $query = $this->db->query($sql); + $doc_input_list= $query->result(); + + $FormRules = array( + array( + 'field' => 'input_input_name', + 'label' => 'Input Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_input_code', + 'label' => 'Input Code', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + $insert_id=0; + $showcontent=""; + if ($this->form_validation->run() == TRUE && count($doc_input_list)==0 ) + { + $sql="select max(short_order) as max_short_order from doc_format_sub where doc_format_id=".$doc_id; + $query = $this->db->query($sql); + $doc_short_order= $query->result(); + + $MEOrder=0; + if(count($doc_short_order)>0) + { + $MEOrder=$doc_short_order[0]->max_short_order; + } + + if($MEOrder === NULL) + { + $MEOrder=1; + }else{ + $MEOrder=$MEOrder+1; + } + + $udata = array( + 'doc_format_id'=> $this->input->post('doc_id'), + 'input_name'=> $this->input->post('input_input_name'), + 'input_code'=> $this->input->post('input_input_code'), + 'input_type'=> $this->input->post('input_type'), + 'input_default_value'=> $this->input->post('input_default_value') , + 'short_order'=> $MEOrder + ); + + $insert_id=$this->DocFormat_M->insert_sub($udata); + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + }else{ + $insert_id=0; + if(count($doc_input_list)>0) + { + $showcontent =Show_Alert('danger','Error','Already Exist'); + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + } + + + $rvar=array( + 'insert_id' => $insert_id, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function change_sort_item($doc_id,$option_id,$current,$change_option_id,$change) + { + $this->load->model('DocFormat_M'); + + $udata = array( + 'short_order'=> 0 + ); + $this->DocFormat_M->update_sub($udata,$option_id); + + $udata = array( + 'short_order'=> $current + ); + $this->DocFormat_M->update_sub($udata,$change_option_id); + + $udata = array( + 'short_order'=> $change + ); + $this->DocFormat_M->update_sub($udata,$option_id); + + $sql="select m.df_id,m.doc_name,s.input_name,s.input_code,s.short_order,s.id as item_id + from (doc_format_master m join doc_format_sub s on m.df_id=s.doc_format_id) + where m.df_id=".$doc_id. " order by s.short_order" ; + $query = $this->db->query($sql); + $data['doc_Item_List']= $query->result(); + + $data['doc_id']=$doc_id; + + $this->load->view('DocAdmin/doc_input_list',$data); + + } + + public function remove_input_item($doc_id,$doc_sub_id) + { + $this->db->delete("doc_format_sub", "doc_format_id=".$doc_id." and id=".$doc_sub_id); + + } + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Doctor.php b/old_code_ci3/controllers/Doctor.php new file mode 100644 index 0000000..daac2e7 --- /dev/null +++ b/old_code_ci3/controllers/Doctor.php @@ -0,0 +1,303 @@ +load->view('Doctor_Profile/Doctor_V'); + } + + public function search() + { + + $sql = "SELECT * FROM doctor_master "; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('Doctor_Profile/Doctor_Search_V',$data); + + } + + function doctor_record($pno) + { + + $sql="select * from doctor_master where id=$pno"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select m.SpecName,m.id,d.doc_id,d.med_spec_id,d.id as doc_spec_id + from med_spec m join doc_spec d on m.id =d.med_spec_id where d.doc_id=".$pno; + $query = $this->db->query($sql); + $data['doc_spec_a']= $query->result(); + + $sql="select * from med_spec order by SpecName"; + $query = $this->db->query($sql); + $data['doc_spec_l']= $query->result(); + + $sql="select * from doc_fee_type order by fee_type"; + $query = $this->db->query($sql); + $data['doc_fee_type']= $query->result(); + + $sql="select d.id ,f.fee_type ,d.doc_fee_desc,d.amount + from doc_opd_fee d right join doc_fee_type f on d.doc_fee_type=f.id and d.doc_id=".$pno; + $query = $this->db->query($sql); + $data['doc_fee_list']= $query->result(); + + + $this->load->view('Doctor_Profile/Doctor_profile_V',$data); + } + + function doctor_record_spec() + { + + $this->load->model('Doctor_M'); + + if($this->input->post('isadd')==1) + { + $sql="select * from doc_spec where doc_id='".$this->input->post('doc_id')."' and med_spec_id='".$this->input->post('doc_spec')."'"; + $query = $this->db->query($sql); + $no_rec= $query->num_rows(); + if($no_rec==0) + { + $data = array( + 'doc_id' => $this->input->post('doc_id'), + 'med_spec_id' => $this->input->post('doc_spec') + ); + $inser_id=$this->Doctor_M->insert_spec($data); + $rvar=array( + 'insertid' =>$inser_id + ); + } + + }else{ + + $this->db->delete("doc_spec", "id=".$this->input->post('doc_spec_id')); + } + + + $sql="select m.SpecName,m.id,d.doc_id,d.med_spec_id,d.id as doc_spec_id from med_spec m join doc_spec d on m.id =d.med_spec_id where d.doc_id=".$this->input->post('doc_id'); + $query = $this->db->query($sql); + $data['doc_spec_a']= $query->result(); + + $show_Specility_list=""; + + foreach($data['doc_spec_a'] as $row) + { + + $show_Specility_list.= '
'; + $show_Specility_list.= ' '; + $show_Specility_list.= ' '; + $show_Specility_list.= ' '; + $show_Specility_list.= '
'; + } + + $rvar=array( + 'update' =>1, + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'show_Specility_list' => $show_Specility_list + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + + } + + public function UpdateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Doctor_M'); + $data = array( + 'p_title' => $this->input->post('select_title'), + 'mphone1' => $this->input->post('input_mphone1'), + 'p_fname' => $this->input->post('input_name'), + 'gender' => $this->input->post('optionsRadios_gender'), + 'dob' => str_to_MysqlDate($this->input->post('datepicker_dob')), + 'zip' => $this->input->post('input_zip'), + 'doc_sign' => $this->input->post('txt_doc_sign'), + 'email1' => $this->input->post('input_email') + ); + $old_id=$this->input->post('doc_id'); + $update=$this->Doctor_M->update($data,$old_id); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function AddNew() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->library('form_validation'); + + $this->form_validation->set_rules('p_fname','Dr. Name','alpha_numeric_spaces|'); + $this->form_validation->set_rules('email1','Email','valid_email'); + $this->form_validation->set_rules('mphone1','MPhone','numeric'); + + $this->load->model('Doctor_M'); + + if($this->form_validation->run()) + { + $data = array( + 'p_title' => $this->input->post('select_title'), + 'mphone1' => $this->input->post('input_mphone1'), + 'p_fname' => $this->input->post('input_name'), + 'gender' => $this->input->post('optionsRadios_gender'), + 'dob' => str_to_MysqlDate($this->input->post('datepicker_dob')), + 'zip' => $this->input->post('input_zip'), + 'email1' => $this->input->post('input_email') + ); + + $inser_id=$this->Doctor_M->insert($data); + + redirect('Doctor/doctor_record/'.$inser_id); + + }else{ + $this->load->view('Doctor_Profile/Doctor_V'); + } + } + + public function remove_fee() + { + $this->load->model('Doctor_M'); + + $old_id=$this->input->post('rid'); + $update=$this->Doctor_M->delete_fee($old_id); + + $sql="select d.id ,f.fee_type ,d.doc_fee_desc,d.amount + from doc_opd_fee d join doc_fee_type f on d.doc_fee_type=f.id and d.doc_id=".$this->input->post('doc_id');; + $query = $this->db->query($sql); + $data['doc_fee_list']= $query->result(); + + $table_property = array('table_open' => ''); + $this->table->set_template($table_property); + $this->table->set_heading('Fee Type', 'description', 'Amount'); + foreach($data['doc_fee_list'] as $row) + { + if($row->id=='') + { + $button_code=' Not Define'; + }else{ + $button_code='Remove'; + } + + $this->table->add_row($row->fee_type, $row->doc_fee_desc, $row->amount,$button_code); + } + $show_fee_list= $this->table->generate(); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'showcontent'=> Show_Alert('success','Remove','Fee Removed successfully'), + 'show_fee_list' => $show_fee_list + ); + $encode_data = json_encode($rvar); + echo $encode_data; + }else{ + $rvar=array( + 'update' =>0, + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'showcontent'=> Show_Alert('danger','Error','Please Check') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function AddNew_fee() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + $this->load->model('Doctor_M'); + $data = array( + 'doc_id' => $this->input->post('doc_id'), + 'doc_fee_desc' => $this->input->post('input_fee_desc'), + 'doc_fee_type' => $this->input->post('fee_type'), + 'amount' => $this->input->post('input_fee_amount') + ); + + + $sql="select * from doc_opd_fee where + doc_id=".$this->input->post('doc_id'). " and doc_fee_type = ".$this->input->post('fee_type'); + $query = $this->db->query($sql); + $doc_fee_update= $query->result(); + + if(count($doc_fee_update)>0) + { + $old_id=$doc_fee_update[0]->id; + $update=$this->Doctor_M->delete_fee($old_id); + } + + $inser_id=$this->Doctor_M->insert_fee($data); + + $sql="select d.id ,f.fee_type ,d.doc_fee_desc,d.amount + from doc_opd_fee d join doc_fee_type f on d.doc_fee_type=f.id + and d.doc_id=".$this->input->post('doc_id')." order by f.id"; + $query = $this->db->query($sql); + $data['doc_fee_list']= $query->result(); + + $table_property = array('table_open' => '
'); + $this->table->set_template($table_property); + $this->table->set_heading('Fee Type', 'description', 'Amount'); + foreach($data['doc_fee_list'] as $row) + { + if($row->id=='') + { + $button_code=' Not Define'; + }else{ + $button_code='Remove'; + } + + $this->table->add_row($row->fee_type, $row->doc_fee_desc, $row->amount,$button_code); + + } + + $show_fee_list= $this->table->generate(); + + if($inser_id>0) + { + $rvar=array( + 'inser_id' =>1, + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'showcontent'=> Show_Alert('success','Added','Fee added successfully'), + 'show_fee_list' => $show_fee_list + ); + $encode_data = json_encode($rvar); + echo $encode_data; + }else{ + $rvar=array( + 'inser_id' =>0, + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'showcontent'=> Show_Alert('danger','Error','Please Check') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + + +} + diff --git a/old_code_ci3/controllers/Document_Patient.php b/old_code_ci3/controllers/Document_Patient.php new file mode 100644 index 0000000..5bd89b6 --- /dev/null +++ b/old_code_ci3/controllers/Document_Patient.php @@ -0,0 +1,418 @@ +load->model('DocFormat_M'); + } + + function p_doc_record($pno) + { + $sql = "select *,IFNULL(GET_AGE_BY_DOB(dob),age) as str_age,Date_Format(insert_date,'%Y-%m-%d') as str_regdate,if(gender=1,'Male','Female') as xgender from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $sql = "select * from doc_format_master where active=1 "; + $query = $this->db->query($sql); + $data['doc_format'] = $query->result(); + + $sql = "select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $sql = "select patient_doc.*,date_format(patient_doc.date_issue,'%d-%m-%Y') as str_date_issue,doc_format_master.doc_name + from patient_doc join doc_format_master + on patient_doc.doc_format_id = doc_format_master.df_id + where p_id=" . $pno . " order by date_issue desc"; + $query = $this->db->query($sql); + $data['patient_doc'] = $query->result(); + + $data['pno'] = $pno; + + + $this->load->view('DocumentPatient/Patient_Doc_master', $data); + } + + function create_doc() + { + + $pno = $this->input->post('patient_id'); + $document_format_id = $this->input->post('document_format_id'); + $dr_id = $this->input->post('doc_id'); + $doc_issue_date = $this->input->post('doc_issue_date'); + + $sql = "Select * from doc_format_master where df_id=" . $document_format_id; + $query = $this->db->query($sql); + $data_report_format = $query->result(); + + if (count($data_report_format) > 0) { + $Report_string = $data_report_format[0]->doc_raw_format; + } else { + $Report_string = ""; + } + + $sql = "Select * from doc_pre_input where table_name='patient_master_exten'"; + $query = $this->db->query($sql); + $data_pre_input = $query->result(); + + $sql = "Select * from doctor_master where id='" . $dr_id . "'"; + $query = $this->db->query($sql); + $data_doctor_master = $query->result(); + + $sql = "Select * from patient_master_exten where id=" . $pno; + $query = $this->db->query($sql); + $data_patient_master = $query->result_array();; + + if (count($data_doctor_master) > 0) { + $Report_string = str_replace('{dr_name}', '' . $data_doctor_master[0]->p_fname, $Report_string); + $Report_string = str_replace('{dr_sign}', '' . $data_doctor_master[0]->doc_sign, $Report_string); + } + + $Report_string = str_replace('{current_date}', date('d-m-Y'), $Report_string); + $Report_string = str_replace('{issue_date}', $doc_issue_date, $Report_string); + + for ($i = 0; $i < count($data_pre_input); ++$i) { + if (isset($data_patient_master[0][$data_pre_input[$i]->field_name])) { + $Change_Value = $data_patient_master[0][$data_pre_input[$i]->field_name]; + $Report_string = str_replace('{' . $data_pre_input[$i]->input_code . '}', $Change_Value, $Report_string); + } + } + + $udata = array( + 'raw_data' => $Report_string, + 'doc_format_id' => $document_format_id, + 'p_id' => $pno, + 'dr_id' => $dr_id, + 'date_issue' => str_to_MysqlDate($doc_issue_date) + ); + + $insert_id = $this->DocFormat_M->insert_patient_doc($udata); + + $sql = "select * from doc_format_sub s where doc_format_id=" . $document_format_id; + $query = $this->db->query($sql); + $doc_format_sub = $query->result_array();; + + foreach ($doc_format_sub as $row) { + $sql = "select * from patient_doc_raw + where p_id=" . $pno . " and p_doc_id=" . $insert_id . " and p_doc_sub_id='" . $row['id'] . "' "; + $query = $this->db->query($sql); + $chktestlist = $query->result(); + + if (count($chktestlist) < 1) { + $udata = array( + 'p_id' => $pno, + 'p_doc_id' => $insert_id, + 'p_doc_sub_id' => $row['id'], + 'p_doc_raw_value' => $row['input_default_value'], + ); + + $insert_sub_id = $this->DocFormat_M->insert_patient_doc_raw($udata); + } + } + + echo $insert_id; + } + + function re_create_doc($doc_id) + { + $sql = "Select *,date_format(date_issue,'%d-%m-%Y') as str_date_issue from patient_doc where id=" . $doc_id; + $query = $this->db->query($sql); + $patient_doc = $query->result(); + + $pno = $patient_doc[0]->p_id; + $document_format_id = $patient_doc[0]->doc_format_id; + $dr_id = $patient_doc[0]->dr_id; + $doc_issue_date = $patient_doc[0]->str_date_issue; + + $sql = "Select * from doc_format_master where df_id=" . $document_format_id; + $query = $this->db->query($sql); + $data_report_format = $query->result(); + + if (count($data_report_format) > 0) { + $Report_string = $data_report_format[0]->doc_raw_format; + } else { + $Report_string = ""; + } + + $sql = "Select * from doc_pre_input where table_name='patient_master_exten'"; + $query = $this->db->query($sql); + $data_pre_input = $query->result(); + + $sql = "Select * from doctor_master where id='" . $dr_id . "'"; + $query = $this->db->query($sql); + $data_doctor_master = $query->result(); + + $sql = "Select * from patient_master_exten where id=" . $pno; + $query = $this->db->query($sql); + $data_patient_master = $query->result_array();; + + if (count($data_doctor_master) > 0) { + $Report_string = str_replace('{dr_name}', '' . $data_doctor_master[0]->p_fname, $Report_string); + $Report_string = str_replace('{dr_sign}', '' . nl2br($data_doctor_master[0]->doc_sign), $Report_string); + } + + $Report_string = str_replace('{current_date}', date('d-m-Y'), $Report_string); + $Report_string = str_replace('{issue_date}', $doc_issue_date, $Report_string); + + for ($i = 0; $i < count($data_pre_input); ++$i) { + if (isset($data_patient_master[0][$data_pre_input[$i]->field_name])) { + $Change_Value = $data_patient_master[0][$data_pre_input[$i]->field_name]; + $Report_string = str_replace('{' . $data_pre_input[$i]->input_code . '}', $Change_Value, $Report_string); + } + } + + $udata = array( + 'raw_data' => $Report_string, + 'doc_format_id' => $document_format_id, + 'p_id' => $pno, + ); + + $update_id = $this->DocFormat_M->update_patient_doc($udata, $doc_id); + + redirect('/Document_Patient/Pre_Data/' . $doc_id); + } + + function Pre_Data($patient_doc_id) + { + $sql = "Select * from patient_doc where id=" . $patient_doc_id; + $query = $this->db->query($sql); + $data['patient_doc'] = $query->result(); + + $doc_format_id = $data['patient_doc'][0]->doc_format_id; + $pno = $data['patient_doc'][0]->p_id; + + $sql = "select p.*,s.input_name,s.input_type + from (patient_doc_raw p join patient_doc m on m.id=p.p_doc_id) + join doc_format_sub s on s.doc_format_id=m.doc_format_id and p.p_doc_sub_id=s.id + where p.p_doc_id=" . $patient_doc_id; + $query = $this->db->query($sql); + $data['doc_format_sub'] = $query->result(); + + $sql = "select *,IFNULL(GET_AGE_BY_DOB(dob),age) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate,if(gender=1,'Male','Female') as xgender + from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $data['patient_doc_id'] = $patient_doc_id; + + $this->load->view('DocumentPatient/Doc_update_pre_value', $data); + } + + public function Entry_Update() + { + $test_id = $this->input->post('test_id'); + $test_value = $this->input->post('test_value'); + + $udata = array( + 'p_doc_raw_value' => $test_value, + 'update_data' => '1', + ); + + $this->DocFormat_M->update_patient_doc_raw($udata, $test_id); + + $sql = "select p_doc_raw_value from patient_doc_raw where id=" . $test_id; + $query = $this->db->query($sql); + $data_value = $query->result(); + + echo $data_value[0]->p_doc_raw_value; + } + + public function update_doc_field($p_doc_id) + { + $sql = "SELECT * from patient_doc_raw where update_data=0 and p_doc_id=" . $p_doc_id; + $query = $this->db->query($sql); + $data_value_pending = $query->result(); + + if (count($data_value_pending) > 0) { + $rvar = array( + 'update' => 0, + 'error_text' => 'Some Field Pending', + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $sql = "Select * from patient_doc where id=" . $p_doc_id; + $query = $this->db->query($sql); + $data_report_format = $query->result(); + + if (count($data_report_format) > 0) { + $Report_string = $data_report_format[0]->raw_data; + } else { + $Report_string = ""; + } + + $sql = "SELECT p.*,s.input_name,s.input_code from patient_doc_raw p join doc_format_sub s ON p.p_doc_sub_id=s.id + where p_doc_id=" . $p_doc_id; + $query = $this->db->query($sql); + $data_value = $query->result(); + + for ($i = 0; $i < count($data_value); ++$i) { + if (isset($data_value[$i]->p_doc_raw_value)) { + $Change_Value = nl2br($data_value[$i]->p_doc_raw_value); + $Report_string = str_replace('{' . $data_value[$i]->input_code . '}', $Change_Value, $Report_string); + } + } + + $udata = array( + 'raw_data' => $Report_string, + 'update_pre_value' => 1, + ); + + $this->DocFormat_M->update_patient_doc($udata, $p_doc_id); + + $rvar = array( + 'update' => 1, + 'error_text' => 'Complie Done', + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + + function load_doc($patient_doc_id) + { + $sql = "Select * from patient_doc where id=" . $patient_doc_id; + $query = $this->db->query($sql); + $data['patient_doc'] = $query->result(); + + $pno = 0; + + if (count($data['patient_doc']) > 0) { + $pno = $data['patient_doc'][0]->p_id; + } + + $sql = "Select * from patient_master_exten where id=" . $pno; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $this->load->view('DocumentPatient/Patient_Doc_Edit', $data); + } + + function create_final($patient_doc_id, $print_on_type = 0) + { + $sql = "Select *,date_format(date_issue,'%d-%m-%Y') as str_date_issue from patient_doc where id=" . $patient_doc_id; + $query = $this->db->query($sql); + $patient_doc = $query->result(); + + $sql = "Select count(*) as No_Rec from file_upload_data where doc_id=" . $patient_doc_id; + $query = $this->db->query($sql); + $print_doc = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $print_no_rec = $print_doc[0]->No_Rec + 1; + $doc_issue_date = $patient_doc[0]->str_date_issue; + + $content = ''; + if (count($patient_doc) > 0) { + $content = '
+ + + + + + +
Document Ref. No.' . date('Y') . '/' . $print_no_rec . '/' . $patient_doc_id . 'Date : ' . $doc_issue_date . '
'; + + $content .= $patient_doc[0]->raw_data; + $data['bar_content'] = 'Document Ref. No.' . date('Y') . '/' . $print_no_rec . '/' . $patient_doc_id . '/' . $doc_issue_date; + } + + $data['content'] = $content; + $data['print_on_type'] = $print_on_type; + + $folder_name = 'uploads/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $report_head = 'Patient Document'; + + $file_name = 'Document-' . $patient_doc_id . "-" . $print_no_rec . "-" . date('Ymdhis') . ".pdf"; + + $filepath = $folder_name . '/' . $file_name; + + $udata = array( + 'file_name' => $file_name, + 'file_type' => 'pdf', + 'file_path' => $folder_name, + 'full_path' => $filepath, + 'orig_name' => $file_name, + 'client_name' => 'system_genrate', + 'file_ext' => '.pdf', + 'upload_by' => $user_name, + 'pid' => $patient_doc[0]->p_id, + 'doc_id' => $patient_doc_id, + 'case_id' => 0, + 'file_desc' => $report_head, + 'charge_id' => 0 + ); + + $this->load->model('File_M'); + + $this->File_M->insert($udata); + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + if ($print_on_type == 1) { + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = true; + } + + $doc_content = $this->load->view('DocAdmin/doc_letterhead_print', $data, TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($doc_content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } + + function update_doc() + { + $document_id = $this->input->post('document_id'); + $HTMLData = $this->input->post('HTMLData'); + + $udata = array( + 'raw_data' => $HTMLData + ); + + $update_value = 1; + $showcontent = ""; + + $update_value = $this->DocFormat_M->update_patient_doc($udata, $document_id); + + if ($update_value > 0) { + $showcontent = Show_Alert('success', 'Saved', 'Data Saved successfully'); + } else { + $showcontent = Show_Alert('danger', 'Error', validation_errors()); + } + + $rvar = array( + 'update_value' => $update_value, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } +} diff --git a/old_code_ci3/controllers/DotPrint.php b/old_code_ci3/controllers/DotPrint.php new file mode 100644 index 0000000..64f6f2a --- /dev/null +++ b/old_code_ci3/controllers/DotPrint.php @@ -0,0 +1,165 @@ +db->query($sql); + $invoiceDetails= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $invoiceGtotal= $query->result(); + + $sql="select *,(case payment_mode when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'IPD Credit' when 4 then 'Org. Credit' else 'Pending' end) as Payment_type_str from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender,if(age is null,Get_Age(dob),Concat(age,' ',age_in)) AS age from patient_master where id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $patient_master= $query->result(); + + $sql="select *,(case payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' else 'Other' end) as Payment_type_str from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $PrintData=' SOBAN SINGH JEEN BASE HOSPITAL , HALDWANI'.PHP_EOL; + $PrintData.='------------------------------------------------------------------------------'.PHP_EOL; + + $PatientID= 'Patient ID : '.$patient_master[0]->p_code; + $PatientName='Patient Name : '.$patient_master[0]->p_fname; + $PatientGA='Gender / Age : '.$patient_master[0]->xgender.'/'.$patient_master[0]->age; + $InoviceID= 'Invoice ID : '.$invoice_master[0]->invoice_code; + + + $PrintData.=str_pad($PatientID,35,' ',STR_PAD_RIGHT); + $PrintData.=str_pad($PatientName,35,' ',STR_PAD_RIGHT).PHP_EOL; + + $PrintData.=str_pad($InoviceID,35,' ',STR_PAD_RIGHT); + $PrintData.=str_pad($PatientGA,35,' ',STR_PAD_RIGHT).PHP_EOL; + + $PrintData.='------------------------------------------------------------------------------'.PHP_EOL; + $PrintData.=' '.PHP_EOL; + $PrintData.='# LAB Charge Name Rate Qty Amount '.PHP_EOL; + $PrintData.='------------------------------------------------------------------------------'.PHP_EOL; + + $srno=1; + foreach($invoiceDetails as $row) + { + $line=''; + $line.=str_pad($srno,3,' ',STR_PAD_RIGHT); + $line.=str_pad($row->group_desc,12,' ',STR_PAD_RIGHT); + $line.=str_pad($row->item_name,35,' ',STR_PAD_RIGHT); + $line.=str_pad($row->item_rate,10,' ',STR_PAD_LEFT); + $line.=str_pad($row->item_qty,7,' ',STR_PAD_LEFT); + $line.=str_pad($row->item_amount,10,' ',STR_PAD_LEFT); + + $srno=$srno+1; + $PrintData.=$line.PHP_EOL; + } + + $PrintData.='------------------------------------------------------------------------------'.PHP_EOL; + + $PrintData.=str_pad('Gross Total : '.$invoiceGtotal[0]->Gtotal,77,' ',STR_PAD_LEFT).PHP_EOL; + + if($invoice_master[0]->discount_amount>0) + { + $PrintData.=PHP_EOL; + $PrintData.=str_pad('Gross Total : '.$invoice_master[0]->discount_amount,77,' ',STR_PAD_LEFT).PHP_EOL ; + } + + if($invoice_master[0]->ipd_id<1) { + + $PrintData.=str_pad('Received Amt.:'.$invoice_master[0]->payment_part_received,26,' ',STR_PAD_RIGHT); + $PrintData.=str_pad('Balance Amt : '.$invoice_master[0]->payment_part_balance,26,' ',STR_PAD_RIGHT); + $PrintData.=str_pad('Net Amt : '.$invoice_master[0]->net_amount,26,' ',STR_PAD_LEFT).PHP_EOL; + } + + if($invoice_master[0]->correction_amount>0) + { + $PrintData.=str_pad('Correction : '.$invoice_master[0]->correction_remark,44,' ',STR_PAD_RIGHT); + $PrintData.=str_pad('Correction Amt : '.$invoice_master[0]->correction_amount,22,' ',STR_PAD_Left); + + $PrintData.=str_pad('Final Amount : '.$invoice_master[0]->correction_net_amount,77,' ',STR_PAD_LEFT).PHP_EOL; + } + + + $folder_name='uploads/printtemp'; + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $output_dir = $folder_name; + $filename=date('Ymdhis').$invoice_master[0]->invoice_code.'.TXT'; + $PrintData.=PHP_EOL; + if($invoice_master[0]->payment_mode>2) { + $PrintData.='Payment Details : '.$invoice_master[0]->Payment_type_str.' '.PHP_EOL; + }else{ + $PrintData.='Payment Details :'; + + foreach($payment_history as $row) + { + $PrintData.='['.$row->id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + $PrintData.=' '.PHP_EOL .PHP_EOL .PHP_EOL ; + } + + $PrintData.=str_pad('Prepared By : '.$invoice_master[0]->prepared_by,40,' ',STR_PAD_RIGHT).' '; + $PrintData.=str_pad(' Signature ',35,' ',STR_PAD_LEFT).' '.PHP_EOL; + + $myfile = fopen($output_dir.'/'.$filename, "w") or die("Unable to open file!"); + fwrite($myfile, $PrintData); + fclose($myfile); + + $this->load->model('DotPrint_M'); + + $insertdata = array( + 'created_by'=> $user_id, + 'file_type'=> 'TEXT', + 'file_name'=> $filename, + 'file_location'=>$folder_name + ); + + $inser_id=$this->DotPrint_M->insert( $insertdata); + + echo 'File Send To DotMatrix Printer / File ID : '.$inser_id; + } + + function read_dot_date($userid) + { + $user_id=str_replace('S',',',$userid); + + $sql="select id,file_type,file_name,file_location from dot_printer where print_status=0 and created_by in (".$user_id.")"; + $query = $this->db->query($sql); + $file_list= $query->result(); + + header('Content-type: application/json'); + echo json_encode($file_list); + } + + function printdone_dot($fileid,$print_by) + { + $this->load->model('DotPrint_M'); + + $updatedata = array( + 'print_status'=> '1', + 'print_by'=> $print_by + ); + + $updatestatus=$this->DotPrint_M->update( $updatedata,$fileid); + echo $updatestatus; + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/IPD_Nursing.php b/old_code_ci3/controllers/IPD_Nursing.php new file mode 100644 index 0000000..97352d0 --- /dev/null +++ b/old_code_ci3/controllers/IPD_Nursing.php @@ -0,0 +1,139 @@ +db->query($sql); + $data['data']= $query->result(); + + $this->load->view('IPD_Nursing/IPDList_V',$data); + } + + public function ipd_panel($ipdcode,$stype=0) + { + + if($stype > 0) + { + $sql="select id from ipd_master where ipd_code='".$ipdcode."' "; + $query = $this->db->query($sql); + $get_ipd_no= $query->result(); + + $ipdno=$get_ipd_no[0]->id; + }else{ + $ipdno=$ipdcode; + } + + //calculate_IPD + + $this->load->model('Ipd_M'); + $this->Ipd_M->calculate_IPD($ipdno); + + $sql="select * from v_ipd_list where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $p_id=$data['ipd_info'][0]->p_id; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age + from patient_master where id='".$p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select * + from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id + where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * + from organization_case_master + where status=0 and case_type=1 and ipd_id=$ipdno and p_id=".$p_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $data['ipd_master']=$ipd_master; + + $sql="select *,Date_Format(payment_date,'%d-%M-%Y') as pay_date_str, + Concat(if(payment_mode=1,'Cash','BANK'),if(credit_debit=0,'','-Return')) as pay_mode + from payment_history + where payof_type=4 and payof_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment_history']= $query->result(); + + $this->load->view('IPD_Nursing/IPD_Panel',$data); + } + + public function ipd_main_panel($ipdno) + { + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select * from v_ipd_list where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_list']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select i.id,d.p_fname,d.id as doc_id from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master + where id=".$data['ipd_info'][0]->case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from organization_case_master + where status=0 and case_type=1 and ipd_id=0 and p_id=".$data['ipd_info'][0]->p_id; + $query = $this->db->query($sql); + $data['case_master_open']= $query->result(); + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from org_approved_status "; + $query = $this->db->query($sql); + $data['org_approved_status']= $query->result(); + + $sql="select * from refer_master "; + $query = $this->db->query($sql); + $data['refer_master']= $query->result(); + + + + $this->load->view('IPD_Nursing/ipd_main_panel',$data); + } + + function ipd_treatment($ipd_id) + { + $sql="select * from ipd_treatment_chart where ipd_id=$ipd_id order by t_datetime"; + $query = $this->db->query($sql); + $data['ipd_treatment_chart']= $query->result(); + + + $this->load->view('IPD_Nursing/ipd_treatment',$data); + } + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Insurance.php b/old_code_ci3/controllers/Insurance.php new file mode 100644 index 0000000..1e53d71 --- /dev/null +++ b/old_code_ci3/controllers/Insurance.php @@ -0,0 +1,98 @@ +1 "; + $query = $this->db->query($sql); + $data['data']= $query->result(); + $this->load->view('insurance/insurance_search_v',$data); + } + + function insurance_record($id) + { + + $sql="select * from hc_insurance where id=".$id; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $this->load->view('insurance/insurance_profile_V',$data); + } + + public function UpdateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('insurance_M'); + $data = array( + 'ins_company_name' => $this->input->post('input_comp_name'), + 'short_name' => $this->input->post('input_short_name'), + 'ins_contact_number' => $this->input->post('input_mphone1'), + 'ins_contact_person_name' => $this->input->post('input_cname'), + 'ins_email' => $this->input->post('input_email'), + 'active' => $this->input->post('chk_active'), + 'opd_allowed' => $this->input->post('chk_opd_allowed'), + 'opd_fee' => $this->input->post('input_opd_fee'), + 'opd_rate_direct' => $this->input->post('optionsRadios_opd_rate_direct'), + 'opd_desc' => $this->input->post('input_opd_fee_desc'), + 'opd_master_rate_discount' => $this->input->post('input_opd_master_rate_discount'), + 'opd_credit' => $this->input->post('chk_opd_credit'), + 'opd_cash' => $this->input->post('chk_opd_cash'), + 'charge_credit' => $this->input->post('chk_charge_credit'), + 'charge_rate_direct' => $this->input->post('optionsRadios_charge_rate_direct'), + 'charge_rate_dicount' => $this->input->post('input_charge_rate_dicount'), + 'med_credit' => $this->input->post('chk_med_credit'), + + ); + $old_id=$this->input->post('p_id'); + $update=$this->insurance_M->update($data,$old_id); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function AddRecord() + { + $this->load->view('insurance/insurance_create_V'); + } + + public function CreateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('insurance_M'); + $data = array( + 'ins_company_name' => $this->input->post('input_comp_name'), + 'ins_contact_number' => $this->input->post('input_mphone1'), + 'ins_contact_person_name' => $this->input->post('input_cname'), + 'ins_email' => $this->input->post('input_email') + ); + + $inser_id=$this->insurance_M->insert($data); + + if($inser_id>0) + { + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Invoice.php b/old_code_ci3/controllers/Invoice.php new file mode 100644 index 0000000..f387cca --- /dev/null +++ b/old_code_ci3/controllers/Invoice.php @@ -0,0 +1,879 @@ +load->view('Invoice/Invoice_opd'); + } + + public function chargeslist() + { + $this->load->view('Invoice/Invoice_charges'); + } + + public function search_opd() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + $sql = "select o.opd_id, o.doc_name,o.opd_code,o.P_name,o.p_id,Date_Format(o.apointment_date,'%d-%m-%Y') as App_Date, + p.p_code,p.mphone1,p.email1 ,if(o.insurance_id>1,'Org.','Direct') as Inv_Type, + if(o.payment_status=1,m.mode_desc,'Pending') as PaymentMode,o.payment_mode + from (opd_master o join patient_master p on o.p_id=p.id ) join payment_mode m on o.payment_mode=m.id + WHERE opd_code like '%".$sdata."' or p_code like '%".$sdata."' or P_name like '%".$sdata."%' or + mphone1 = '".$sdata."' or email1 = '".$sdata."' order by o.opd_id desc limit 100"; + + $query = $this->db->query($sql); + $data['opd_list']= $query->result(); + + $this->load->view('Invoice/Invoice_opd_list',$data); + } + + public function search_charges() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_\-]/', '', $sdata); + + $sql = "select i.id as inv_id, i.refer_by_other,i.invoice_code,p.p_fname,i.attach_id, + Date_Format(i.inv_date,'%d-%m-%Y') as Inv_Date,p.p_code,p.mphone1,p.email1, + if(i.insurance_id>1,'Org.','Direct') as Inv_Type,i.invoice_status, + m.mode_desc as PaymentMode,i.payment_mode,i.payment_part_balance,i.net_amount + from invoice_master i join patient_master p join payment_mode m + on i.attach_id=p.id and i.attach_type=0 and i.payment_mode=m.id + WHERE invoice_code like '%".$sdata."' or p_code like '%".$sdata."' or p_fname like '%".$sdata."%' or + mphone1 = '".$sdata."' or email1 = '".$sdata."' order by i.id desc limit 100"; + + $query = $this->db->query($sql); + $data['charges_list']= $query->result(); + + $this->load->view('Invoice/Invoice_charges_list',$data); + } + + public function opdinvoice($opdid) + { + $sql="select *,(case payment_status when 1 Then 'cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['opd_master'][0]->p_id."' "; + + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$data['opd_master'][0]->p_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where status=0 and p_id=".$data['patient_master'][0]->id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from hc_insurance where id=".$data['opd_master'][0]->insurance_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + + $this->load->view('Invoice/Invoice_opd_correction',$data); + } + + + public function showinvoice($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $ins_comp_id=$data['invoice_master'][0]->insurance_id; + $ins_id=$data['invoice_master'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $this->load->view('Invoice/Invoice_Charges_correction',$data); + } + + + public function update_correction() + { + $oid=$this->input->post('oid'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $opd_correction=$this->input->post('input_corr_amt'); + + $sql="select * from opd_master where opd_id=".$oid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $flag=true; + + if($this->input->post('optionsRadios_crdr')==1) + { + if($opd_correction>0 && $data['opd_master'][0]->opd_fee_gross_amount>=$opd_correction) + { + $opd_fee_amount=$data['opd_master'][0]->opd_fee_gross_amount-$opd_correction; + $opd_fee_amount=$opd_fee_amount-$data['opd_master'][0]->opd_discount; + }else{ + $flag=false; + } + }else{ + $opd_fee_amount=$data['opd_master'][0]->opd_fee_gross_amount+$opd_correction; + $opd_fee_amount=$opd_fee_amount-$data['opd_master'][0]->opd_discount; + } + + if($flag) + { + $dataupdate = array( + 'opd_correction_amount' => $this->input->post('input_corr_amt'), + 'opd_correction_remark' => $this->input->post('input_corr_desc'), + 'opd_correction_user' => $user_name, + 'opd_correction_crdr' => $this->input->post('optionsRadios_crdr'), + 'opd_correction_datetime' => date('Y-m-d H:i:s'), + 'opd_fee_amount' => $opd_fee_amount + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$oid); + + $this->load->model('Payment_M'); + + if($this->input->post('optionsRadios_crdr')==1) + { + $credit_debit=1; + } + else{ + $credit_debit=0; + } + + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'1', + 'payof_id'=>$oid, + 'payof_code'=>$data['opd_master'][0]->opd_code, + 'credit_debit'=>$credit_debit, + 'amount'=>$this->input->post('input_corr_amt'), + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$this->input->post('input_corr_desc'), + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + }else{ + + } + } + + + public function update_correction_charges() + { + $invoice_id=$this->input->post('invoice_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $correction=$this->input->post('input_corr_amt'); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $flag=true; + + if($correction>0 && $data['invoice_master'][0]->net_amount>=$correction) + { + $net_amount=$data['invoice_master'][0]->net_amount-$correction; + }else{ + $flag=false; + } + + if($flag) + { + $dataupdate = array( + 'correction_amount' => $this->input->post('input_corr_amt'), + 'correction_remark' => $this->input->post('input_corr_desc'), + 'correction_user' => $user_name, + 'correction_crdr' => $this->input->post('optionsRadios_crdr'), + 'correction_datetime' => date('Y-m-d H:i:s'), + 'correction_net_amount' => $fee_amount, + 'invoice_status' => '3' + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + $this->load->model('Payment_M'); + + $paydata = array( + 'payment_mode'=> '3', + 'payof_type'=>'2', + 'payof_id'=>$invoice_id, + 'payof_code'=>$data['invoice_master'][0]->invoice_code, + 'credit_debit'=>1, + 'amount'=>$this->input->post('input_corr_amt'), + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$this->input->post('input_corr_desc'), + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + $insert_id=$this->Payment_M->insert($paydata); + } + + } + + + + public function list_refund() + { + $this->load->view('Invoice/refund_invoice'); + } + + + + public function getRequestTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'id', + 1 => 'org_code', + 2 => 'patient_name', + 3 => 'org_date_str', + 4=> 'payment_amount', + 5=> 'payment_process_str' + ); + + // getting total number records without any search + $sql_f_all = "select *, + date_format(payment_request_datetime,'%d-%m-%Y %h:%i:%s') as org_date_str, + if(payment_process=0,'Pending','Complete') as payment_process_str " ; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from org_payment_request "; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1 = 1"; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //CaseCode-InsuranceCard-ClaimNo + $sql_where.=" AND id = '".$requestData['columns'][0]['search']['value']."' "; + $sql_where_flag=1; + } + + // getting records as per search parameters + if( !empty($requestData['columns'][1]['search']['value']) ){ //CaseCode-InsuranceCard-ClaimNo + $sql_where.=" AND org_code LIKE '%".$requestData['columns'][1]['search']['value']."' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][2]['search']['value']) ){ //p_code-P-Name + $sql_where.=" AND ( patient_name LIKE '".$requestData['columns'][2]['search']['value']."%') "; + + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function getRefundTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'id', + 1 => 'refund_type_code', + 2 => 'refund_type_str', + 3 => 'patient_name', + 4=> 'approved_datetime', + 5=> 'refund_amount', + 6=> 'refund_process_str' + ); + + // getting total number records without any search + $sql_f_all = "select *, + (case refund_type when 1 then 'OPD' when 2 then 'Charge' when 3 then 'Org.Inv.' else 'Other' end ) as refund_type_str , + if(refund_process<1,'Pending','Complete') as refund_process_str"; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from refund_order "; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1 = 1"; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //CaseCode-InsuranceCard-ClaimNo + $sql_where.=" AND refund_type_code LIKE '%".$requestData['columns'][0]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //p_code-P-Name + $sql_where.=" AND ( patient_name LIKE '%".$requestData['columns'][1]['search']['value']."%') "; + + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function refund_form($rid) + { + $sql="select * from refund_order where id=".$rid; + $query = $this->db->query($sql); + $data['refund_order']= $query->result(); + + $this->load->view('Invoice/refund_amount_panel',$data); + } + + + + public function refund_process() + { + $r_id=$this->input->post('r_id'); + $r_name=$this->input->post('r_name'); + $r_phone=$this->input->post('r_phone'); + + $this->load->model('Invoice_M'); + $this->load->model('Payment_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name; + + $sql="select * from refund_order where id=".$r_id; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($refund_order)>0) + { + if($refund_order[0]->refund_process>0) + { + $showcontent='Already Done '; + $rvar=array( + 'update' =>0, + 'showcontent'=>$showcontent + ); + $encode_data = json_encode($rvar); + }else{ + + if($refund_order[0]->refund_type==2) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'2', + 'payof_id'=>$refund_order[0]->refund_type_id, + 'payof_code'=>$refund_order[0]->refund_type_code, + 'credit_debit'=>'1', + 'amount'=>$refund_order[0]->refund_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$refund_order[0]->refund_type_reason, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $inv_id=$refund_order[0]->refund_type_id; + + $data = array( + 'refund_process'=> '1', + 'refund_by'=>$user_name.'['.$user_id.']', + 'refund_by_id'=>$user_id, + 'refund_datetime'=>date('Y-m-d H:i:s'), + 'pay_id'=>$insert_id + ); + + $this->Payment_M->update_refundorder($data,$r_id); + + $showcontent='Refund Update'; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + $encode_data = json_encode($rvar); + + $this->Invoice_M->update_invoice_final($refund_order[0]->refund_type_id); + } + + if($refund_order[0]->refund_type==1) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'1', + 'payof_id'=>$refund_order[0]->refund_type_id, + 'payof_code'=>$refund_order[0]->refund_type_code, + 'credit_debit'=>'1', + 'amount'=>$refund_order[0]->refund_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$refund_order[0]->refund_type_reason, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $inv_id=$refund_order[0]->refund_type_id; + + $data = array( + 'refund_process'=> '1', + 'refund_by'=>$user_name.'['.$user_id.']', + 'refund_by_id'=>$user_id, + 'refund_datetime'=>date('Y-m-d H:i:s'), + 'pay_id'=>$insert_id + ); + + $this->Payment_M->update_refundorder($data,$r_id); + + $showcontent='Refund Update'; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + $encode_data = json_encode($rvar); + } + + if($refund_order[0]->refund_type==3) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'3', + 'payof_id'=>$refund_order[0]->refund_type_id, + 'payof_code'=>$refund_order[0]->refund_type_code, + 'credit_debit'=>'1', + 'amount'=>$refund_order[0]->refund_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$refund_order[0]->refund_type_reason, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $inv_id=$refund_order[0]->refund_type_id; + + $data = array( + 'refund_process'=> '1', + 'refund_by'=>$user_name.'['.$user_id.']', + 'refund_by_id'=>$user_id, + 'refund_datetime'=>date('Y-m-d H:i:s'), + 'pay_id'=>$insert_id + ); + + $this->Payment_M->update_refundorder($data,$r_id); + + $showcontent='Refund Update'; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + $encode_data = json_encode($rvar); + } + } + }else{ + $showcontent='No Record Found '; + + $rvar=array( + 'update' =>0, + 'showcontent'=>$showcontent + ); + $encode_data = json_encode($rvar); + } + + echo $encode_data; + } + + public function list_req_payment() + { + $this->load->view('Invoice/payment_request_list'); + } + + public function req_payment_process() + { + $mode=$this->input->post('mode'); + $amount=$this->input->post('amount'); + $req_payment_id=$this->input->post('req_payment_id'); + $cash_remark=$this->input->post('cash_remark'); + + $input_card_mac=$this->input->post('input_card_mac'); + $input_card_bank=$this->input->post('input_card_bank'); + $input_card_digit=$this->input->post('input_card_digit'); + $input_card_tran=$this->input->post('input_card_tran'); + + $this->load->model('Invoice_M'); + $this->load->model('Payment_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name; + + $sql="select * from org_payment_request where id=".$req_payment_id; + $query = $this->db->query($sql); + $org_payment_request= $query->result(); + + if(count($org_payment_request)>0) + { + if($org_payment_request[0]->payment_process>0) + { + $showcontent='Already Done : Print Invoice '; + $rvar=array( + 'update' =>0, + 'showcontent'=>$showcontent + ); + + }else{ + + $paydata = array( + 'payment_mode'=> $mode, + 'payof_type'=>'3', + 'payof_id'=>$org_payment_request[0]->org_id, + 'payof_code'=>$org_payment_request[0]->org_code, + 'credit_debit'=>'0', + 'amount'=>$org_payment_request[0]->payment_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$cash_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id, + 'card_bank'=>$input_card_mac, + 'card_remark'=>$input_card_bank, + 'cust_card'=>$input_card_digit, + 'card_tran_id'=>$input_card_tran, + ); + + $insert_id=$this->Payment_M->insert($paydata); + + if($insert_id>0) + { + $data = array( + 'payment_process'=> '1', + 'payment_accept_by'=>$user_name.'['.$user_id.']', + 'payment_accept_by_id'=>$user_id, + 'payment_datetime'=>date('Y-m-d H:i:s'), + 'pay_id'=>$insert_id + ); + + $this->Payment_M->update_org_payment($data,$req_payment_id); + + $showcontent='Amount Receipt : Print Invoice '; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent, + 'payid'=>$insert_id, + ); + } + + + + } + }else{ + $showcontent='No Record Found '; + + $rvar=array( + 'update' =>0, + 'showcontent'=>$showcontent, + 'payid'=>0, + ); + + } + + $encode_data = json_encode($rvar); + + echo $encode_data; + } + + public function payment_form($req_id) + { + $sql="select * from org_payment_request where id=".$req_id; + $query = $this->db->query($sql); + $data['req_payment_order']= $query->result(); + + if(count($data['req_payment_order'])>0) + { + $sql="select * from organization_case_master + where id='".$data['req_payment_order'][0]->org_id."' "; + $query = $this->db->query($sql); + $data['org_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$data['req_payment_order'][0]->patient_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($data['req_payment_order'][0]->payment_process>0){ + $showcontent='Amount Receipt : Print Payment Reciept '; + echo $showcontent; + + }else{ + $this->load->view('Invoice/payment_req_panel',$data); + } + }else{ + echo 'No Record Found'; + } + } + + public function getReqPaymentTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'id', + 1 => 'org_code', + 2 => 'payment_type_str', + 3 => 'patient_name', + 4=> 'payment_request_datetime', + 5=> 'payment_amount', + 6=> 'payment_process_str' + ); + + // getting total number records without any search + $sql_f_all = "select *, + (case payment_type when 1 then 'ORG' else 'Other' end ) as payment_type_str , + if(payment_process<1,'Pending','Complete') as payment_process_str"; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from org_payment_request "; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1 = 1"; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //CaseCode-InsuranceCard-ClaimNo + $sql_where.=" AND org_code LIKE '%".$requestData['columns'][0]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //p_code-P-Name + $sql_where.=" AND ( patient_name LIKE '%".$requestData['columns'][1]['search']['value']."%') "; + + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function print_org_payment_invoice($req_id) + { + $sql="select *, + date_format(payment_datetime,'%d-%m-%Y %h:%i:%s') as payment_date_str + from org_payment_request where id=".$req_id; + $query = $this->db->query($sql); + $data['req_payment_order']= $query->result(); + + if(count($data['req_payment_order'])>0) + { + $sql="select * from organization_case_master where id='".$data['req_payment_order'][0]->org_id."' "; + $query = $this->db->query($sql); + $data['org_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$data['req_payment_order'][0]->patient_id."' "; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + + //load mPDF library + $this->load->library('m_pdf'); + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Invoice-Org-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + $content=$this->load->view('Invoice/Invoice_org_payment',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + echo 'No Record Found'; + } + + + } + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/InvoiceShow.php b/old_code_ci3/controllers/InvoiceShow.php new file mode 100644 index 0000000..4722e7a --- /dev/null +++ b/old_code_ci3/controllers/InvoiceShow.php @@ -0,0 +1,60 @@ +db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select * from inv_med_item where inv_med_id=".$inv_id; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(tamount) as Gtotal,sum(amount) as amt,sum(vamount) as vamt from inv_med_item where inv_med_id=".$inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$data['invoice_master'][0]->patient_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where status=0 and p_id=".$data['invoice_master'][0]->patient_id; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $this->load->view('invoiceshow/invoice_medical',$data); + } + + + public function invoice_charges($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select *,(case payment_status when 1 Then 'cash' when 2 then 'Bank Card' when 3 then 'Org Credit' else 'Pending' end) as Payment_type_str from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $this->load->view('invoiceshow/invoice_charges',$data); + } + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Ipd.php b/old_code_ci3/controllers/Ipd.php new file mode 100644 index 0000000..29f1005 --- /dev/null +++ b/old_code_ci3/controllers/Ipd.php @@ -0,0 +1,2202 @@ +load->view('IPD/ipd_dashboard'); + } + + public function ipd_panel_payment($ipdno) + { + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $discount=$data['ipd_master'][0]->Discount; + $discount2=$data['ipd_master'][0]->Discount2; + $discount3=$data['ipd_master'][0]->Discount3; + + $tdiscount=$discount+$discount2+$discount3; + + $charge1=$data['ipd_master'][0]->chargeamount1; + $charge2=$data['ipd_master'][0]->chargeamount2; + $tcharge=$charge1+$charge2; + + $sql="select *,Date_Format(pay_date,'%d-%M') as pay_date_str, + case payment_mode when 1 then 'Cash' + when 2 then 'Bank Card' + when 3 then 'Cash Return' + when 4 then 'Bank Return' + else 'Other' end as pay_mode from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + $sql="select * from invoice_med_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_master']= $query->result(); + + $sql="select i.id as inv_id,i.invoice_code,sum(t.item_amount) as amount,i.refer_by_other, + date_format(i.inv_date,'%d-%m-%Y') as str_date,i.ipd_include, + group_concat(distinct c.group_desc) as charge_list + from invoice_master i left join + (invoice_item t join hc_item_type c on t.item_type=c.itype_id) + on i.id =t.inv_master_id + where payment_status=1 and ipd_id = ".$ipdno." group by i.id "; + + $query = $this->db->query($sql); + $data['inv_master']= $query->result(); + + $total_med=0.00; + $total_charges=0.00; + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total']= $query->result(); + + $total_med=$data['inv_med_total'][0]->tnet_amount; + + $sql="select sum(total_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_include=0 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_not_total']= $query->result(); + + $sql="select sum(net_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_include=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_total']= $query->result(); + + $total_charges=$data['inv_charge_total'][0]->tnet_amount; + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as t_ipd_pay from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['inv_payment_total']= $query->result(); + + $total_payment=$data['inv_payment_total'][0]->t_ipd_pay; + + $balance=$total_payment-($total_charges+$tcharge-$tdiscount); + + $data['inv_total']=array( + 'total_med' => $total_med, + 'total_charges' => $total_charges, + 'total_payment' => $total_payment, + 'ipd_id' => $ipdno, + 'discount' => $tdiscount, + 'balance' => $balance, + 'charge' => $tcharge + ); + + $this->load->view('IPD/ipd_payment',$data); + } + + public function ipd_panel_invoice_show() + { + $inv_id=$this->input->post('invid'); + $inv_type=$this->input->post('invtype'); + + if($inv_type == 0) + { + redirect('InvoiceShow/invoice_med/'.$inv_id); + }else{ + redirect('InvoiceShow/invoice_charges/'.$inv_id); + } + } + + public function show_account($ipdno) + { + $total_med=0.00; + $total_charges=0.00; + + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $discount=$data['ipd_master'][0]->Discount; + $discount2=$data['ipd_master'][0]->Discount2; + $discount3=$data['ipd_master'][0]->Discount3; + + $tdiscount=$discount+$discount2+$discount3; + + $charge1=$data['ipd_master'][0]->chargeamount1; + $charge2=$data['ipd_master'][0]->chargeamount2; + $tcharge=$charge1+$charge2; + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master where ipd_credit=1 and ipd_credit_type<2 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total']= $query->result(); + + $total_med=$data['inv_med_total'][0]->tnet_amount; + + $sql="select sum(total_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_total']= $query->result(); + + $total_charges=$data['inv_charge_total'][0]->tnet_amount; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as tnet_amount from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['inv_payment_total']= $query->result(); + + $total_payment=$data['inv_payment_total'][0]->tnet_amount; + + $total_balance_amount=$total_payment-($total_charges+$total_med+$tcharge-$tdiscount); + + $data['inv_total']=array( + 'total_med' => $total_med, + 'total_charges' => $total_charges, + 'total_payment' => $total_payment, + 'total_balance_amount' => $total_balance_amount, + 'discount' => $tdiscount, + 'charge' => $tcharge, + 'ipd_id' => $ipdno + ); + + $this->load->view('IPD/ipd_account_panel',$data); + + } + + public function ipd_complete_invoice($ipdno,$print=0) + { + $this->db->query("CALL p_cal_ipd_master(".$ipdno.")"); + $sql="select * from ipd_master where id=".$ipdno; + $query = $this->db->query($sql); + $data['ipdmaster']= $query->result(); + + $sql="select * from v_ipd_list where id=".$ipdno; + $query = $this->db->query($sql); + $data['ipd_list']= $query->result(); + + $sql="select b.ipd_id,b.bed_id,b.TDate,m.room_name,m.bed_no + from ipd_bed_assign b left join hc_bed_master m on b.bed_id=m.id + where b.ipd_id=".$ipdno." order by TDate desc"; + $query = $this->db->query($sql); + $data['bed_list']= $query->result(); + + $pno=$data['ipdmaster'][0]->p_id; + $case_id=$data['ipdmaster'][0]->case_id; + + $discount=$data['ipdmaster'][0]->Discount; + $discount2=$data['ipdmaster'][0]->Discount2; + $discount3=$data['ipdmaster'][0]->Discount3; + + $charge1=$data['ipdmaster'][0]->chargeamount1; + $charge2=$data['ipdmaster'][0]->chargeamount2; + $tcharge=$charge1+$charge2; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $total_med=0.00; + $total_charges=0.00; + + if($data['ipdmaster'][0]->case_id>0) + { + $sql="select * from organization_case_master where id='".$data['ipdmaster'][0]->case_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id='".$inc_card_id."'"; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id='".$ins_comp_id."'"; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + } + + $sql="select * from v_ipd_bill_invoice v + where v.ipd_id=".$ipdno." order by v.Charge_type "; + + $query = $this->db->query($sql); + $data['showinvoice']= $query->result(); + + $sql="select * from invoice_med_master where ipd_credit=1 and ipd_credit_type=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_list']= $query->result(); + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master + where ipd_credit=1 and ipd_credit_type=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total']= $query->result(); + + $total_med=$data['inv_med_total'][0]->tnet_amount; + + $sql="select sum(total_amount) as tnet_amount from invoice_master + where payment_status=1 and ipd_include=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_total']= $query->result(); + + $sql="select *,h.id as pay_id,Date_Format(pay_date,'%d-%M') as pay_date_str, + case p.payment_mode when 1 then 'Cash' + when 2 then 'Bank Card' + when 3 then 'Return Cash ' + when 4 then 'Bank Return' else 'Other' end as pay_mode + from ipd_payment p join payment_history h on p.payment_id=h.id and h.payof_type=4 where p.ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as t_ipd_pay + from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment_total']= $query->result(); + + $total_charges=$data['inv_charge_total'][0]->tnet_amount; + + $total_payment=$data['ipd_payment_total'][0]->t_ipd_pay; + + $total_gross_amount=($total_charges+round($total_med,0)); + + $tdiscount=$discount+$discount2+$discount3; + + $net_amount=($total_gross_amount+$tcharge)-$tdiscount; + + $balance=$net_amount-$total_payment; + + $data['inv_total']=array( + 'total_med' => $total_med, + 'total_charges' => $total_gross_amount, + 'total_payment' => $total_payment, + 'ipd_id' => $ipdno, + 'discount' => $tdiscount, + 'charge'=>$tcharge, + 'balance' => $balance, + 'net_amount' => $net_amount + ); + + + $Check_Discount=1; + + if($print==1) + { + $this->load->view('IPD/Ipd_invoice_print_V',$data); + + }elseif($print==2){ + $this->load->view('IPD/ipd_invoice_print_wo_payment',$data); + }else{ + $this->load->view('IPD/Ipd_invoice_V',$data); + } + + } + + public function ipd_short_invoice($ipdno,$print=0) + { + $sql="select * from ipd_master where id=".$ipdno; + $query = $this->db->query($sql); + $data['ipdmaster']= $query->result(); + + $pno=$data['ipdmaster'][0]->p_id; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($data['ipdmaster'][0]->case_id>0) + { + $sql="select * from organization_case_master where id='".$data['ipdmaster'][0]->case_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id='".$inc_card_id."'"; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id='".$ins_comp_id."'"; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + } + + $sql="select * from v_ipd_invoice v + where v.ipd_id=".$ipdno." order by Charge_type,inv_date "; + $query = $this->db->query($sql); + $data['showinvoice']= $query->result(); + + $sql="select sum(amount) as GTotal from v_ipd_invoice v + where v.ipd_id=".$ipdno." "; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select *,case payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end as pay_mode from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + + if($print>0) + { + $this->load->view('IPD/Ipd_invoice_print_V',$data); + + }else{ + $this->load->view('IPD/Ipd_invoice_V',$data); + } + } + + public function ipd_confirm_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + $this->load->model('Payment_M'); + + $ipd_id=$this->input->post('ipd_id'); + $amount=$this->input->post('amount'); + + $sql="select * from ipd_master where id=".$ipd_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $pay_remark=$this->input->post('cash_remark'); + + $pay_datetime=str_to_MysqlDate($this->input->post('date_payment')).' '.date('H:i:s'); + + if($this->input->post('mode')==1) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'4', + 'payof_id'=>$ipd_id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'0', + 'amount'=>$amount, + 'payment_date'=>$pay_datetime, + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $ipdpaymentdata = array( + 'payment_mode'=> '1', + 'payment_id'=>$insert_id, + 'payment_mode_desc'=>'Cash', + 'pay_date'=>$pay_datetime, + 'enter_pay_date' => date('Y-m-d H:i:s'), + 'ipd_id' => $ipd_id, + 'amount' => $amount, + 'remark'=>$pay_remark, + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $insert_ipdpay_id=$this->Ipd_M->insert_payment_ipd( $ipdpaymentdata); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_ipdpay_id, + 'pay_date' =>$pay_datetime + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==2) + { + + $FormRules = array( + array( + 'field' => 'input_card_mac', + 'label' => 'Card Bank Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + /*, + array( + 'field' => 'input_card_digit', + 'label' => 'Card Last 4 Digit ', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_card_bank', + 'label' => 'Bank Name ', + 'rules' => 'required|min_length[1]|max_length[50]' + ), + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[1]|max_length[15]' + )*/ + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'4', + 'payof_id'=>$ipd_master[0]->id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'0', + 'amount' => $amount, + 'payment_date'=>$pay_datetime, + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'card_bank'=>$this->input->post('input_card_mac'), + 'cust_card'=>$this->input->post('input_card_bank'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '2', + 'payment_mode_desc'=>'Bank Card', + 'payment_id'=>$insert_id, + 'pay_date'=>$pay_datetime, + 'enter_pay_date' => date('Y-m-d H:i:s'), + 'ipd_id' => $ipd_id, + 'amount' => $amount, + 'card_bank'=>$this->input->post('input_card_mac'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'cust_card'=>$this->input->post('input_card_bank'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $insert_ipdpay_id=$this->Ipd_M->insert_payment_ipd( $data); + + $status='Bank Card'; + + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_ipdpay_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + if($this->input->post('mode')==5) + { + $FormRules = array( + array( + 'field' => 'input_person_name', + 'label' => 'Name on Chq.', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_bank_tran', + 'label' => 'Chq. Number', + 'rules' => 'required|min_length[1]|max_length[15]' + ) + /*, + array( + 'field' => 'input_card_digit', + 'label' => 'Card Last 4 Digit ', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_card_bank', + 'label' => 'Bank Name ', + 'rules' => 'required|min_length[1]|max_length[50]' + ), + */ + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $pay_remark='Chq Payment'; + + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'4', + 'payof_id'=>$ipd_master[0]->id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'0', + 'amount' => $amount, + 'payment_date'=>$pay_datetime, + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'card_bank'=>$this->input->post('input_bank_hospital'), + 'cust_card'=>$this->input->post('input_bank_name'), + 'card_remark'=>$this->input->post('input_person_name'), + 'card_tran_id'=>$this->input->post('input_bank_tran'), + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '2', + 'payment_mode_desc'=>'Bank Chq.-Draft', + 'payment_id'=>$insert_id, + 'pay_date'=>$pay_datetime, + 'enter_pay_date' => date('Y-m-d H:i:s'), + 'ipd_id' => $ipd_id, + 'amount' => $amount, + 'card_bank'=>$this->input->post('input_bank_hospital'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'cust_card'=>$this->input->post('input_bank_name'), + 'card_tran_id'=>$this->input->post('input_bank_tran'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $insert_ipdpay_id=$this->Ipd_M->insert_payment_ipd( $data); + + $status='Bank Card'; + + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_ipdpay_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + } + + public function ipd_ded_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + $this->load->model('Payment_M'); + + $ipd_id=$this->input->post('ipd_id'); + $amount=$this->input->post('amount'); + + $sql="select * from ipd_master where id=".$ipd_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $pay_remark=$this->input->post('cash_remark'); + + if($this->input->post('mode')==3) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'4', + 'payof_id'=>$ipd_id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'1', + 'amount'=>$amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $ipdpaymentdata = array( + 'payment_mode'=> '3', + 'payment_id'=>$insert_id, + 'payment_mode_desc'=>'Cash Return', + 'pay_date'=>date('Y-m-d H:i:s'), + 'ipd_id' => $ipd_id, + 'credit_debit'=>'1', + 'amount' => $amount, + 'remark'=>$pay_remark, + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $insert_ipdpay_id=$this->Ipd_M->insert_payment_ipd( $ipdpaymentdata); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_ipdpay_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + if($this->input->post('mode')==4) + { + $paydata = array( + 'payment_mode'=> '4', + 'payof_type'=>'4', + 'payof_id'=>$ipd_id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'1', + 'amount'=>$amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $ipdpaymentdata = array( + 'payment_mode'=> '4', + 'payment_id'=>$insert_id, + 'payment_mode_desc'=>'Bank Return', + 'pay_date'=>date('Y-m-d H:i:s'), + 'ipd_id' => $ipd_id, + 'credit_debit'=>'1', + 'amount' => $amount, + 'remark'=>$pay_remark, + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $insert_ipdpay_id=$this->Ipd_M->insert_payment_ipd( $ipdpaymentdata); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_ipdpay_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + } + + public function ipd_org_status_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $this->load->model('Ocasemaster_M'); + $data['master'] = array( + 'org_approved_amount' => $this->input->post('amount'), + 'org_approved_status_id' => $this->input->post('org_status'), + 'org_status_update_by' => $user_name + ); + + $case_id=$this->input->post('case_id'); + $this->Ocasemaster_M->update($data['master'],$case_id); + + $rvar=array( + 'update' =>'1', + 'msg' => 'Update Done '.$case_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function ipd_main_panel($ipdno) + { + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select * from v_ipd_list where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_list']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select i.id,d.p_fname,d.id as doc_id from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master where status=0 and p_id=".$data['ipd_info'][0]->p_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from org_approved_status "; + $query = $this->db->query($sql); + $data['org_approved_status']= $query->result(); + + $this->load->view('IPD/ipd_main_panel',$data); + } + + public function ipd_account_panel($ipdno) + { + + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $discount=$data['ipd_info'][0]->Discount; + $discount2=$data['ipd_info'][0]->Discount2; + $discount3=$data['ipd_info'][0]->Discount3; + + $charge1=$data['ipd_info'][0]->chargeamount1; + $charge2=$data['ipd_info'][0]->chargeamount2; + $tcharge=$charge1+$charge2; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select * from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master where status=0 and p_id=".$data['ipd_info'][0]->p_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $total_med=0.00; + $total_charges=0.00; + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master where ipd_credit=1 and ipd_credit_type>0 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total_credit']= $query->result(); + + $sql="select sum(net_amount) as tnet_amount,sum(payment_received) as t_payment_received from invoice_med_master where ipd_credit=0 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total_cash']= $query->result(); + + $total_med_credit=$data['inv_med_total_credit'][0]->tnet_amount; + $total_med_cash=$data['inv_med_total_cash'][0]->tnet_amount; + $total_med_cash_paid=$data['inv_med_total_cash'][0]->t_payment_received; + + $sql="select sum(total_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_include=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_total']= $query->result(); + + $total_charges=$data['inv_charge_total'][0]->tnet_amount; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as tnet_amount from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['inv_payment_total']= $query->result(); + + $total_payment=$data['inv_payment_total'][0]->tnet_amount; + $tdiscount=$discount+$discount2+$discount3; + + $total_balance_amount=$total_payment-($total_charges+$total_med_credit+$tcharge-$tdiscount); + + $data['inv_total']=array( + 'total_med_credit' => $total_med_credit, + 'total_med_cash' => $total_med_cash, + 'total_med_cash_paid' => $total_med_cash_paid, + 'total_charges' => $total_charges, + 'total_payment' => $total_payment, + 'total_balance_amount' => $total_balance_amount, + 'discount' => $tdiscount, + 'charge' => $tcharge, + 'ipd_id' => $ipdno + ); + + + $this->load->view('IPD/ipd_account_panel',$data); + } + + public function ipd_panel($ipdcode,$stype=0) + { + if($stype > 0) + { + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days from ipd_master where ipd_code='".$ipdcode."' "; + }else{ + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days from ipd_master where id='".$ipdcode."' "; + } + + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + if($stype > 0) + { + $sql="select * from v_ipd_list where ipd_code='".$ipdcode."' "; + + }else{ + $sql="select * from v_ipd_list where id='".$ipdcode."' "; + } + + $query = $this->db->query($sql); + $data['ipd_list']= $query->result(); + + $discount=$data['ipd_info'][0]->Discount; + $discount2=$data['ipd_info'][0]->Discount2; + $discount3=$data['ipd_info'][0]->Discount3; + + $charge1=$data['ipd_info'][0]->chargeamount1; + $charge2=$data['ipd_info'][0]->chargeamount2; + $tcharge=$charge1+$charge2; + + $ipdno=$data['ipd_info'][0]->id; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select * from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master where status=0 and p_id=".$data['ipd_info'][0]->p_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $total_med=0.00; + $total_charges=0.00; + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master where ipd_credit=1 and ipd_credit_type>0 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total_credit']= $query->result(); + + $sql="select sum(net_amount) as tnet_amount,sum(payment_received) as t_payment_received from invoice_med_master where ipd_credit=0 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total_cash']= $query->result(); + + $sql="select * from invoice_med_master where ipd_credit=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_master_credit']= $query->result(); + + $total_med_credit=$data['inv_med_total_credit'][0]->tnet_amount; + $total_med_cash=$data['inv_med_total_cash'][0]->tnet_amount; + $total_med_cash_paid=$data['inv_med_total_cash'][0]->t_payment_received; + + $sql="select sum(total_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_include=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_total']= $query->result(); + + $total_charges=$data['inv_charge_total'][0]->tnet_amount; + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as tnet_amount from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['inv_payment_total']= $query->result(); + + $total_payment=$data['inv_payment_total'][0]->tnet_amount; + + $tdiscount=$discount+$discount2+$discount3; + + $total_balance_amount=$total_payment-($total_charges+$total_med_credit+$tcharge-($tdiscount)); + + $data['inv_total']=array( + 'total_med_credit' => $total_med_credit, + 'total_med_cash' => $total_med_cash, + 'total_med_cash_paid' => $total_med_cash_paid, + 'total_charges' => $total_charges, + 'total_payment' => $total_payment, + 'total_balance_amount' => $total_balance_amount, + 'discount' => $tdiscount, + 'charge' => $tcharge, + 'ipd_id' => $ipdno + ); + + $sql="select *,Date_Format(pay_date,'%d-%M') as pay_date_str,case payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Cash Return' else 'Other' end as pay_mode from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + if ($this->ion_auth->in_group('admin1') || $this->ion_auth->in_group('IPDAdmit') ) { + if($data['ipd_info'][0]->ipd_status==0) + { + $this->load->view('IPD/Ipdpanel_V',$data); + }else{ + if($this->ion_auth->in_group('IPDReAdmit')) + { + $this->load->view('IPD/Ipdpanel_V',$data); + }else{ + $this->load->view('IPD/IPD_View',$data); + } + } + }else{ + $this->load->view('IPD/IPD_View',$data); + } + } + + public function IpdList() + { + $sql = "select *,(paid_amount-(charge_amount+med_amount)) as balance from v_ipd_list where ipd_status=0 "; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('IPD2/IPDList_V',$data); + } + + public function ipd_room_status() + { + $sql="select b.room_name,b.room_rent,count(b.id) as Total_Bed,sum(if(b.bed_used_p_id=0,1,0)) as FreeBed + from hc_bed_master b group by b.room_name"; + $query = $this->db->query($sql); + $data['roomdata']= $query->result(); + + $this->load->view('IPD/ipd_bed_status',$data); + } + + public function add_remove_doc($ipd_doc_id) + { + if ($this->ion_auth->in_group('IPDAdmit')) { + $this->db->delete("ipd_master_doc_list", "id=".$ipd_doc_id); + } + } + + public function add_add_doc($ipd_id,$doc_id) + { + if ($this->ion_auth->in_group('IPDAdmit')) { + + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + $data = array( + 'ipd_id' => $ipd_id, + 'doc_id' => $doc_id + ); + $inser_id=$this->Ipd_M->add_ipd_doc($data); + } + } + + public function show_ipd_form1($ipdno) + { + $sql="select *,if(case_type=1,'MLC','Non MLC') as case_type_s, + Date_format(register_date,'%d-%m-%Y') as str_register_date , + Date_format(discharge_date,'%d-%m-%Y') as str_discharge_date + from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select i.id,d.p_fname,d.id as doc_id from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_info'][0]->case_id."' "; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $d= $this->ion_auth->user()->row(); + + $data['user'] = $d; + + + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name='Report-FaceForm-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('IPD/print_ipd_form1',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function addipd($pno) + { + $sql="select count(*) as no_ipd from ipd_master where ipd_status=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['ipd_master_rec']= $query->result(); + + if ($data['ipd_master_rec'][0]->no_ipd > 0) + { + $sql="select * from ipd_master where ipd_status=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + redirect('Ipd/ipd_panel/'.$data['ipd_info'][0]->id); + }else{ + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id "; + $query = $this->db->query($sql); + $data['doc_spec_l']= $query->result(); + + $sql="select id,concat('Bed No:',bed_no,'/','[',room_name,']') as Bed_Desc from hc_bed_master where bed_used_p_id=0"; + $query = $this->db->query($sql); + $data['ipd_bed_list']= $query->result(); + + $sql="select * from hc_insurance "; + $query = $this->db->query($sql); + $data['insur_list']= $query->result(); + + $sql="select * from organization_case_master + where status=0 and ipd_id=0 and case_type=1 and p_id=".$pno; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $this->load->view('IPD/Ipd_Registration_V',$data); + } + + } + + public function ipd_bed_assign_list($ipdno) + { + $sql="select m.bed_no,m.room_name,b.Fdate,b.TDate,b.Remark + from ipd_bed_assign b join hc_bed_master m on b.bed_id=m.id where b.ipd_id=".$ipdno; + $query = $this->db->query($sql); + $data['ipd_bed_assign']= $query->result(); + + $sql="select id,concat('Bed No:',bed_no,'/','[',room_name,']') as Bed_Desc from hc_bed_master where bed_used_p_id=0"; + $query = $this->db->query($sql); + $data['ipd_bed_list']= $query->result(); + + + $this->load->view('IPD/ipd_bed_assign',$data); + + } + + public function ipd_cash_print($ipd_id,$payid,$print=0) + { + $sql="select * from ipd_payment where id=".$payid; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + $payment_id=$data['ipd_payment'][0]->payment_id; + + $sql="select * from ipd_master where id =".$data['ipd_payment'][0]->ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $pno=$data['ipd_master'][0]->p_id; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($print==0) + { + $this->load->view('IPD/print_payment_receipt_ipd',$data); + }else{ + redirect('IpdNew/ipd_cash_print_pdf/'.$ipd_id.'/'.$payment_id); + //$this->load->view('IPD/ipd_payment_receipt_print',$data); + } + } + + public function load_model_box($ipd_id) + { + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days,if(case_type=1,'MLC','Non MLC') as case_type_s, Date_format(register_date,'%d-%m-%Y') as str_register_date from ipd_master where id='".$ipd_id."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $this->load->view('IPD/ipd_model_payment_box',$data); + } + + public function ipd_bed_list() + { + $sql="select id,concat('Bed No:',bed_no,'/','[',room_name,']') as Bed_Desc from hc_bed_master where bed_used_p_id=0"; + + $query = $this->db->query($sql); + $ipd_bed_list= $query->result(); + + echo ''; + echo ''; + echo ''; + } + + public function load_model_ded_box() + { + $this->load->view('IPD/ipd_panel_deduction_payment'); + } + + public function AddNew() { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + $this->load->model('Ipd_M'); + + $data['master'] = array( + 'p_id' => $this->input->post('pid'), + 'P_name' => $this->input->post('pname'), + 'relation' => $this->input->post('r_relation'), + 'contact_person_Name' => $this->input->post('rp_name'), + 'insurance_id' => $this->input->post('insur_list'), + 'policy_no' => $this->input->post('insur_no'), + 'register_date' => str_to_MysqlDate($this->input->post('res_date')), + 'problem' => $this->input->post('problem'), + 'remark' => $this->input->post('remark'), + 'P_mobile1' => $this->input->post('phone1'), + 'P_mobile2' => $this->input->post('phone2'), + 'case_type' => $this->input->post('optionsRadios_mlc'), + 'case_id' => $this->input->post('optionsRadios_org'), + 'reg_time' => $this->input->post('res_time') + ); + + $groupData = $this->input->post('doc_id'); + + if (isset($groupData) && !empty($groupData)) { + $data['doc_list']=$groupData; + + $inser_id=$this->Ipd_M->insert($data); + + $data['BedData'] = array( + 'ipd_id' => $inser_id, + 'Fdate' => date('Y-m-d h:i:s'), + 'TDate' => date('Y-m-d h:i:s'), + 'bed_id' => $this->input->post('room_list') + ); + + if($this->input->post('room_list')<>"") + { + $inser_bed_id=$this->Ipd_M->bedassign($data['BedData']); + } + } + else + { + $inser_id=0; + } + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function discharge_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + $this->load->model('Ipd_M'); + $this->load->model('Ocasemaster_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $discharge_by=$user_name.'['.$user_id.']'; + + $data['master'] = array( + 'discharge_by' => $discharge_by, + 'discharge_remark' => $this->input->post('discharge_remark'), + 'discharge_balance_user' => $this->input->post('input_bal_user'), + 'discharge_balance_remark' => $this->input->post('input_bal_remark'), + 'ipd_status' => '1', + 'discharge_date' => str_to_MysqlDate($this->input->post('dis_date')), + 'discharge_time' => $this->input->post('dis_time'), + 'discarge_patient_status' => $this->input->post('p_status') + ); + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + //Update Org. Status Update + $sql="select * from ipd_master where id='".$ipd_id."' "; + $query = $this->db->query($sql); + $ipd_info= $query->result(); + + if($ipd_info[0]->case_id>0) + { + $case_id=$ipd_info[0]->case_id; + + $sql="select * from organization_case_master where id='".$case_id."'"; + $query = $this->db->query($sql); + $case_master= $query->result(); + + if(count($case_master)>0) + { + $log=$case_master[0]->log.'\nUpdate Status:'.$this->input->post('status').'-Upd By:'.$user_name.'['.$user_id.']'.date('d/m/Y H:m:s'); + + $data = array( + 'status'=> 1, + 'log'=>$log, + ); + + $this->Ocasemaster_M->update( $data,$case_id); + } + + } + + //Update Org. Stop + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Discharge Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function discharge_request() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + $this->load->model('Ipd_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $discharge_by=$user_name.'['.$user_id.']'; + + $data['master'] = array( + 'ipd_status' => '0', + 'discharge_date' => str_to_MysqlDate($this->input->post('dis_date')), + 'discharge_time' => $this->input->post('dis_time'), + 'discarge_patient_status' => $this->input->post('p_status'), + 'dept_id' => $this->input->post('dept_id') + ); + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + echo "Discharge Status Updated"; + } + + public function update_surgery() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $ipd_id=$this->input->post('ipd_id'); + $issurgery=$this->input->post('issurgery'); + $surgery_name=$this->input->post('surgery_name'); + $surgery_date=$this->input->post('surgery_date'); + + + + $content=""; + + $dataupdate = array( + 'issurgery' => $issurgery, + 'surgery_name' => $surgery_name, + 'surgery_date' => str_to_MysqlDate($surgery_date) + ); + + $this->Ipd_M->update($dataupdate,$ipd_id); + + $content="Update Done"; + + + echo $content; + } + + + public function update_delivery() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $ipd_id=$this->input->post('ipd_id'); + $isdelivery=$this->input->post('isdelivery'); + $delivery_date=$this->input->post('delivery_date'); + $delivery_time=$this->input->post('delivery_time'); + $delivery_sex_of_baby=$this->input->post('delivery_sex_of_baby'); + + + $dataupdate = array( + 'isdelivery' => $isdelivery, + 'delivery_time' => $delivery_time, + 'delivery_date' => str_to_MysqlDate($delivery_date), + 'delivery_sex_of_baby' => $delivery_sex_of_baby + ); + + $this->Ipd_M->update($dataupdate,$ipd_id); + $content="Update Done"; + + echo $content; + } + + + public function update_ipdadmit_time() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + $this->load->model('Ipd_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $discharge_by=$user_name.'['.$user_id.']'; + + $ipd_id=$this->input->post('Ipd_ID'); + + $data['master'] = array( + 'register_date' => str_to_MysqlDate($this->input->post('strdate')), + 'reg_time' => $this->input->post('strtime') + ); + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Admit Date Updated" + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function discharge_ipd($ipdno) + { + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select * from ipd_discharg_status "; + $query = $this->db->query($sql); + $data['ipd_discharge_status']= $query->result(); + + $discount=$data['ipd_info'][0]->Discount; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + + if($data['ipd_info'][0]->ipd_status == 0 ) + { + $this->load->view('IPD/ipd_discharge',$data); + }else{ + $this->load->view('IPD/ipd_discharged_status',$data); + } + + + } + + public function getIpdTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'ipd_code', + 1 => 'p_code', + 2 => 'p_fname', + 3=> 'P_mobile1', + 4=> 'doc_name', + 5=> 'Disstatus', + 6=> 'str_register_date', + 7=> 'str_discharge_date', + 8=> 'Disstatus' + ); + + // getting total number records without any search + $sql_f_all = "select * "; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from v_ipd_list "; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1 = 1"; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //ipd_code + $sql_where.=" AND ipd_code LIKE '%".$requestData['columns'][0]['search']['value']."' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //p_code + $sql_where.=" AND p_code LIKE '".$requestData['columns'][1]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][2]['search']['value']) ){ //p_fname + $sql_where.=" AND p_fname LIKE '%".$requestData['columns'][2]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][3]['search']['value']) ){ //P_mobile1 + $sql_where.=" AND P_mobile1 LIKE '%".$requestData['columns'][3]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][4]['search']['value']) ){ //P_mobile1 + $sql_where.=" AND doc_name LIKE '%".$requestData['columns'][4]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][7]['search']['value']) ) + { //IPD Admit Date Range + $rangeArray = explode("/",$requestData['columns'][7]['search']['value']); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + $admitType = $rangeArray[2]; + if($admitType==0){ + $sql_where.=" AND ( Date(register_date) between '".$minRange."' AND '".$maxRange."' ) "; + }elseif($admitType==1){ + $sql_where.=" AND ( Date(discharge_date) between '".$minRange."' AND '".$maxRange."' ) "; + }else{ + $sql_where.=" AND (( Date(register_date) between '".$minRange."' AND '".$maxRange."' ) "; + $sql_where.=" OR ( Date(discharge_date) between '".$minRange."' AND '".$maxRange."' )) "; + } + + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function discount_update($dis_no) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $Discount_By=$user_name.'['.$user_id.']'.date('d-m-Y'); + + if($dis_no==1) + { + $data['master'] = array( + 'Discount_By' => $Discount_By, + 'Discount_Remark' => $this->input->post('Discount_Remark'), + 'Discount' => $this->input->post('Discount') + ); + }elseif($dis_no==2){ + $data['master'] = array( + 'Discount_By2' => $Discount_By, + 'Discount_Remark2' => $this->input->post('Discount_Remark'), + 'Discount2' => $this->input->post('Discount') + ); + }elseif($dis_no==3){ + $data['master'] = array( + 'Discount_By3' => $Discount_By, + 'Discount_Remark3' => $this->input->post('Discount_Remark'), + 'Discount3' => $this->input->post('Discount') + ); + } + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Discount Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function charge_update($dis_no) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $charge_by=$user_name.'['.$user_id.']'.date('d-m-Y'); + + if($dis_no==1) + { + $data['master'] = array( + 'charge_by1' => $charge_by, + 'charge1' => $this->input->post('input_charge_remark1'), + 'chargeamount1' => $this->input->post('input_charge_Amount1') + ); + }elseif($dis_no==2){ + $data['master'] = array( + 'charge_by2' => $charge_by, + 'charge2' => $this->input->post('input_charge_remark2'), + 'chargeamount2' => $this->input->post('input_charge_Amount2') + ); + } + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Charge Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function readmit($dis_no) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $charge_by=$user_name.'['.$user_id.']'.date('d-m-Y'); + + if($dis_no==2) + { + $data['master'] = array( + 'ipd_status' => '0' + ); + } + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function add_bed_room() + { + $room_list=$this->input->post('room_list'); + $Ipd_ID=$this->input->post('Ipd_ID'); + + $this->load->model('Ipd_M'); + $data = array( + 'ipd_id' => $this->input->post('Ipd_ID'), + 'Fdate' => $this->input->post('start_datetime'), + 'TDate' => $this->input->post('end_datetime'), + 'bed_id' => $this->input->post('room_list') + ); + + $inser_id=$this->Ipd_M->bedassign($data); + + $sql="select m.bed_no,m.room_name,b.Fdate,b.TDate,b.Remark + from ipd_bed_assign b join hc_bed_master m on b.bed_id=m.id where b.ipd_id=".$Ipd_ID; + + $query = $this->db->query($sql); + $room_assign_info= $query->result(); + + $r_data='
+ + + + + + + + + + '; + + for ($i = 0; $i < count($room_assign_info); ++$i) { + $r_data=$r_data.' + + + + + '; + } + + $r_data=$r_data.'
Bed No.DescriptionDateVacant Date
'.$room_assign_info[$i]->bed_no.''.$room_assign_info[$i]->room_name.''.$room_assign_info[$i]->Fdate.''.$room_assign_info[$i]->TDate.'
'; + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + //echo $encode_data; + echo $r_data; + + } + + public function list_med_inv($ipd_id) + { + $sql="select * from invoice_med_master where ipd_credit=1 and ipd_id = ".$ipd_id; + $query = $this->db->query($sql); + $data['inv_master_credit']= $query->result(); + + $data['ipd_id']=$ipd_id; + + $this->load->view('IPD/IPD_Medical_Invoice_Panel',$data); + } + + public function list_med_inv_details($ipd_id,$inv_med_id) + { + $sql="select * from invoice_med_master where ipd_credit=1 and id='".$inv_med_id."' and ipd_id = ".$ipd_id; + $query = $this->db->query($sql); + $data['inv_master_credit']= $query->result(); + + $sql="select * from inv_med_item where inv_med_id='".$inv_med_id."'"; + $query = $this->db->query($sql); + $data['inv_master_credit_details']= $query->result(); + + $this->load->view('IPD/ipd_medical_invoice_short',$data); + } + + + public function Update_Invoice_ipd_credit_type() + { + $ipd_credit_type= $this->input->post('ipd_credit_type'); + $inv_id = $this->input->post('inv_id'); + + $dataupdate = array( + 'ipd_include' => $ipd_credit_type + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$inv_id); + } + + + //Org. Update + + public function IPD_Invoice_Edit($IPD_ID) + { + $sql="select * from v_ipd_list + where id=".$IPD_ID; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $ins_comp_id=$data['ipd_master'][0]->insurance_id; + + $sql="select i.*,t.group_desc + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.ipd_id=".$IPD_ID; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from ipd_invoice_item where ipd_id=".$IPD_ID; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select d.id ,d.p_fname ,concat(d.p_fname,' [',group_concat(m.SpecName),']') as DocSpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id order by d.p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from med_spec order by SpecName"; + $query = $this->db->query($sql); + $data['med_spec']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=40 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_1']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=34 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_2']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=27 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_5']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=26 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_3']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=35 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_6']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=43 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_7']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc + from hc_items where itype=3 order by idesc "; + $query = $this->db->query($sql); + $data['item_list_8']= $query->result(); + + $this->load->view('IPD/ipd_invoice_items',$data); + } + + public function ipd_package($ipd_id) + { + $sql="select * from package where id>1 and active=1"; + $query = $this->db->query($sql); + $data['package_list']= $query->result(); + + $sql="select d.id ,d.p_fname ,concat(d.p_fname,' [',group_concat(m.SpecName),']') as DocSpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id order by d.p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $this->load->view('IPD/ipd_package',$data); + } + + public function show_Package($ipd_id) + { + $sql="select * from ipd_package where ipd_id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_package']= $query->result(); + + echo ' + + + + + + '; + $srno=0; + $head=1; + foreach($data['ipd_package'] as $row) + { + $srno=$srno+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo '
#Package NameAmount
'.$srno.''.$row->package_name.'
'.$row->package_desc.'
'; + echo ''; + echo '
'; + + } + + public function ipd_package_showitem($type) + { + $this->load->model('Ipd_M'); + + $ipd_id=$this->input->post('ipd_id'); + $pack_id=$this->input->post('package_id'); + $package_name=$this->input->post('package_name'); + $comment=$this->input->post('comment'); + $package_desc=$this->input->post('comment'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.' D:'.date('d-m-Y h:i:s'); + + if($type==1) + { + $sql="select * from package where id=".$pack_id; + $query = $this->db->query($sql); + $package= $query->result(); + + $item_custom_amount=$this->input->post('input_amount'); + $date_item=$this->input->post('date_item'); + + if($pack_id>1) + { + $package_desc=$package[0]->Pakage_description; + $package_name=$package[0]->ipd_pakage_name; + $item_amount=$package[0]->Pakage_Min_Amount; + } + + if($date_item=='') + { + $date_item=date('Y-m-d'); + } + + if($item_custom_amount>0) + { + $item_amount=$item_custom_amount; + } + + $data['insert_package'] = array( + 'ipd_id' => $ipd_id, + 'package_id' => $pack_id, + 'package_name' => $package_name, + 'package_desc' => $package_desc, + 'package_Amount' => $item_amount, + 'comment' => $comment, + 'update_by' => $user_name + ); + $inser_id=$this->Ipd_M->insert_package( $data['insert_package']); + + }elseif($type==2) + { + $amount_value=$this->input->post('input_amount'); + + $data['update_package'] = array( + 'item_amount' => $amount_value + ); + + $inser_id=$this->Ipd_M->update_package( $data['update_package'],$this->input->post('itemid')); + + }else{ + + echo $this->Ipd_M->deletepackage($this->input->post('itemid')); + //$this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + } + + public function doc_ipd_fee($doc_id) + { + $sql="select * from doc_ipd_fee where isdelete=0 and doc_id= ".$doc_id." order by doc_fee_desc "; + $query = $this->db->query($sql); + $doc_fee= $query->result(); + + foreach($doc_fee as $row) + { + echo ''; + } + + } + + public function ipd_items_bytype() + { + $tid=$this->input->post('itype_idv'); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from ipd_items where itype=".$tid." order by idesc "; + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + echo '
+ +
'; + } + + public function ipd_showitem($type) + { + $this->load->model('Ipd_M'); + + $ipd_id=$this->input->post('ipd_id'); + + if($type==1) + { + + $sql="select * from ipd_items where id=".$this->input->post('itype_name_id'); + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount; + + $item_custom_rate=$this->input->post('input_rate'); + $date_item=$this->input->post('date_item'); + if($date_item=='') + { + $date_item=date('Y-m-d'); + } + + if($item_custom_rate>0) + { + $item_rate=$item_custom_rate; + } + $amount_value=$this->input->post('input_qty')*$item_rate; + + $doc_id=$this->input->post('doc_id'); + + if($doc_id<1) + { + $refername=$this->input->post('refername'); + }else{ + $sql="select * from doctor_master where id=".$doc_id; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + $refername=$data['doc_master'][0]->p_fname; + } + + $data['insert_invoice_item'] = array( + 'ipd_id' => $ipd_id, + 'item_type' => $this->input->post('itype_idv'), + 'item_id' => $this->input->post('itype_name_id'), + 'item_name' => $data['itemlist'][0]->idesc, + 'item_rate' => $item_rate, + 'item_added_date' => date('Y-m-d h:i:s'), + 'item_qty' => $this->input->post('input_qty'), + 'item_amount' => $amount_value, + 'doc_id' => $this->input->post('doc_id'), + 'doc_name' => $refername, + 'date_item' => $date_item, + 'comment' => $this->input->post('comment') + ); + $inser_id=$this->Ipd_M->insert_ipd_item( $data['insert_invoice_item']); + + }elseif($type==2) + { + $amount_value=$this->input->post('update_qty') * $this->input->post('item_rate'); + + $data['update_invoice_item'] = array( + 'item_added_date' => date('Y-m-d h:i:s'), + 'item_qty' => $this->input->post('update_qty'), + 'item_amount' => $amount_value + ); + + $inser_id=$this->Ipd_M->update_ipd_item( $data['update_invoice_item'],$this->input->post('itemid')); + + }else{ + + echo $this->Ipd_M->deleteIpdinvoiceitem($this->input->post('itemid')); + //$this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + } + + public function show_ipd_items($ipd_id) + { + $sql="select * from v_ipd_list where id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $ins_comp_id=$data['ipd_master'][0]->insurance_id; + + $sql="select t.group_desc,i.*,sum(i.item_amount) as xAmount + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.ipd_id=".$ipd_id." + group by i.item_type,i.id with rollup"; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from ipd_invoice_item where ipd_id=".$ipd_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + echo ' + + + + + + + + '; + $srno=0; + $head=1; + foreach($data['invoiceDetails'] as $row) + { + if($head==1 && $row->item_type<>null) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $head=0; + } + + if($row->item_type==null || $row->item_type=='') + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + }elseif($row->id==null || $row->id==''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $head=1; + }else{ + $srno=$srno+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + + + } + echo '
#Charge NameRateQtyAmount
#'.$row->group_desc.'
#Total Amount'.$row->xAmount.'
#Sub Total'.$row->xAmount.'
'.$srno.''.$row->item_name.'
'.$row->comment.'
'.$row->item_rate.''.$row->item_amount.''; + echo ''; + echo '
'; + echo ''; + + + } + + + public function add_ipd_org($ipd_id,$org_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ipd_M'); + + $update_ipd=array( + 'case_id'=>$org_id + ); + + $this->Ipd_M->update($update_ipd,$ipd_id); + } + + public function update_org_doc() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $org_id=$this->input->post('org_id'); + $feild=$this->input->post('feild'); + $fvalue=$this->input->post('fvalue'); + + $this->load->model('Ocasemaster_M'); + + $update_ipd=array( + $feild=>$fvalue + ); + + $this->Ocasemaster_M->update($update_ipd,$org_id); + + } + + + + } \ No newline at end of file diff --git a/old_code_ci3/controllers/Ipd2.php b/old_code_ci3/controllers/Ipd2.php new file mode 100644 index 0000000..8cefac8 --- /dev/null +++ b/old_code_ci3/controllers/Ipd2.php @@ -0,0 +1,335 @@ +db->query($sql); + $ipdmaster= $query->result(); + + $pno=$ipdmaster[0]->p_id; + $case_id=$ipdmaster[0]->case_id; + + $sql="select * from v_ipd_list where id=".$ipdno; + $query = $this->db->query($sql); + $ipd_list= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender,if(age is null, + Get_Age(dob),Concat(age,' ',age_in)) AS age + from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $person_info= $query->result(); + + + $sql="select * from ipd_package + where ipd_id=".$ipdno; + $query = $this->db->query($sql); + $ipd_package= $query->result(); + + + + //Check Items in Package + $No_Pack_items=0; + + $sql1= 'Select count(*) as no_rec from ipd_invoice_item i + where i.package_id>0 and i.ipd_id='.$ipdno; + + $sql2= 'Select count(*) as no_rec from invoice_med_master + Where ipd_credit=1 and ipd_credit_type=0 and ipd_id = '.$ipdno; + + $sql3= 'Select count(*) as no_rec from v_ipd_invoice b + where b.ipd_id='.$ipdno.' and ipd_include=0'; + + $query = $this->db->query($sql1); + $Package_Items= $query->result(); + $No_Pack_items+=$Package_Items[0]->no_rec; + + $query = $this->db->query($sql2); + $Package_Items= $query->result(); + $No_Pack_items+=$Package_Items[0]->no_rec; + + $query = $this->db->query($sql3); + $Package_Items= $query->result(); + $No_Pack_items+=$Package_Items[0]->no_rec; + + if(count($ipd_package)>0) + { + $sql="select t.group_desc,i.*,sum(i.item_amount) as xAmount + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.package_id=0 and i.ipd_id=".$ipdno." + group by i.item_type,i.id order by i.item_type"; + $query = $this->db->query($sql); + $ipd_invoice_item= $query->result(); + }else{ + $sql="select t.group_desc,i.*,sum(i.item_amount) as xAmount + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.ipd_id=".$ipdno." + group by i.item_type,i.id order by i.item_type"; + $query = $this->db->query($sql); + $ipd_invoice_item= $query->result(); + } + + $sql="select * + from invoice_med_master + where ipd_credit=1 and ipd_credit_type=1 + and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $inv_med_list= $query->result(); + + $sql="select b.ipd_id AS ipd_id,b.Charge_type AS Charge_type,b.idesc AS idesc, + b.item_rate AS item_rate,b.orgcode AS orgcode,sum(b.item_qty) AS no_qty,sum(b.Amount) AS amount + from v_ipd_invoice b where b.ipd_id=".$ipdno." and ipd_include=1 + group by b.ipd_id,b.item_id,b.item_rate order by b.Charge_type "; + + $query = $this->db->query($sql); + $showinvoice= $query->result(); + + if($ipdmaster[0]->case_id>0) + { + $sql="select * from organization_case_master + where id='".$ipdmaster[0]->case_id."'"; + $query = $this->db->query($sql); + $orgcase= $query->result(); + + $ins_comp_id=$orgcase[0]->insurance_id; + $inc_card_id=$orgcase[0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id='".$inc_card_id."'"; + $query = $this->db->query($sql); + $hc_insurance_card= $query->result(); + + $sql="select * from hc_insurance where id='".$ins_comp_id."'"; + $query = $this->db->query($sql); + $insurance= $query->result(); + } + + + $sql="select sum(net_amount) as tnet_amount + from invoice_med_master + where ipd_credit=1 and ipd_credit_type=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $inv_med_total= $query->result(); + + $total_med=$inv_med_total[0]->tnet_amount; + + $sql="select sum(total_amount) as tnet_amount from invoice_master + where payment_status=1 and ipd_include=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $inv_charge_total= $query->result(); + + $sql="SELECT h.*,DATE_FORMAT(h.payment_date,'%d-%m-%Y') as pay_date_str, + concat(if(h.credit_debit=0,'','Return '),if(h.payment_mode=1,'CASH','BANK')) as pay_mode + from payment_history h where h.payof_type=4 AND h.payof_id='".$ipdno."' "; + $query = $this->db->query($sql); + $ipd_payment= $query->result(); + + + $PrintData='IPD ID : '.$ipdmaster[0]->ipd_code.' / PCode : '.$person_info[0]->p_code. ' / PName : '.$person_info[0]->p_fname .' / Age : '.$person_info[0]->age .PHP_EOL; + $PrintData.='----------------------------------------------------------------------------------------------------------'.PHP_EOL; + + $PrintData.=str_pad('Doctor Name : '. $ipd_list[0]->doc_name,35,' ',STR_PAD_RIGHT); + + if($ipdmaster[0]->case_id>0) { + $PrintData.=str_pad('Organisation : '.$insurance[0]->ins_company_name,35,' ',STR_PAD_RIGHT); + } + $PrintData.=PHP_EOL; + + $PrintData.=str_pad('Admit Date : '.$ipd_list[0]->str_register_date,35,' ',STR_PAD_RIGHT); + $PrintData.=str_pad('Discharge Date : '.$ipd_list[0]->str_discharge_date,35,' ',STR_PAD_RIGHT).PHP_EOL; + + $PrintData.='----------------------------------------------------------------------------------------------------------'.PHP_EOL; + $PrintData.=' '.PHP_EOL; + $PrintData.='# Description Rate Qty Amount '.PHP_EOL; + $PrintData.='----------------------------------------------------------------------------------------------------------'.PHP_EOL; + + $srno=1; + $headdesc=''; + + if(Count($ipd_package)>0){ + $PrintData.='Package'.PHP_EOL; + $headdesc='Package'; + for($i=0;$ipackage_name,60,' ',STR_PAD_RIGHT); + $line.=str_pad('',10,' ',STR_PAD_LEFT); + $line.=str_pad('',15,' ',STR_PAD_LEFT); + $line.=str_pad($ipd_package[$i]->package_Amount,15,' ',STR_PAD_LEFT); + $srno=$srno+1; + $PrintData.=$line.PHP_EOL; + } + } + + for($i=0;$igroup_desc) + { + $PrintData.=''. $ipd_invoice_item[$i]->group_desc .''.PHP_EOL; + $headdesc=$ipd_invoice_item[$i]->group_desc; + } + + $line=''; + $line.=str_pad($srno,3,' ',STR_PAD_RIGHT); + + $line.=str_pad($ipd_invoice_item[$i]->item_name.' '.$ipd_invoice_item[$i]->comment,60,' ',STR_PAD_RIGHT); + $line.=str_pad($ipd_invoice_item[$i]->item_qty,10,' ',STR_PAD_LEFT); + $line.=str_pad($ipd_invoice_item[$i]->item_rate,15,' ',STR_PAD_LEFT); + $line.=str_pad($ipd_invoice_item[$i]->item_amount,15,' ',STR_PAD_LEFT); + $srno=$srno+1; + $PrintData.=$line.PHP_EOL; + + } + + for($i=0;$iCharge_type) + { + $PrintData.=''. $showinvoice[$i]->Charge_type .''.PHP_EOL; + $headdesc=$showinvoice[$i]->Charge_type; + } + + $line=''; + $line.=str_pad($srno,3,' ',STR_PAD_RIGHT); + + $line.=str_pad($showinvoice[$i]->idesc,60,' ',STR_PAD_RIGHT); + $line.=str_pad($showinvoice[$i]->no_qty,10,' ',STR_PAD_LEFT); + $line.=str_pad($showinvoice[$i]->item_rate,15,' ',STR_PAD_LEFT); + $line.=str_pad($showinvoice[$i]->amount,15,' ',STR_PAD_LEFT); + $srno=$srno+1; + $PrintData.=$line.PHP_EOL; + } + + if(count($inv_med_list)>0) + { + $PrintData.='---------------------------- Medical Bill ----------------------------------------------------------'.PHP_EOL; + + $med_total=0.00; + foreach($inv_med_list as $row) + { + $line=''; + $line.=str_pad($srno,3,' ',STR_PAD_RIGHT); + $line.=str_pad($row->inv_med_code,40,' ',STR_PAD_RIGHT); + $line.=str_pad($row->net_amount,25,' ',STR_PAD_RIGHT); + + $srno=$srno+1; + $med_total +=$row->net_amount; + $PrintData.=$line.PHP_EOL; + } + } + + $PrintData.='----------------------------------------------------------------------------------------------------------'.PHP_EOL; + $PrintData.=str_pad('Gross Total : '.$ipdmaster[0]->gross_amount,100,' ',STR_PAD_LEFT).PHP_EOL; + + if($ipdmaster[0]->chargeamount1>0) + { + $PrintData.=PHP_EOL; + $PrintData.=str_pad('Charge : '.$ipdmaster[0]->charge1,90,' ',STR_PAD_RIGHT).PHP_EOL ; + $PrintData.=str_pad($ipdmaster[0]->chargeamount1,10,' ',STR_PAD_LEFT).PHP_EOL ; + } + + if($ipdmaster[0]->chargeamount2>0) + { + $PrintData.=PHP_EOL; + $PrintData.=str_pad('Charge : '.$ipdmaster[0]->charge2,90,' ',STR_PAD_RIGHT).PHP_EOL ; + $PrintData.=str_pad($ipdmaster[0]->chargeamount2,10,' ',STR_PAD_LEFT).PHP_EOL ; + } + + if($ipdmaster[0]->Discount>0) + { + $PrintData.=PHP_EOL; + $PrintData.=str_pad('Deduction : '.$ipdmaster[0]->Discount_Remark,90,' ',STR_PAD_RIGHT).PHP_EOL ; + $PrintData.=str_pad($ipdmaster[0]->Discount,10,' ',STR_PAD_LEFT).PHP_EOL ; + } + + if($ipdmaster[0]->Discount2>0) + { + $PrintData.=PHP_EOL; + $PrintData.=str_pad('Deduction : '.$ipdmaster[0]->Discount_Remark2,90,' ',STR_PAD_RIGHT).PHP_EOL ; + $PrintData.=str_pad($ipdmaster[0]->Discount2,10,' ',STR_PAD_LEFT).PHP_EOL ; + } + + if($ipdmaster[0]->Discount3>0) + { + $PrintData.=PHP_EOL; + $PrintData.=str_pad('Deduction : '.$ipdmaster[0]->Discount_Remark3,90,' ',STR_PAD_RIGHT).PHP_EOL ; + $PrintData.=str_pad($ipdmaster[0]->Discount3,10,' ',STR_PAD_LEFT).PHP_EOL ; + } + + $PrintData.='----------------------------------------------------------------------------------------------------------'.PHP_EOL; + $PrintData.=str_pad('Net Amount : '.$ipdmaster[0]->net_amount,100,' ',STR_PAD_LEFT).PHP_EOL; + $PrintData.=str_pad('Payment Recd : '.$ipdmaster[0]->total_paid_amount,100,' ',STR_PAD_LEFT).PHP_EOL; + $PrintData.=str_pad('Balance : '.$ipdmaster[0]->balance_amount,100,' ',STR_PAD_LEFT).PHP_EOL; + $PrintData.=str_pad('Balance Remark : '.$ipdmaster[0]->discharge_balance_remark,70,' ',STR_PAD_RIGHT); + $PrintData.=str_pad('Print Time : '.date('d-m-Y h:i:s'),30,' ',STR_PAD_LEFT).PHP_EOL; + + $PrintData.='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'.PHP_EOL .PHP_EOL .PHP_EOL; + + return $PrintData; + } + + + + function Ipd_invoice_print_list($daterange,$doc_name_id,$ipd_type,$ipd_status,$ipd_date,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + if($ipd_status>-1) + { + $where.=" and p.ipd_status=".$ipd_status; + } + + if($ipd_date==0) + { + $where.=" and p.register_date between '".$minRange."' and '".$maxRange."' " ; + }elseif($ipd_date==1) + { + $where.=" and p.discharge_date between '".$minRange."' and '".$maxRange."' " ; + } + + if($doc_name_id>0) + { + $where.=" and FIND_IN_SET('".$doc_name_id."',doc_list) "; + } + + if($ipd_type==6){ + $where.=" and (group_ins is null or group_ins=6)"; + }elseif($ipd_type==0){ + $where.=" "; + }else { + $where.=" and group_ins=$ipd_type "; + } + + + $sql="select p.id,p.ipd_code,p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.Bed_Desc, + charge_amount,paid_amount + from v_ipd_list p where ".$where." group by p.id,p.doc_list order by id"; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $PrintData=''; + + foreach($dischargelist as $row) + { + $PrintData.=$this->Ipd_invoice_text($row->id); + } + + echo '
'.$PrintData.'
'; + + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/IpdNew.php b/old_code_ci3/controllers/IpdNew.php new file mode 100644 index 0000000..a6e246b --- /dev/null +++ b/old_code_ci3/controllers/IpdNew.php @@ -0,0 +1,2241 @@ +load->model('Ipd_M'); + } + + public function IpdDashboard() + { + $this->load->view('IPD2/ipd_dashboard'); + } + + public function ipd_panel_payment($ipdno) + { + + $sql="select *,Date_Format(payment_date,'%d-%M-%Y') as pay_date_str, + Concat(if(payment_mode=1,'Cash','BANK'),if(credit_debit=0,'','-Return')) as pay_mode + from payment_history + where payof_type=4 and payof_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment_history']= $query->result(); + + $sql="select * from invoice_med_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_master']= $query->result(); + + $this->load->view('IPD2/ipd_payment',$data); + } + + public function IPD_info(){ + + $IPDNO = $this->input->post('input_ipd_no'); + + $sql="select * from v_ipd_list where ipd_code='$IPDNO' "; + $query = $this->db->query($sql); + $data= $query->result(); + + if(count($data)>0) + { + $Patient_id=$data[0]->p_id; + $IPD_id=$data[0]->id; + $ipd_info=$data[0]->p_code.'/'.$data[0]->p_fname.' '.$data[0]->p_rname.' /Age :'.$data[0]->str_age.' /AdmitDate:'. + $data[0]->str_register_date.'/TPA:'.$data[0]->admit_type; + + }else{ + $Patient_id=0; + $ipd_info=''; + $IPD_id=0; + } + + $rvar=array( + 'IPD_id' =>$IPD_id, + 'ipd_info'=>$ipd_info + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function ipd_Diagnosis($ipdno) + { + + $sql="select i.id as inv_id,i.invoice_code,sum(t.item_amount) as amount,i.refer_by_other, + date_format(i.inv_date,'%d-%m-%Y') as str_date,i.ipd_include, + group_concat(distinct c.group_desc) as charge_list + from invoice_master i left join + (invoice_item t join hc_item_type c on t.item_type=c.itype_id) + on i.id =t.inv_master_id + where payment_status=1 and ipd_id = ".$ipdno." group by i.id "; + + $query = $this->db->query($sql); + $data['inv_master']= $query->result(); + + $this->load->view('IPD2/ipd_diagnosis_charges',$data); + } + + public function ipd_panel_invoice_show($inv_id,$inv_type) + { + //$inv_id=$this->input->post('invid'); + //$inv_type=$this->input->post('invtype'); + + if($inv_type == 0) + { + redirect('InvoiceShow/invoice_med/'.$inv_id); + }else{ + redirect('InvoiceShow/invoice_charges/'.$inv_id); + } + } + + public function ipd_Diagnosis_invoice_show($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select *,(case payment_status when 1 Then 'cash' when 2 then 'Bank Card' when 3 then 'Org Credit' else 'Pending' end) as Payment_type_str from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $this->load->view('IPD2/ipd_diagnosis_invoice_items',$data); + + } + + public function Update_Invoice_ipd_itmes_package() + { + $ipd_item_package_type= $this->input->post('ipd_item_package_type'); + $ipd_item_id = $this->input->post('ipd_item_id'); + + $dataupdate = array( + 'package_id' => $ipd_item_package_type + ); + + + $this->Ipd_M->update_ipd_item($dataupdate,$ipd_item_id); + echo 'Value of '.$ipd_item_package_type.' is '.$ipd_item_id; + } + + public function show_account($ipdno) + { + $total_med=0.00; + $total_charges=0.00; + + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $discount=$data['ipd_master'][0]->Discount; + $discount2=$data['ipd_master'][0]->Discount2; + $discount3=$data['ipd_master'][0]->Discount3; + + $tdiscount=$discount+$discount2+$discount3; + + $charge1=$data['ipd_master'][0]->chargeamount1; + $charge2=$data['ipd_master'][0]->chargeamount2; + $tcharge=$charge1+$charge2; + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master where ipd_credit=1 and ipd_credit_type<2 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_total']= $query->result(); + + $total_med=$data['inv_med_total'][0]->tnet_amount; + + $sql="select sum(total_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_charge_total']= $query->result(); + + $total_charges=$data['inv_charge_total'][0]->tnet_amount; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as tnet_amount from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['inv_payment_total']= $query->result(); + + $total_payment=$data['inv_payment_total'][0]->tnet_amount; + + $total_balance_amount=$total_payment-($total_charges+$total_med+$tcharge-$tdiscount); + + $data['inv_total']=array( + 'total_med' => $total_med, + 'total_charges' => $total_charges, + 'total_payment' => $total_payment, + 'total_balance_amount' => $total_balance_amount, + 'discount' => $tdiscount, + 'charge' => $tcharge, + 'ipd_id' => $ipdno + ); + + $this->load->view('IPD2/ipd_account_panel',$data); + + } + + public function ipd_complete_invoice($ipdno,$print=0) + { + //calculate_IPD + + + + $this->Ipd_M->calculate_IPD($ipdno); + + $sql="select * from ipd_master where id=".$ipdno; + $query = $this->db->query($sql); + $data['ipdmaster']= $query->result(); + + $pno=$data['ipdmaster'][0]->p_id; + + $sql="select * from ipd_package where ipd_id=".$ipdno; + $query = $this->db->query($sql); + $data['ipd_package']= $query->result(); + + //Check Items in Package + $No_Pack_items=0; + + $sql1= 'Select count(*) as no_rec from ipd_invoice_item i + where i.package_id>0 and i.ipd_id='.$ipdno; + + $sql2= 'Select count(*) as no_rec from invoice_med_master + Where ipd_credit=1 and ipd_credit_type=0 and ipd_id = '.$ipdno; + + $sql3= 'Select count(*) as no_rec from v_ipd_invoice b + where b.ipd_id='.$ipdno.' and ipd_include=0'; + + $query = $this->db->query($sql1); + $Package_Items= $query->result(); + $No_Pack_items+=$Package_Items[0]->no_rec; + + $query = $this->db->query($sql2); + $Package_Items= $query->result(); + $No_Pack_items+=$Package_Items[0]->no_rec; + + $query = $this->db->query($sql3); + $Package_Items= $query->result(); + $No_Pack_items+=$Package_Items[0]->no_rec; + + $data['No_Pack_items']=$No_Pack_items; + + if(count($data['ipd_package'])>0) + { + $sql="select t.group_desc,i.*,sum(i.item_amount) as xAmount + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.package_id=0 and i.ipd_id=".$ipdno." + group by i.item_type,i.id order by i.item_type"; + $query = $this->db->query($sql); + $data['ipd_invoice_item']= $query->result(); + }else{ + $sql="select t.group_desc,i.*,sum(i.item_amount) as xAmount + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.ipd_id=".$ipdno." + group by i.item_type,i.id order by i.item_type"; + $query = $this->db->query($sql); + $data['ipd_invoice_item']= $query->result(); + } + + $sql="select * from invoice_med_master + where ipd_credit=1 and ipd_credit_type=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $data['inv_med_list']= $query->result(); + + $sql="select b.ipd_id AS ipd_id,b.Charge_type AS Charge_type,b.idesc AS idesc, + b.item_rate AS item_rate,b.orgcode AS orgcode,sum(b.item_qty) AS no_qty,sum(b.Amount) AS amount + from v_ipd_invoice b where b.ipd_id=".$ipdno." and ipd_include=1 + group by b.ipd_id,b.item_id,b.item_rate order by b.Charge_type "; + + $query = $this->db->query($sql); + $data['showinvoice']= $query->result(); + + $sql="select * from v_ipd_list where id=".$ipdno; + $query = $this->db->query($sql); + $data['ipd_list']= $query->result(); + + $sql="select b.ipd_id,b.bed_id,b.TDate,m.room_name,m.bed_no + from ipd_bed_assign b left join hc_bed_master m on b.bed_id=m.id + where b.ipd_id=".$ipdno." order by TDate desc"; + $query = $this->db->query($sql); + $data['bed_list']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($data['ipdmaster'][0]->case_id>0) + { + $sql="select * from organization_case_master where id='".$data['ipdmaster'][0]->case_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id='".$inc_card_id."'"; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id='".$ins_comp_id."'"; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + } + + $sql="SELECT h.*,DATE_FORMAT(h.payment_date,'%d-%m-%Y') as pay_date_str, + concat(if(h.credit_debit=0,'','Return '),if(h.payment_mode=1,'CASH','BANK')) as pay_mode + from payment_history h where h.payof_type=4 AND h.payof_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + if($print>0) + { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + //$this->m_pdf->pdf->SetWatermarkText(H_Name); + //$this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Report-IPDBill-'.$ipdno."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + + if($print==1) + { + $content=$this->load->view('IPD2/Ipd_invoice_print_V',$data,TRUE); + }else if($print==2) + { + $content=$this->load->view('IPD2/ipd_invoice_print_wo_payment',$data,TRUE); + }else if($print==3) + { + $content=$this->load->view('IPD2/ipd_invoice_doc_wise',$data,TRUE); + }else if($print==4) + { + $content=$this->load->view('IPD2/ipd_invoice_print_TPA_V',$data,TRUE); + }else if($print==5){ + $content=$this->load->view('IPD2/ipd_invoice_print_on_letterhead',$data,TRUE); + }else{ + $content='Blank'; + } + + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + + + }else{ + $this->load->view('IPD2/Ipd_invoice_V',$data); + } + + + + } + + public function ipd_short_invoice($ipdno,$print=0) + { + $sql="select * from ipd_master where id=".$ipdno; + $query = $this->db->query($sql); + $data['ipdmaster']= $query->result(); + + $pno=$data['ipdmaster'][0]->p_id; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($data['ipdmaster'][0]->case_id>0) + { + $sql="select * from organization_case_master where id='".$data['ipdmaster'][0]->case_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id='".$inc_card_id."'"; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id='".$ins_comp_id."'"; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + } + + $sql="select * from v_ipd_invoice v + where v.ipd_id=".$ipdno." order by Charge_type,inv_date "; + $query = $this->db->query($sql); + $data['showinvoice']= $query->result(); + + $sql="select sum(amount) as GTotal from v_ipd_invoice v + where v.ipd_id=".$ipdno." "; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select *,case payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end as pay_mode from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + + if($print>0) + { + $this->load->view('IPD2/Ipd_invoice_print_V',$data); + + }else{ + $this->load->view('IPD2/Ipd_invoice_V',$data); + } + } + + public function ipd_confirm_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $this->load->model('Payment_M'); + + $ipd_id=$this->input->post('ipd_id'); + $amount=$this->input->post('amount'); + + $sql="select * from ipd_master where id=".$ipd_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $pay_remark=$this->input->post('cash_remark'); + + $pay_datetime=str_to_MysqlDate($this->input->post('date_payment')).' '.date('H:i:s'); + + if($this->input->post('mode')==1) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'4', + 'payof_id'=>$ipd_id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'0', + 'amount'=>$amount, + 'payment_date'=>$pay_datetime, + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_id, + 'pay_date' =>$pay_datetime + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==2) + { + + $FormRules = array( + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[1]|max_length[15]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'4', + 'payof_id'=>$ipd_master[0]->id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'0', + 'amount' => $amount, + 'payment_date'=>$pay_datetime, + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'pay_bank_id'=>$this->input->post('cbo_pay_type'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $status='Bank Card'; + + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + } + + public function ipd_ded_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $this->load->model('Payment_M'); + + $ipd_id=$this->input->post('ipd_id'); + $amount=$this->input->post('amount'); + + $sql="select * from ipd_master where id=".$ipd_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $pay_remark=$this->input->post('cash_remark'); + + if($this->input->post('mode')==3) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'4', + 'payof_id'=>$ipd_id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'1', + 'amount'=>$amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==4) + { + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'4', + 'payof_id'=>$ipd_id, + 'payof_code'=>$ipd_master[0]->ipd_code, + 'credit_debit'=>'1', + 'amount'=>$amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + 'payid' => $insert_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function ipd_org_status_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $this->load->model('Ocasemaster_M'); + $data['master'] = array( + 'org_approved_amount' => $this->input->post('amount'), + 'org_approved_status_id' => $this->input->post('org_status'), + 'org_status_update_by' => $user_name + ); + + $case_id=$this->input->post('case_id'); + $this->Ocasemaster_M->update($data['master'],$case_id); + + $rvar=array( + 'update' =>'1', + 'msg' => 'Update Done '.$case_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function ipd_main_panel($ipdno) + { + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select * from v_ipd_list where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_list']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select i.id,d.p_fname,d.id as doc_id from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master + where id=".$data['ipd_info'][0]->case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from organization_case_master + where status=0 and case_type=1 and ipd_id=0 and p_id=".$data['ipd_info'][0]->p_id; + $query = $this->db->query($sql); + $data['case_master_open']= $query->result(); + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from org_approved_status "; + $query = $this->db->query($sql); + $data['org_approved_status']= $query->result(); + + $sql="SELECT m.id,CONCAT(m.title,' ',m.f_name,' [',t.type_desc,']') AS refer_name, t.type_desc + FROM refer_master m JOIN refer_type t ON m.refer_type=t.id order by t.type_desc,m.f_name"; + $query = $this->db->query($sql); + $data['refer_master']= $query->result(); + + $sql="SELECT i.id,CONCAT(m.title,' ',m.f_name,' [',t.type_desc,']') AS refer_name, t.type_desc + FROM (refer_master m JOIN refer_type t ON m.refer_type=t.id) + Join ipd_refer i on i.refer_by=m.id and i.ipd_id=$ipdno + order by t.type_desc,m.f_name"; + $query = $this->db->query($sql); + $data['refer_list']= $query->result(); + + + $this->load->view('IPD2/ipd_main_panel',$data); + } + + public function ipd_account_panel($ipdno) + { + //calculate_IPD + + + $this->Ipd_M->calculate_IPD($ipdno); + + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $data['ipd_master']=$ipd_master; + + $data['inv_total']=array( + 'total_med_credit' => $ipd_master[0]->med_amount+$ipd_master[0]->package_med_amount, + 'total_med_cash' => $ipd_master[0]->cash_med_amount, + 'total_med_cash_paid' => $ipd_master[0]->med_paid, + 'total_charge_amount' => $ipd_master[0]->charge_amount, + 'total_payment' => $ipd_master[0]->total_paid_amount, + 'total_balance_amount' => $ipd_master[0]->balance_amount, + 'net_amount' => $ipd_master[0]->net_amount, + 'ipd_id' => $ipdno + ); + + $this->load->view('IPD2/ipd_account_panel',$data); + } + + public function ipd_panel($ipdcode,$stype=0) + { + + if($stype > 0) + { + $sql="select id from ipd_master where ipd_code='".$ipdcode."' "; + $query = $this->db->query($sql); + $get_ipd_no= $query->result(); + + $ipdno=$get_ipd_no[0]->id; + }else{ + $ipdno=$ipdcode; + } + + //calculate_IPD + + + $this->Ipd_M->calculate_IPD($ipdno); + + $sql="select * from v_ipd_list where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $p_id=$data['ipd_info'][0]->p_id; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age + from patient_master where id='".$p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select * + from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id + where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * + from organization_case_master + where status=0 and case_type=1 and ipd_id=$ipdno and p_id=".$p_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $data['ipd_master']=$ipd_master; + + $sql="select *,Date_Format(payment_date,'%d-%M-%Y') as pay_date_str, + Concat(if(payment_mode=1,'Cash','BANK'),if(credit_debit=0,'','-Return')) as pay_mode + from payment_history + where payof_type=4 and payof_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_payment_history']= $query->result(); + + if ($this->ion_auth->in_group('admin1') || $this->ion_auth->in_group('IPDAdmit') ) { + if($data['ipd_info'][0]->ipd_status==0) + { + $this->load->view('IPD2/Ipdpanel_V',$data); + }else{ + if($this->ion_auth->in_group('IPDReAdmit')) + { + $this->load->view('IPD2/Ipdpanel_V',$data); + }else{ + $this->load->view('IPD2/IPD_View',$data); + } + } + }else{ + $this->load->view('IPD2/IPD_View',$data); + } + } + + public function load_model_TPA_Payment($ipd_id) + { + $sql="select *,if(case_type=1,'MLC','Non MLC') as case_type_s, + Date_format(register_date,'%d-%m-%Y') as str_register_date , + Date_format(discharge_date,'%d-%m-%Y') as str_discharge_date + from ipd_master where id='".$ipd_id."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master + where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $data['ipd_id']=$ipd_id; + + $this->load->view('IPD2/TPA_Payment',$data); + } + + public function tpa_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $ipd_id=$this->input->post('hid_ipd_id'); + $payable_by_tpa=$this->input->post('input_payable_by_tpa'); + $discount_for_tpa=$this->input->post('input_discount_for_tpa'); + $discount_by_hospital=$this->input->post('input_discount_by_hospital'); + $discount_by_hospital_2=$this->input->post('input_discount_by_hospital_2'); + $discount_by_hospital_remark=$this->input->post('input_discount_by_hospital_remark'); + $discount_by_hospital_2_remark=$this->input->post('input_discount_by_hospital_2_remark'); + + $paydata = array( + 'payable_by_tpa'=> $payable_by_tpa, + 'discount_by_hospital'=>$discount_by_hospital, + 'discount_by_hospital_2'=>$discount_by_hospital_2, + 'discount_for_tpa'=>$discount_for_tpa, + 'discount_by_hospital_remark'=>$discount_by_hospital_remark, + 'discount_by_hospital_2_remark'=>$discount_by_hospital_2_remark, + ); + + $update=$this->Ipd_M->update($paydata,$ipd_id); + + $rvar=array( + 'update' =>1, + 'ipd_id'=> $ipd_id, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function IpdList() + { + $sql = "select *,(paid_amount-(charge_amount+med_amount)) as balance from v_ipd_list where ipd_status=0 "; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('IPD2/IPDList_V',$data); + } + + public function ipd_room_status() + { + $sql="select b.room_name,b.room_rent,count(b.id) as Total_Bed,sum(if(b.bed_used_p_id=0,1,0)) as FreeBed + from hc_bed_master b group by b.room_name"; + $query = $this->db->query($sql); + $data['roomdata']= $query->result(); + + $this->load->view('IPD2/ipd_bed_status',$data); + } + + public function add_remove_doc($ipd_doc_id) + { + if ($this->ion_auth->in_group('IPDAdmit')) { + $this->db->delete("ipd_master_doc_list", "id=".$ipd_doc_id); + } + } + + public function add_add_doc($ipd_id,$doc_id) + { + if ($this->ion_auth->in_group('IPDAdmit')) { + + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $data = array( + 'ipd_id' => $ipd_id, + 'doc_id' => $doc_id + ); + $inser_id=$this->Ipd_M->add_ipd_doc($data); + } + } + + public function show_ipd_form($ipdno,$form_no=1) + { + $sql="select *,if(case_type=1,'MLC','Non MLC') as case_type_s, + Date_format(register_date,'%d-%m-%Y') as str_register_date , + Date_format(discharge_date,'%d-%m-%Y') as str_discharge_date + from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select * From v_ipd_list Where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info_2']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select *,concat_ws(' ','Dr.',p_fname,p_mname,p_lname) as doc_name from doctor_master where id='".$data['ipd_info'][0]->r_doc_id."' "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select i.id,d.p_fname,d.id as doc_id from ipd_master_doc_list i join doctor_master d on i.doc_id = d.id where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_doc_list']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_info'][0]->case_id."' "; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $d= $this->ion_auth->user()->row(); + + $data['user'] = $d; + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Report-FaceForm-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + + if($form_no==1) + { + $content=$this->load->view('IPD2/print_ipd_form1',$data,TRUE); + }elseif($form_no==2){ + $content=$this->load->view('IPD2/print_ipd_form2',$data,TRUE); + }elseif($form_no==3){ + $content=$this->load->view('IPD2/print_ipd_form3',$data,TRUE); + }elseif($form_no==4){ + $content=$this->load->view('IPD2/ipd_dues_form',$data,TRUE); + }elseif($form_no==5){ + $this->m_pdf->pdf->showWatermarkText = false; + $content=$this->load->view('IPD_Format/form_admission_histroy_phusical_assessment',$data,TRUE); + }elseif($form_no==6){ + $this->m_pdf->pdf->showWatermarkText = false; + $content=$this->load->view('IPD_Format/form_treatment_chart',$data,TRUE); + }elseif($form_no==7){ + $this->m_pdf->pdf->showWatermarkText = false; + $content=$this->load->view('IPD_Format/form_vitals_chart',$data,TRUE); + }elseif($form_no==8){ + $this->m_pdf->pdf->showWatermarkText = false; + $content=$this->load->view('IPD_Format/form_progress_notes',$data,TRUE); + }elseif($form_no==9){ + $this->m_pdf->pdf->showWatermarkText = false; + $content=$this->load->view('IPD_Format/form_fluid_in_out',$data,TRUE); + }elseif($form_no==13){ + $content=$this->load->view('IPD2/print_ipd_form4',$data,TRUE); + }else{ + $content=""; + } + + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + } + + public function ipd_list() + { + $this->load->view('IPD2/ipd_all_list'); + } + + public function addipd($pno) + { + $sql="select count(*) as no_ipd from ipd_master where ipd_status=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['ipd_master_rec']= $query->result(); + + if ($data['ipd_master_rec'][0]->no_ipd > 0) + { + $sql="select * from ipd_master where ipd_status=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + redirect('IpdNew/ipd_panel/'.$data['ipd_info'][0]->id); + }else{ + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id "; + $query = $this->db->query($sql); + $data['doc_spec_l']= $query->result(); + + $sql="select id,concat('Bed No:',bed_no,'/','[',room_name,']') as Bed_Desc from hc_bed_master where bed_used_p_id=0"; + $query = $this->db->query($sql); + $data['ipd_bed_list']= $query->result(); + + $sql="select * from hc_insurance "; + $query = $this->db->query($sql); + $data['insur_list']= $query->result(); + + $sql="select * from organization_case_master + where status=0 and case_type=1 and ipd_id=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from refer_master where active=1"; + $query = $this->db->query($sql); + $data['refer_master']= $query->result(); + + + $this->load->view('IPD2/Ipd_Registration_V',$data); + } + + } + + public function AddNew() { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $data['master'] = array( + 'p_id' => $this->input->post('pid'), + 'P_name' => $this->input->post('pname'), + 'relation' => $this->input->post('r_relation'), + 'contact_person_Name' => $this->input->post('rp_name'), + 'insurance_id' => $this->input->post('insur_list'), + 'policy_no' => $this->input->post('insur_no'), + 'register_date' => str_to_MysqlDate($this->input->post('res_date')), + 'problem' => $this->input->post('problem'), + 'remark' => $this->input->post('remark'), + 'P_mobile1' => $this->input->post('phone1'), + 'P_mobile2' => $this->input->post('phone2'), + 'case_type' => $this->input->post('optionsRadios_mlc'), + 'case_id' => $this->input->post('optionsRadios_org'), + 'reg_time' => $this->input->post('res_time'), + 'refer_by' => $this->input->post('refer_by_list') + ); + + $groupData = $this->input->post('doc_id'); + + if (isset($groupData) && !empty($groupData)) { + $data['doc_list']=$groupData; + + $inser_id=$this->Ipd_M->insert($data); + + $data['BedData'] = array( + 'ipd_id' => $inser_id, + 'Fdate' => date('Y-m-d h:i:s'), + 'TDate' => date('Y-m-d h:i:s'), + 'bed_id' => $this->input->post('room_list') + ); + + if($this->input->post('room_list')<>"") + { + $inser_bed_id=$this->Ipd_M->bedassign($data['BedData']); + } + } + else + { + $inser_id=0; + } + + if($this->input->post('optionsRadios_org')>0 && $inser_id>0) + { + $org_data = array( + 'ipd_id' => $inser_id, + ); + + $this->load->model('Ocasemaster_M'); + $this->Ocasemaster_M->update($org_data,$this->input->post('optionsRadios_org')); + } + +$rvar=array( +'insertid' =>$inser_id +); +$encode_data = json_encode($rvar); +echo $encode_data; +} + + public function ipd_bed_assign_list($ipdno) + { + $sql="select m.bed_no,m.room_name,b.Fdate,b.TDate,b.Remark + from ipd_bed_assign b join hc_bed_master m on b.bed_id=m.id where b.ipd_id=".$ipdno; + $query = $this->db->query($sql); + $data['ipd_bed_assign']= $query->result(); + + $sql="select id,concat('Bed No:',bed_no,'/','[',room_name,']') as Bed_Desc from hc_bed_master where bed_used_p_id=0"; + $query = $this->db->query($sql); + $data['ipd_bed_list']= $query->result(); + + + $this->load->view('IPD2/ipd_bed_assign',$data); + + } + + + public function ipd_cash_print_pdf($ipd_id,$payid) + { + $sql="select *,date_format(payment_date,'%d-%m-%Y %h:%i %p') as payment_date_str , + if(credit_debit=0,'','Return') as Amount_str + from payment_history where payof_type=4 and payof_id=$ipd_id and id=$payid"; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + $sql="select * from ipd_master where id =".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $pno=$data['ipd_master'][0]->p_id; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $data['ipd_id']=$ipd_id; + $data['payid']=$payid; + + //load mPDF library + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Charge_Invoice-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $content=$this->load->view('IPD2/ipd_payment_receipt_print',$data,TRUE); + + //echo $content; + + //$this->m_pdf->pdf->debug = true; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output("TEST.pdf","I"); + } + + public function load_model_box($ipd_id) + { + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days,if(case_type=1,'MLC','Non MLC') as case_type_s, Date_format(register_date,'%d-%m-%Y') as str_register_date from ipd_master where id='".$ipd_id."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) as str_age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select s.id,s.pay_type,m.bank_name + From hospital_bank m join hospital_bank_payment_source s on m.id=s.bank_id"; + $query = $this->db->query($sql); + $data['bank_data']= $query->result(); + + $this->load->view('IPD2/ipd_model_payment_box',$data); + } + + + + public function ipd_bed_list() + { + $sql="select id,concat('Bed No:',bed_no,'/','[',room_name,']') as Bed_Desc from hc_bed_master where bed_used_p_id=0"; + + $query = $this->db->query($sql); + $ipd_bed_list= $query->result(); + + echo ''; + echo ''; + echo ''; + } + + public function load_model_ded_box() + { + $this->load->view('IPD2/ipd_panel_deduction_payment'); + } + + + + public function discharge_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $discharge_by=$user_name.'['.$user_id.']'; + + $data['master'] = array( + 'discharge_by' => $discharge_by, + 'discharge_remark' => $this->input->post('discharge_remark'), + 'discharge_balance_user' => $this->input->post('input_bal_user'), + 'discharge_balance_remark' => $this->input->post('input_bal_remark'), + 'ipd_status' => '1', + 'discharge_date' => str_to_MysqlDate($this->input->post('dis_date')), + 'discharge_time' => $this->input->post('dis_time'), + 'discarge_patient_status' => $this->input->post('p_status') + ); + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Discharge Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_ipdadmit_time() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $ipd_id=$this->input->post('Ipd_ID'); + + $data['master'] = array( + 'register_date' => str_to_MysqlDate($this->input->post('strdate')), + 'reg_time' => $this->input->post('strtime') + ); + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Admit Date Updated" + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_relative_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $Ipd_ID=$this->input->post('Ipd_ID'); + $P_mobile1=$this->input->post('P_mobile1'); + $P_mobile2=$this->input->post('P_mobile2'); + $contact_person_Name=$this->input->post('contact_person_Name'); + $case_type=$this->input->post('case_type'); + + $data['master'] = array( + 'contact_person_Name' => $contact_person_Name, + 'P_mobile1' => $P_mobile1, + 'P_mobile2' => $P_mobile2, + 'case_type' => $case_type + ); + + $this->Ipd_M->update($data['master'],$Ipd_ID); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Admit Date Updated" + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function discharge_ipd($ipdno) + { + $sql="select * from ipd_master where id='".$ipdno."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select * from ipd_discharg_status "; + $query = $this->db->query($sql); + $data['ipd_discharge_status']= $query->result(); + + $discount=$data['ipd_info'][0]->Discount; + + $sql="select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$data['ipd_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + + if($data['ipd_info'][0]->ipd_status == 0 ) + { + $this->load->view('IPD2/ipd_discharge',$data); + }else{ + $this->load->view('IPD2/ipd_discharged_status',$data); + } + + + } + + public function getIpdTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'ipd_code', + 1 => 'p_code', + 2 => 'p_fname', + 3=> 'admit_type', + 4=> 'insurance_no_1', + 5=> 'doc_name', + 6=> 'Disstatus', + 7=> 'str_register_date', + 8=> 'str_discharge_date', + 9=> 'status_desc' + ); + + // getting total number records without any search + $sql_f_all = "select * "; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from v_ipd_list "; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1 = 1"; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //ipd_code + $sql_where.=" AND ipd_code LIKE '%".$requestData['columns'][0]['search']['value']."' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //p_code + $sql_where.=" AND p_code LIKE '".$requestData['columns'][1]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][2]['search']['value']) ){ //p_fname + $sql_where.=" AND p_fname LIKE '%".$requestData['columns'][2]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][3]['search']['value']) ){ //P_mobile1 + $sql_where.=" AND (admit_type LIKE '%".$requestData['columns'][3]['search']['value']."%' + or ins_company_name LIKE '%".$requestData['columns'][3]['search']['value']."%')"; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][4]['search']['value']) ){ //P_mobile1 + $sql_where.=" AND insurance_no_1 LIKE '%".$requestData['columns'][4]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][5]['search']['value']) ){ //P_mobile1 + $sql_where.=" AND doc_name LIKE '%".$requestData['columns'][5]['search']['value']."%' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][7]['search']['value']) ) + { //IPD Admit Date Range + $rangeArray = explode("/",$requestData['columns'][7]['search']['value']); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + $admitType = $rangeArray[2]; + if($admitType==0){ + $sql_where.=" AND ( Date(register_date) between '".$minRange."' AND '".$maxRange."' ) "; + }elseif($admitType==1){ + $sql_where.=" AND ( Date(discharge_date) between '".$minRange."' AND '".$maxRange."' ) "; + }else{ + $sql_where.=" AND (( Date(register_date) between '".$minRange."' AND '".$maxRange."' ) "; + $sql_where.=" OR ( Date(discharge_date) between '".$minRange."' AND '".$maxRange."' )) "; + } + + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function discount_update($dis_no) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $Discount_By=$user_name.'['.$user_id.']'.date('d-m-Y'); + + if($dis_no==1) + { + $data['master'] = array( + 'Discount_By' => $Discount_By, + 'Discount_Remark' => $this->input->post('Discount_Remark'), + 'Discount' => $this->input->post('Discount') + ); + }elseif($dis_no==2){ + $data['master'] = array( + 'Discount_By2' => $Discount_By, + 'Discount_Remark2' => $this->input->post('Discount_Remark'), + 'Discount2' => $this->input->post('Discount') + ); + }elseif($dis_no==3){ + $data['master'] = array( + 'Discount_By3' => $Discount_By, + 'Discount_Remark3' => $this->input->post('Discount_Remark'), + 'Discount3' => $this->input->post('Discount') + ); + } + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Discount Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function charge_update($dis_no) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $charge_by=$user_name.'['.$user_id.']'.date('d-m-Y'); + + if($dis_no==1) + { + $data['master'] = array( + 'charge_by1' => $charge_by, + 'charge1' => $this->input->post('input_charge_remark1'), + 'chargeamount1' => $this->input->post('input_charge_Amount1') + ); + }elseif($dis_no==2){ + $data['master'] = array( + 'charge_by2' => $charge_by, + 'charge2' => $this->input->post('input_charge_remark2'), + 'chargeamount2' => $this->input->post('input_charge_Amount2') + ); + } + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Charge Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function readmit($dis_no) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $charge_by=$user_name.'['.$user_id.']'.date('d-m-Y'); + + if($dis_no==2) + { + $data['master'] = array( + 'ipd_status' => '0' + ); + } + + $ipd_id=$this->input->post('Ipd_ID'); + $this->Ipd_M->update($data['master'],$ipd_id); + + $inser_id=1; + + $rvar=array( + 'insertid' =>$inser_id, + 'showcontent' => "Status Updated." + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function add_bed_room() + { + $room_list=$this->input->post('room_list'); + $Ipd_ID=$this->input->post('Ipd_ID'); + + + $data = array( + 'ipd_id' => $this->input->post('Ipd_ID'), + 'Fdate' => $this->input->post('start_datetime'), + 'TDate' => $this->input->post('end_datetime'), + 'bed_id' => $this->input->post('room_list') + ); + + $inser_id=$this->Ipd_M->bedassign($data); + + $sql="select m.bed_no,m.room_name,b.Fdate,b.TDate,b.Remark + from ipd_bed_assign b join hc_bed_master m on b.bed_id=m.id where b.ipd_id=".$Ipd_ID; + + $query = $this->db->query($sql); + $room_assign_info= $query->result(); + + $r_data='
+ + + + + + + + + + '; + + for ($i = 0; $i < count($room_assign_info); ++$i) { + $r_data=$r_data.' + + + + + '; + } + + $r_data=$r_data.'
Bed No.DescriptionDateVacant Date
'.$room_assign_info[$i]->bed_no.''.$room_assign_info[$i]->room_name.''.$room_assign_info[$i]->Fdate.''.$room_assign_info[$i]->TDate.'
'; + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + //echo $encode_data; + echo $r_data; + + } + + public function list_med_inv($ipd_id) + { + $sql="select * from invoice_med_master where ipd_credit=1 and ipd_id = ".$ipd_id; + $query = $this->db->query($sql); + $data['inv_master_credit']= $query->result(); + + $data['ipd_id']=$ipd_id; + + $this->load->view('IPD2/IPD_Medical_Invoice_Panel',$data); + } + + public function list_med_inv_details($ipd_id,$inv_med_id) + { + $sql="select * from invoice_med_master where ipd_credit=1 and id='".$inv_med_id."' and ipd_id = ".$ipd_id; + $query = $this->db->query($sql); + $data['inv_master_credit']= $query->result(); + + $sql="select * from inv_med_item where inv_med_id='".$inv_med_id."'"; + $query = $this->db->query($sql); + $data['inv_master_credit_details']= $query->result(); + + $this->load->view('IPD2/ipd_medical_invoice_short',$data); + } + + + public function Update_Invoice_ipd_credit_type() + { + $ipd_credit_type= $this->input->post('ipd_credit_type'); + $inv_id = $this->input->post('inv_id'); + + $dataupdate = array( + 'ipd_include' => $ipd_credit_type + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$inv_id); + } + + + //Org. Update + + public function IPD_Invoice_Edit($IPD_ID) + { + $sql="select * from v_ipd_list + where id=".$IPD_ID; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $ins_comp_id=$data['ipd_master'][0]->insurance_id; + + if($ins_comp_id=='' || $ins_comp_id == null) + { + $ins_comp_id=0; + } + + $sql="select i.*,t.group_desc + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.ipd_id=".$IPD_ID; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from ipd_invoice_item where ipd_id=".$IPD_ID; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select d.id ,d.p_fname ,concat(d.p_fname,' [',group_concat(m.SpecName),']') as DocSpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id order by d.p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from med_spec order by SpecName"; + $query = $this->db->query($sql); + $data['med_spec']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=1 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_1']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=2 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_2']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=5 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_5']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=3 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_3']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=6 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_6']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=7 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_7']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=8 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_8']= $query->result(); + + $sql="select m.id,Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}', + if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_comp_id and isdelete=0 + where m.itype=10 order by m.idesc "; + $query = $this->db->query($sql); + $data['item_list_10']= $query->result(); + + $sql="select * from ipd_item_type "; + $query = $this->db->query($sql); + $data['item_list_cat']= $query->result(); + + $data['ins_comp_id']=$ins_comp_id; + + $this->load->view('IPD2/ipd_invoice_items',$data); + } + + public function ipd_package($ipd_id) + { + + $sql="select * from v_ipd_list + where id=$ipd_id"; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $ins_comp_id=$data['ipd_master'][0]->insurance_id; + + if($ins_comp_id=='' || $ins_comp_id == null) + { + $ins_comp_id=0; + } + + + $sql="SELECT m.id,m.ipd_pakage_name,m.Pakage_Min_Amount,i.hc_insurance_id, + i.code,if(i.hc_insurance_id is null,m.Pakage_Min_Amount,i.i_amount) as amount1, + if(i.hc_insurance_id is null,Concat(' Rs. ',m.Pakage_Min_Amount),Concat('[ Rs. ',i.i_amount,' /Org.Code ',i.code,']')) as org_code + from package m left join package_insurance i + on m.id=i.hc_items_id and i.hc_insurance_id=$ins_comp_id order by m.ipd_pakage_name" ; + $query = $this->db->query($sql); + $data['package_list']= $query->result(); + + $sql="select d.id ,d.p_fname ,concat(d.p_fname,' [',group_concat(m.SpecName),']') as DocSpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id order by d.p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $this->load->view('IPD2/ipd_package',$data); + } + + public function show_Package($ipd_id) + { + $sql="select * from ipd_package where ipd_id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_package']= $query->result(); + + echo ' + + + + + + '; + $srno=0; + $head=1; + foreach($data['ipd_package'] as $row) + { + $srno=$srno+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo '
#Package NameAmount
'.$srno.''.$row->package_name.'
'.$row->package_desc.'
'; + echo ''; + echo '
'; + + } + + public function ipd_package_showitem($type) + { + + + $ipd_id=$this->input->post('ipd_id'); + $pack_id=$this->input->post('package_id'); + $package_name=$this->input->post('package_name'); + $comment=$this->input->post('comment'); + $package_desc=$this->input->post('comment'); + + $sql="select * from v_ipd_list + where id=$ipd_id"; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $ins_comp_id=$data['ipd_master'][0]->insurance_id; + + if($ins_comp_id=='' || $ins_comp_id == null) + { + $ins_comp_id=0; + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.' D:'.date('d-m-Y h:i:s'); + + if($type==1) + { + $sql="SELECT m.id,m.ipd_pakage_name,m.Pakage_Min_Amount,i.hc_insurance_id, + i.code,if(i.hc_insurance_id is null,m.Pakage_Min_Amount,i.i_amount) as amount1, + if(i.hc_insurance_id is null,Concat(' Rs. ',m.Pakage_Min_Amount),Concat('[ Rs. ',i.i_amount,' /Org.Code ',i.code,']')) as org_code, + i.code + from package m left join package_insurance i + on m.id=i.hc_items_id and i.hc_insurance_id=$ins_comp_id + WHERE m.id=$pack_id"; + + $query = $this->db->query($sql); + $package= $query->result(); + + $item_custom_amount=$this->input->post('input_amount'); + $date_item=$this->input->post('date_item'); + $org_code=''; + + if($pack_id>1) + { + $package_desc=$package[0]->Pakage_description; + $package_name=$package[0]->ipd_pakage_name; + $item_amount=$package[0]->amount1; + $org_code=$package[0]->code; + } + + if($date_item=='') + { + $date_item=date('Y-m-d'); + } + + if($item_custom_amount>0) + { + $item_amount=$item_custom_amount; + } + + $data['insert_package'] = array( + 'ipd_id' => $ipd_id, + 'package_id' => $pack_id, + 'package_name' => $package_name, + 'package_desc' => $package_desc, + 'package_Amount' => $item_amount, + 'comment' => $comment, + 'update_by' => $user_name, + 'ins_id'=> $ins_comp_id, + 'org_code'=> $org_code + ); + $inser_id=$this->Ipd_M->insert_package( $data['insert_package']); + + }elseif($type==2) + { + $amount_value=$this->input->post('input_amount'); + $data['update_package'] = array( + 'package_Amount' => $amount_value + ); + + $inser_id=$this->Ipd_M->update_package( $data['update_package'],$this->input->post('itemid')); + + }else{ + echo $this->Ipd_M->deletepackage($this->input->post('itemid')); + //$this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + } + + public function doc_ipd_fee($doc_id) + { + $sql="select * from doc_ipd_fee where isdelete=0 and doc_fee_type=2 and doc_id= ".$doc_id." order by doc_fee_desc "; + $query = $this->db->query($sql); + $doc_fee= $query->result(); + + foreach($doc_fee as $row) + { + echo ''; + } + + } + + public function ipd_items_bytype() + { + $tid=$this->input->post('itype_idv'); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from ipd_items where itype=".$tid." order by idesc "; + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + echo '
+ +
'; + } + + public function ipd_showitem($type) + { + + + $ipd_id=$this->input->post('ipd_id'); + $item_id=$this->input->post('itype_name_id'); + + $ins_id=$this->input->post('ins_id'); + + if($ins_id=='') + { + $ins_id=0; + } + + if($type==1) + { + + $sql="select m.id,m.idesc, + if(i.id is null,'',i.code) as org_code, if(i.hc_insurance_id is null,m.amount,i.amount1) AS amount1 + from (ipd_items m join ipd_item_type t on m.itype=t.itype_id) + left join ipd_items_insurance i on m.id=i.hc_items_id AND hc_insurance_id=$ins_id and isdelete=0 + where m.id=$item_id "; + $query = $this->db->query($sql); + $itemlist= $query->result(); + + if(count($itemlist)>0) + { + $item_rate=$itemlist[0]->amount1; + $item_name=$itemlist[0]->idesc; + $org_code=$itemlist[0]->org_code; + }else{ + $item_rate=$this->input->post('input_rate'); + $item_name=$this->input->post('itype_name'); + $org_code=''; + } + + $item_custom_rate=$this->input->post('input_rate'); + $date_item=$this->input->post('date_item'); + + if($date_item=='') + { + $date_item=date('Y-m-d'); + } + + if($item_custom_rate>0) + { + $item_rate=$item_custom_rate; + } + + $amount_value=$this->input->post('input_qty')*$item_rate; + + $doc_id=$this->input->post('doc_id'); + + if($doc_id<1) + { + $refername=$this->input->post('refername'); + }else{ + $sql="select * from doctor_master where id=".$doc_id; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + $refername=$data['doc_master'][0]->p_fname; + } + + $item_id=$this->input->post('itype_name_id'); + + $data['insert_invoice_item'] = array( + 'ipd_id' => $ipd_id, + 'item_type' => $this->input->post('itype_idv'), + 'item_id' => $this->input->post('itype_name_id'), + 'item_name' => $item_name, + 'item_rate' => $item_rate, + 'item_added_date' => date('Y-m-d h:i:s'), + 'item_qty' => $this->input->post('input_qty'), + 'item_amount' => $amount_value, + 'doc_id' => $this->input->post('doc_id'), + 'doc_name' => $refername, + 'date_item' => $date_item, + 'comment' => $this->input->post('comment'), + 'ins_id' => $ins_id, + 'org_code' => $org_code, + ); + + $sql="Select * from ipd_invoice_item + where ipd_id=$ipd_id and item_id=$item_id and item_rate=$item_rate and doc_id=$doc_id" ; + $query = $this->db->query($sql); + $rec_exist= $query->result(); + + if(count($rec_exist)>0) + { + $inser_id=0; + }else{ + $inser_id=$this->Ipd_M->insert_ipd_item( $data['insert_invoice_item']); + } + + + }elseif($type==2) + { + $amount_value=$this->input->post('update_qty') * $this->input->post('item_rate'); + + $data['update_invoice_item'] = array( + 'item_qty' => $this->input->post('update_qty'), + 'item_amount' => $amount_value + ); + + $inser_id=$this->Ipd_M->update_ipd_item( $data['update_invoice_item'],$this->input->post('itemid')); + + }else{ + + $inser_id= $this->Ipd_M->deleteIpdinvoiceitem($this->input->post('itemid')); + //$this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + echo $inser_id; + + } + + public function show_ipd_items($ipd_id) + { + $sql="select * from v_ipd_list where id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from ipd_package where ipd_id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_package']= $query->result(); + + //package_select + $select_package_content=""; + + $ins_comp_id=$data['ipd_master'][0]->insurance_id; + + $sql="select t.group_desc,i.*,sum(i.item_amount) as xAmount + from ipd_invoice_item i join ipd_item_type t on i.item_type=t.itype_id + where i.ipd_id=".$ipd_id." + group by i.item_type,i.id with rollup"; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from ipd_invoice_item where ipd_id=".$ipd_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + echo ' + + + + + + + + '; + $srno=0; + $head=1; + foreach($data['invoiceDetails'] as $row) + { + if($head==1 && $row->item_type<>null) + { + echo ''; + echo ''; + echo ''; + echo ''; + $head=0; + } + + if($row->item_type==null || $row->item_type=='') + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + }elseif($row->id==null || $row->id==''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $head=1; + }else{ + $srno=$srno+1; + + $doc_name_desc=""; + if($row->doc_id>0) + { + $doc_name_desc='
Dr.'.$row->doc_name.' '.$row->doc_spec; + } + + $check=''; + if ($row->package_id>0) + { + $check='Checked'; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + $check_box=''; + if(count($data['ipd_package'])) + { + $check_box=' Inc. In Pkg.'; + } + + echo ''; + echo ''; + echo ''; + echo ''; + + } + } + echo '
#Charge NameRateQtyAmount
#'.$row->group_desc.'
#Total Amount'.$row->xAmount.'
#Sub Total'.$row->xAmount.'
'.$srno.''.$row->item_name.''.$row->item_rate.''.$row->item_amount.'
#'.$doc_name_desc.'
'.$row->comment.'
'.$check_box; + echo '
+ + + +
'; + echo '
'; + echo ''; + + } + + + public function remove_refer($r_id) + { + if ($this->ion_auth->in_group('IPDReferUpdate')) { + $this->Ipd_M->remove_refer_ipd($r_id); + } + } + + public function add_refer($ipd_id,$refer_by) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $Update_user = $user->first_name.' '. $user->last_name.' ['.$user_id.'] '.date('Y-m-d H:i:s'); + + if ($this->ion_auth->in_group('IPDAdmit')) { + + $sql="select * + from refer_master + where id=$refer_by"; + $query = $this->db->query($sql); + $refer_master= $query->result(); + + if(count($refer_master)>0){ + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $data = array( + 'ipd_id' => $ipd_id, + 'refer_by' => $refer_by, + 'refer_type' => $refer_master[0]->refer_type, + 'refer_name' => $refer_master[0]->f_name, + 'update_by' => $Update_user, + ); + $inser_id=$this->Ipd_M->insert_refer_ipd($data); + } + + + } + } + + public function Update_Refer($ipd_id,$refer_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $update_refer=array( + 'refer_by'=>$refer_id + ); + + $this->Ipd_M->update($update_refer,$ipd_id); + + } + + public function update_org_doc() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $org_id=$this->input->post('org_id'); + $feild=$this->input->post('feild'); + $fvalue=$this->input->post('fvalue'); + + $this->load->model('Ocasemaster_M'); + + $update_ipd=array( + $feild=>$fvalue + ); + + $this->Ocasemaster_M->update($update_ipd,$org_id); + + } + + } \ No newline at end of file diff --git a/old_code_ci3/controllers/Ipd_Report.php b/old_code_ci3/controllers/Ipd_Report.php new file mode 100644 index 0000000..508c07b --- /dev/null +++ b/old_code_ci3/controllers/Ipd_Report.php @@ -0,0 +1,116 @@ +load->view('IPD_Report/ipd_balance_report'); + } + + public function Ipd_bal_panel_report($daterange,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" p.balance_amount>0 " ; + + $where.=" and Direct_Cust=1 and p.ipd_status=1 and p.register_date between '".$minRange."' and '".$maxRange."' " ; + + if(isset($doc_name)) + { + if($doc_name_id>0) + { + $where.=" and FIND_IN_SET('".$doc_name_id."',doc_list) "; + } + } + + $sql="select p.ipd_code,p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date,p_code,p.Contact_info, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.Bed_Desc,p.Direct_Cust, + p.net_amount,p.balance_amount,(p.org_amount_recived+p.total_paid_amount) as sum_of_paid + from v_ipd_list p where ".$where." group by p.p_id,p.doc_list order by id"; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $total_Payment=0.00; + $total_balance=0.00; + + $content=''; + + $content.=' + + + + + + + + + + + + + '; + + $sr_no=0; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + + + + '; + $total_Payment+= $row->sum_of_paid; + $total_balance+= $row->balance_amount; + } + + $content.=' + + + + + + + + + + + + + '; + $content.="
#IPD CodeP CodePerson NamePhone No.Admit DateDischarge DateDoc. NameNet AmountPaid Amt.Balance Amt.TYPE
'.$sr_no.''.$row->ipd_code.''.$row->p_code.''.$row->p_fname.''.$row->Contact_info.''.$row->str_register_date.''.$row->str_discharge_date.''.$row->doc_name.''.$row->net_amount.''.$row->sum_of_paid.''.$row->balance_amount.''.$row->admit_type.'
#Total'.$total_Payment.''.$total_balance.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="IPD_Balance_List-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_Balance_List_'.date('dmYHis')); + } + + + + } + + } \ No newline at end of file diff --git a/old_code_ci3/controllers/Ipd_discharge.php b/old_code_ci3/controllers/Ipd_discharge.php new file mode 100644 index 0000000..2c3d936 --- /dev/null +++ b/old_code_ci3/controllers/Ipd_discharge.php @@ -0,0 +1,3564 @@ +load->model('ipdDischarge_M'); + $this->load->model('Ipd_M'); + $this->load->model('Patient_M'); + } + + public function search_ipd() + { + $this->load->view('IPD_Discharge/main'); + } + + public function search_ipd_result() + { + $sdata = $this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + $sql_where = ""; + + if (trim($sdata) == '') { + $sql = "select * from v_ipd_list order by id desc limit 200"; + } else { + if (!$this->ion_auth->in_group('IPDOLD')) { + $sql_where = " and Date(register_date) > '2019-03-31'"; + } + + $sql = "select * from v_ipd_list + where ipd_code like '%" . $sdata . "' or p_code LIKE '%" . $sdata . "' + OR p_fname LIKE '%" . $sdata . "%' + OR doc_name LIKE '%" . $sdata . "%' + " . $sql_where . " + group by id order by id desc limit 100"; + } + + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $this->load->view('IPD_Discharge/search_ipd_result', $data); + } + + public function ipd_select($ipdno, $re_create = 0) + { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $sql = "select * from hc_department order by vName "; + $query = $this->db->query($sql); + $data['hc_department'] = $query->result(); + + $sql = "select * from ipd_discharg_status "; + $query = $this->db->query($sql); + $data['ipd_discharge_status'] = $query->result(); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $ipd_create = $data['ipd_master'][0]->ipd_create; + + if ($ipd_create == 1 && $re_create == 0) { + redirect('Ipd_discharge/preview_discharge_report/' . $ipdno); + return true; + } + + + /*$dataupdate = array( + 'discharge_time'=>date('H:i'), + ); + + $this->Ipd_M->update($dataupdate,$ipdno); + */ + + + $p_id = $data['ipd_master'][0]->p_id; + $ipd_admit_date = $data['ipd_master'][0]->register_date; + + $sql = "select * from patient_master where id=$p_id "; + $query = $this->db->query($sql); + $data['Pdata'] = $query->result(); + + if ($data['ipd_master'][0]->discharge_date == null || $data['ipd_master'][0]->discharge_date == '0000-00-00' || $data['ipd_master'][0]->discharge_date == '1901-01-01') { + $ipd_discharge_date = date('Y-m-d'); + } else { + $ipd_discharge_date = $data['ipd_master'][0]->discharge_date; + } + + $sql = "select * from ipd_discharge + where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge'] = $query->result(); + + //Surgery + $sql = "select * from ipd_discharge_surgery where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_surgery'] = $query->result(); + + //Procedure + $sql = "select * from ipd_discharge_procedure where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_procedure'] = $query->result(); + + if (count($data['ipd_discharge']) == 0) { + $datainsert = array( + 'ipd_id' => $ipdno, + 'created_datetime' => $user_name . '[' . $user_id . ']', + ); + $this->ipdDischarge_M->insert_ipdDischarge($datainsert); + } + + //General examination + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head, + if(d.rdata is null,col_pre_value,d.rdata) as rdata_text,g.col_type,col_pre_value,d.rdata + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' where cat_group=1"; + $query = $this->db->query($sql); + $data['ipd_discharge_general_exam_col_1'] = $query->result(); + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_type,col_pre_value, + if(d.rdata is null,col_pre_value,d.rdata) as rdata_text,g.col_type,col_pre_value,d.rdata + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' where cat_group=2"; + $query = $this->db->query($sql); + $data['ipd_discharge_general_exam_col_2'] = $query->result(); + + $sql = "select g.id,g.sys_exam_name,g.sys_format,d.rdata + from ipd_discharge_sys_exam g left join ipd_discharge_1_a d on g.id=d.head_id and d.ipd_d_id='" . $ipdno . "' where g.id=9 "; + $query = $this->db->query($sql); + $data['ipd_discharge_sys_exam'] = $query->result(); + + //ipd_discharge_1_d + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_type,col_pre_value, + if(d.rdata is null,col_pre_value,d.rdata) as rdata_text,g.col_type,col_pre_value,d.rdata + from ipd_discharge_investigation_during_admit g left join ipd_discharge_1_d d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' where cat_group=1"; + $query = $this->db->query($sql); + $data['ipd_discharge_investigation_during_admit'] = $query->result(); + + //ipd_discharge_1_e + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_type,col_pre_value, + if(d.rdata is null,col_pre_value,d.rdata) as rdata_text,g.col_type,col_pre_value,d.rdata + from ipd_discharge_special_investigation g left join ipd_discharge_1_e d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' where cat_group=1"; + $query = $this->db->query($sql); + $data['ipd_discharge_special_investigation'] = $query->result(); + + //Examination at the time of Discharge + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata, + if(d.rdata is null,col_pre_value,d.rdata) as rdata_text + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b_final d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_exam_on_discharge_col'] = $query->result(); + + //CLINICAL INVESTIGATION REPORTS + + $sql = "select * from ipd_discharge_2 where ipd_d_id='" . $ipdno . "' and CHAR_LENGTH(lab_investigation_list)>0 "; + $query = $this->db->query($sql); + $data['ipd_discharge_2'] = $query->result(); + + $lab_list = "0"; + if (count($data['ipd_discharge_2']) > 0) { + $lab_list = $data['ipd_discharge_2'][0]->lab_investigation_list; + } + + $sql = "select *,if(id in (" . $lab_list . "),'checked','') as chked from lab_request where patient_id=" . $p_id . " + and (ipd_id=" . $ipdno . " or (Request_Date between '" . $ipd_admit_date . "' and '" . $ipd_discharge_date . "' ))"; + + $sql = " SELECT QUOTE(m.inv_date) AS sDate, date_format(m.inv_date,'%d-%m-%Y') AS sInd_Date, + group_CONCAT(t.Test ORDER BY t.Test) AS test_list,if(m.inv_date in (" . $lab_list . "),'checked','') as chked + FROM (((invoice_master m JOIN lab_request l ON m.id=l.charge_id) + JOIN lab_request_item i ON l.id=i.lab_request_id) + JOIN lab_tests t ON i.lab_test_id=t.mstTestKey) + JOIN ipd_discharge_investigation_template d ON t.TestID=d.test_code + WHERE m.attach_id=" . $p_id . " and m.inv_date between '" . $ipd_admit_date . "' and '" . $ipd_discharge_date . "' + GROUP BY m.inv_date"; + + echo $sql; + + $query = $this->db->query($sql); + $data['lab_request'] = $query->result(); + + $sql = "select * from ipd_discharge_2 where ipd_d_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_2'] = $query->result(); + + + //Presenting Complaints with Duration and Reason for Admission + + $sql = "select * from ipd_discharge_complaint where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_complaint'] = $query->result(); + + $sql = "select * from ipd_discharge_complaint_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_complaint_remark'] = $query->result(); + + //Final Diagnosis at the time of Discharge + + $sql = "select * from ipd_discharge_diagnosis where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_diagnosis'] = $query->result(); + + $sql = "select * from ipd_discharge_diagnosis_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_diagnosis_remark'] = $query->result(); + + //Summary of key investigtions during Hospitalization + + $sql = "select * from ipd_discharge_investigtions_inhos where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_investigtions_inhos'] = $query->result(); + + + //Course in the hospital + + $sql = "select * from ipd_discharge_course where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_course'] = $query->result(); + + $sql = "select * from ipd_discharge_course_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_course_remark'] = $query->result(); + + //Discharge Medications + + $sql = "select * from ipd_discharge_drug where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_drug'] = $query->result(); + + //Discharge Medications New Method + $sql = "SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((ipd_discharge_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.ipd_id='" . $ipdno . "' order by pt.id"; + $query = $this->db->query($sql); + $data['ipd_discharge_prescrption_prescribed'] = $query->result(); + $data1['ipd_discharge_prescrption_prescribed'] = $data['ipd_discharge_prescrption_prescribed']; + + $data['ipd_discharge_prescrption_prescribed_content'] = $this->load->view('IPD_Discharge/ipd_prescription', $data1, true); + + //Discharge Instructions + + $sql = "select * from ipd_discharge_instructions where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_instructions'] = $query->result(); + + //Discharge FOOD DRUG INTERACTION + $sql = "select * from ipd_discharge_drug_food_interaction where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge_drug_food_interaction'] = $query->result(); + + $food_list = "0"; + if (count($data['ipd_discharge_drug_food_interaction']) > 0) { + if (strlen($data['ipd_discharge_drug_food_interaction'][0]->food_id_list) > 0) { + $food_list = $data['ipd_discharge_drug_food_interaction'][0]->food_id_list; + } + } + + $sql = "SELECT m.id,m.food_short,if(m.id IN (" . $food_list . "),'Checked','') AS food_exist,food_desc + FROM ipd_discharge_master_food m "; + $query = $this->db->query($sql); + $data['dis_food_interaction'] = $query->result(); + + $foot_banner_list = "0"; + if (count($data['ipd_discharge_instructions']) > 0) { + if (strlen($data['ipd_discharge_instructions'][0]->footer_banner) > 0) { + $foot_banner_list = $data['ipd_discharge_instructions'][0]->footer_banner; + } + } + + $sql = "SELECT m.id,m.banner_name,if(m.id IN (" . $foot_banner_list . "),'Checked','') AS banner_exist + FROM ipd_discharge_banner m "; + $query = $this->db->query($sql); + $data['dis_banner_list'] = $query->result(); + + //IPD discharge Medicince prescribed + $sql = "select * from opd_dose_shed "; + $query = $this->db->query($sql); + $data['opd_dose_shed'] = $query->result(); + + $sql = "select * from opd_dose_when"; + $query = $this->db->query($sql); + $data['opd_dose_when'] = $query->result(); + + $sql = "select * from opd_dose_frequency"; + $query = $this->db->query($sql); + $data['opd_dose_frequency'] = $query->result(); + + $sql = "select * from opd_dose_where"; + $query = $this->db->query($sql); + $data['opd_dose_where'] = $query->result(); + + $sql = "select * from opd_dose_duration"; + $query = $this->db->query($sql); + $data['opd_dose_duration'] = $query->result(); + + $sql = "select * from med_formulation"; + $query = $this->db->query($sql); + $data['med_formulation'] = $query->result(); + + $sql = "SELECT o.id,o.next_visit_desc,DATE_ADD(CURDATE(),INTERVAL o.no_of_days DAY) AS next_date, + Concat(next_visit_desc,' (', Date_Format(DATE_ADD(CURDATE(),INTERVAL o.no_of_days DAY),'%d-%m-%Y') ,')') as next_visit_day + FROM opd_nextvisit o order by no_of_days"; + $query = $this->db->query($sql); + $data['opd_nextvisit'] = $query->result(); + + //IPD discharge Medicince prescribed End + + + $this->load->view('IPD_Discharge/ipd_discharge_edit', $data); + } + + + // Get Combo Value + + public function get_complaints() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from complaints_master where Name like '%" . $q . "%' "; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['Name'])); + $new_row['value'] = htmlentities(stripslashes($row['Name'])); + + $new_row['complaints_no'] = htmlentities(stripslashes($row['Code'])); + + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + // Get Combo Value + + public function get_hospital_course_master() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from hospital_course_master where Name like '%" . $q . "%' "; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['Name'])); + $new_row['value'] = htmlentities(stripslashes($row['Name'])); + + $new_row['complaints_no'] = htmlentities(stripslashes($row['Code'])); + + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + + public function get_surgery() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from surgery where Name like '%" . $q . "%' "; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['Name'])); + $new_row['value'] = htmlentities(stripslashes($row['Name'])); + + $new_row['surgery_no'] = htmlentities(stripslashes($row['Code'])); + + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_drug_timing() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from drug_timing where dosage_desc like '%" . $q . "%' or dosage_code like '" . $q . "%' "; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['dosage_desc'])); + $new_row['value'] = htmlentities(stripslashes($row['dosage_desc'])); + + $new_row['surgery_no'] = htmlentities(stripslashes($row['id'])); + + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_disease() + { + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from disease_master where Name like '%" . $q . "%' order by Name"; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['Name'])); + $new_row['value'] = htmlentities(stripslashes($row['Name'])); + + $new_row['complaints_no'] = htmlentities(stripslashes($row['Code'])); + + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_medical() + { + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from local_medical where med_name like '%" . $q . "%' order by med_name"; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['med_name'])); + $new_row['value'] = htmlentities(stripslashes($row['med_name'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + // Data Saving + + public function update_Sys_Exam() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $IPD_id = $this->input->post('IPD_id'); + $sys_exam_id = $this->input->post('sys_exam_id'); + + $sql = "select * from ipd_discharge_sys_exam where id=" . $sys_exam_id; + $query = $this->db->query($sql); + $short_head_sys_exam = $query->result(); + + $short_head = ""; + if (count($short_head_sys_exam) > 0) { + $short_head = $short_head_sys_exam[0]->sys_exam_name; + } + + $datainsert = array( + 'ipd_d_id' => $IPD_id, + 'head_id' => $sys_exam_id, + 'short_head' => $short_head, + 'rdata' => $editor_Sys_Exam, + ); + + $sql = "select * from ipd_discharge_1_a where ipd_d_id=" . $IPD_id . " and head_id=" . $sys_exam_id; + $query = $this->db->query($sql); + $chk_exist = $query->result(); + + if (count($chk_exist) > 0) { + $this->ipdDischarge_M->update_ipd_discharge_1_a($datainsert, $chk_exist[0]->id); + } else { + $this->ipdDischarge_M->insert_ipd_discharge_1_a($datainsert); + } + + echo 'Saved'; + } + + public function update_investigation_m_Exam() + { + + $IPD_id = $this->input->post('gen_exam_ipd_id'); + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata, + if(d.id is null,1,0) as insert_data + from ipd_discharge_investigation_during_admit g + left join ipd_discharge_1_d d on g.id=d.col_id and d.ipd_d_id=" . $IPD_id; + $query = $this->db->query($sql); + $discharge_general_exam = $query->result(); + + foreach ($discharge_general_exam as $row) { + $rdata = $this->input->post('input_m_exam_' . $row->id); + + $datainsert = array( + 'ipd_d_id' => $IPD_id, + 'col_id' => $row->id, + 'short_head' => $row->col_name, + 'rdata' => $rdata, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_1_d($datainsert, $IPD_id, $row->id); + } + + echo 'Saved'; + } + + public function update_investigation_s_Exam() + { + + $IPD_id = $this->input->post('gen_exam_ipd_id'); + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata, + if(d.id is null,1,0) as insert_data + from ipd_discharge_special_investigation g + left join ipd_discharge_1_e d on g.id=d.col_id and d.ipd_d_id=" . $IPD_id; + $query = $this->db->query($sql); + $discharge_general_exam = $query->result(); + + foreach ($discharge_general_exam as $row) { + $rdata = $this->input->post('input_s_exam_' . $row->id); + + $datainsert = array( + 'ipd_d_id' => $IPD_id, + 'col_id' => $row->id, + 'short_head' => $row->col_name, + 'rdata' => $rdata, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_1_e($datainsert, $IPD_id, $row->id); + } + + echo 'Saved'; + } + + public function update_gen_Exam() + { + + $IPD_id = $this->input->post('gen_exam_ipd_id'); + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata, + if(d.id is null,1,0) as insert_data + from ipd_discharge_general_exam_col g + left join ipd_discharge_1_b d on g.id=d.col_id and d.ipd_d_id=" . $IPD_id; + $query = $this->db->query($sql); + $discharge_general_exam = $query->result(); + + foreach ($discharge_general_exam as $row) { + $rdata = $this->input->post('input_g_exam_' . $row->id); + + $datainsert = array( + 'ipd_d_id' => $IPD_id, + 'col_id' => $row->id, + 'short_head' => $row->col_name, + 'rdata' => $rdata, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_1_b($datainsert, $IPD_id, $row->id); + } + + echo 'Saved'; + } + + + public function update_dis_Exam() + { + + $IPD_id = $this->input->post('dis_exam_ipd_id'); + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata, + if(d.id is null,1,0) as insert_data + from ipd_discharge_general_exam_col g + left join ipd_discharge_1_b_final d on g.id=d.col_id and d.ipd_d_id=" . $IPD_id; + $query = $this->db->query($sql); + $discharge_general_exam = $query->result(); + + foreach ($discharge_general_exam as $row) { + $rdata = $this->input->post('input_d_exam_' . $row->id); + + $datainsert = array( + 'ipd_d_id' => $IPD_id, + 'col_id' => $row->id, + 'short_head' => $row->col_name, + 'rdata' => $rdata, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_1_b_final($datainsert, $IPD_id, $row->id); + } + + echo 'Saved'; + } + + public function update_Provisional_Exam() + { + $editor_data = $this->input->post('editor_data'); + $ipd_id = $this->input->post('ipd_id'); + $lab_investigation_list = $this->input->post('lab_investigation_list'); + + $lab_investigation_list = str_replace(":", ",", $lab_investigation_list); + + $short_head = "Other Examinations or Provisional Diagnosis"; + + $datainsert = array( + 'ipd_d_id' => $ipd_id, + 'lab_investigation_list' => $lab_investigation_list, + 'short_head' => $short_head, + 'rdata' => $editor_data, + ); + + $return_id = $this->ipdDischarge_M->update_insert_ipd_discharge_2($datainsert, $ipd_id); + + echo 'Saved : With Return Code ->' . $return_id; + } + + //Save Personal History + + public function update_personal_history() + { + $p_id = $this->input->post('p_id'); + + $opd_prescription_smoking_chk = $this->input->post('opd_prescription_smoking_chk'); + $opd_prescription_alcohol_chk = $this->input->post('opd_prescription_alcohol_chk'); + $opd_prescription_tobacoo_chk = $this->input->post('opd_prescription_tobacoo_chk'); + $opd_prescription_drug_chk = $this->input->post('opd_prescription_drug_chk'); + $opd_prescription_hypertesion_chk = $this->input->post('opd_prescription_hypertesion_chk'); + $opd_prescription_niddm_chk = $this->input->post('opd_prescription_niddm_chk'); + $opd_prescription_hbsag_chk = $this->input->post('opd_prescription_hbsag_chk'); + $opd_prescription_hcv_chk = $this->input->post('opd_prescription_hcv_chk'); + $opd_prescription_hiv_I_II_chk = $this->input->post('opd_prescription_hiv_I_II_chk'); + + $dataPatientMaster = array( + 'is_smoking' => $opd_prescription_smoking_chk, + 'is_alcohol' => $opd_prescription_alcohol_chk, + 'is_drug_abuse' => $opd_prescription_drug_chk, + 'is_tobacoo' => $opd_prescription_tobacoo_chk, + 'is_hypertesion' => $opd_prescription_hypertesion_chk, + 'is_niddm' => $opd_prescription_niddm_chk, + 'is_hbsag' => $opd_prescription_hbsag_chk, + 'is_hcv' => $opd_prescription_hcv_chk, + 'is_hiv_I_II' => $opd_prescription_hiv_I_II_chk, + ); + + $this->Patient_M->update($dataPatientMaster, $p_id); + + echo 'Saved '; + } + + + //FOOD_DRUG_INTERACTION + + public function update_food_interaction() + { + $editor_data = $this->input->post('editor_data'); + + $ipd_id = $this->input->post('ipd_id'); + $food_interaction_list = $this->input->post('food_interaction_list'); + + $food_interaction_list = str_replace(":", ",", $food_interaction_list); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'food_id_list' => $food_interaction_list, + 'food_text' => $editor_data, + ); + + $return_id = $this->ipdDischarge_M->update_insert_ipd_discharge_drug_food_interaction($datainsert, $ipd_id); + + echo 'Saved : With Return Code ->' . $return_id; + } + + //Footer Banner + + public function update_footer_banner() + { + $editor_data = $this->input->post('editor_data'); + + $ipd_id = $this->input->post('ipd_id'); + $footer_banner_list = $this->input->post('footer_banner_list'); + + $footer_banner_list = str_replace(":", ",", $footer_banner_list); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'footer_banner' => $footer_banner_list, + ); + + $return_id = $this->ipdDischarge_M->update_insert_ipd_discharge_instructions($datainsert, $ipd_id); + + echo 'Saved : With Return Code ->' . $return_id; + } + + + + //Compalint Part Add Update Renove + + public function add_complaints() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $complaint = $this->input->post('input_complaints'); + $complaint_value = $this->input->post('input_complaints_value'); + $complaint_remarks = $this->input->post('input_complaints_remarks'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_code' => $complaint_value, + 'comp_report' => $complaint, + 'comp_remark' => $complaint_remarks, + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->insert_p_complaint($datainsert); + + $content = ""; + + $sql = "select * from ipd_discharge_complaint where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "
"; + + if (count($dataRec) > 0) { + $content .= ""; + } + + foreach ($dataRec as $row) { + $content .= ' + + + + + '; + } + + $content .= '
Complaint NameRemarks
+ + + + Update + Remove +
'; + + echo $content; + } + + + public function update_complaint() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $complaint_remarks = $this->input->post('complaint_remarks'); + $complaint = $this->input->post('complaint'); + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('invACode'); + + $sql = "select * from ipd_discharge_complaint where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "Nothing Done"; + + if (count($dataRec) > 0) { + $dataupdate = array( + 'comp_remark' => $complaint_remarks, + 'comp_report' => $complaint, + 'update_by' => $user_name + ); + + + $this->ipdDischarge_M->update_p_complaint($dataupdate, $rec_id); + + $content = "Update Done"; + } + + echo $content; + } + + + public function remove_complaint($invRecID, $ipd_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_discharge_complaint where ipd_id=" . $ipd_id . " and id=" . $invRecID; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + if (count($dataRec) > 0) { + $this->ipdDischarge_M->remove_p_complaint($invRecID); + } + + $content = "
"; + + if (count($dataRec) > 0) { + $content .= ""; + } + + foreach ($dataRec as $row) { + $content .= ' + + + + + '; + } + + $content .= '
Complaint NameRemarks
+ + + + Update + Remove +
'; + + echo $content; + } + + public function update_complaint_edit() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_remark' => $editor_Sys_Exam, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_complaint_remark($datainsert, $ipd_id); + + echo 'Saved'; + } + + //procedure Update and Add + public function add_procedure() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $input_procedure_name = $this->input->post('input_procedure_name'); + $input_procedure_id = $this->input->post('input_procedure_id'); + $input_procedure_remark = $this->input->post('input_procedure_remark'); + $procedure_date = $this->input->post('procedure_date'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'procedure_id' => $input_procedure_id, + 'procedure_name' => $input_procedure_name, + 'procedure_remark' => $input_procedure_remark, + 'procedure_date' => str_to_MysqlDate($procedure_date), + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->insert_p_procedure($datainsert); + + $content = ""; + + $sql = "select * from ipd_discharge_procedure where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_discharge_procedure'] = $query->result(); + + $content = $this->load->view('IPD_Discharge/ipd_procedure', $data, true); + + echo $content; + } + + + public function update_procedure() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $procedure_name = $this->input->post('procedure_name'); + $procedure_remark = $this->input->post('procedure_remark'); + $procedure_date = $this->input->post('procedure_date'); + + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('invACode'); + + $sql = "select * from ipd_discharge_procedure where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "Nothing Done"; + + if (count($dataRec) > 0) { + $dataupdate = array( + 'procedure_name' => $procedure_name, + 'procedure_remark' => $procedure_remark, + 'procedure_date' => str_to_MysqlDate($procedure_date), + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->update_p_procedure($dataupdate, $rec_id); + + $content = "Update Done"; + } + + echo $content; + } + + public function remove_procedure($invRecID, $ipd_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_discharge_procedure where ipd_id=" . $ipd_id . " and id=" . $invRecID; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + if (count($dataRec) > 0) { + $this->ipdDischarge_M->remove_p_procedure($invRecID); + } + + $content = ""; + + $sql = "select * from ipd_discharge_procedure where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_discharge_procedure'] = $query->result(); + + $content = $this->load->view('IPD_Discharge/ipd_procedure', $data, true); + + echo $content; + } + + //surgery Update and Add + public function add_surgery() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $input_surgery_name = $this->input->post('input_surgery_name'); + $input_surgery_id = $this->input->post('input_surgery_id'); + $input_surgery_remark = $this->input->post('input_surgery_remark'); + $surgery_date = $this->input->post('surgery_date'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'surgery_id' => $input_surgery_id, + 'surgery_name' => $input_surgery_name, + 'surgery_remark' => $input_surgery_remark, + 'surgery_date' => str_to_MysqlDate($surgery_date), + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->insert_p_surgery($datainsert); + + $content = ""; + + $sql = "select * from ipd_discharge_surgery where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_discharge_surgery'] = $query->result(); + + $content = $this->load->view('IPD_Discharge/ipd_surgery', $data, true); + + echo $content; + } + + + public function update_surgery() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $surgery_name = $this->input->post('surgery_name'); + $surgery_remark = $this->input->post('surgery_remark'); + $surgery_date = $this->input->post('surgery_date'); + + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('invACode'); + + $sql = "select * from ipd_discharge_surgery where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "Nothing Done"; + + if (count($dataRec) > 0) { + $dataupdate = array( + 'surgery_name' => $surgery_name, + 'surgery_remark' => $surgery_remark, + 'surgery_date' => str_to_MysqlDate($surgery_date), + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->update_p_surgery($dataupdate, $rec_id); + + $content = "Update Done"; + } + + echo $content; + } + + public function remove_surgery($invRecID, $ipd_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_discharge_surgery where ipd_id=" . $ipd_id . " and id=" . $invRecID; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + if (count($dataRec) > 0) { + $this->ipdDischarge_M->remove_p_surgery($invRecID); + } + + $content = ""; + + $sql = "select * from ipd_discharge_surgery where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_discharge_surgery'] = $query->result(); + + $content = $this->load->view('IPD_Discharge/ipd_surgery', $data, true); + + echo $content; + } + + //Delivery Update + public function update_delivery() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Ipd_M'); + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $ipd_id = $this->input->post('ipd_id'); + $isdelivery = $this->input->post('isdelivery'); + $delivery_date = $this->input->post('delivery_date'); + $delivery_time = $this->input->post('delivery_time'); + $delivery_sex_of_baby = $this->input->post('delivery_sex_of_baby'); + $delivery_sex_of_baby2 = $this->input->post('delivery_sex_of_baby2'); + $delivery_sex_of_baby3 = $this->input->post('delivery_sex_of_baby3'); + + + $dataupdate = array( + 'isdelivery' => $isdelivery, + 'delivery_time' => $delivery_time, + 'delivery_date' => str_to_MysqlDate($delivery_date), + 'delivery_sex_of_baby' => $delivery_sex_of_baby, + 'delivery_sex_of_baby2' => $delivery_sex_of_baby2, + 'delivery_sex_of_baby3' => $delivery_sex_of_baby3 + ); + + $this->Ipd_M->update($dataupdate, $ipd_id); + $content = "Update Done"; + + echo $content; + } + + + + + + //Delivery End + + + + + //diagnosis Part Add Update Renove + + public function add_diagnosis() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $diagnosis = $this->input->post('input_diagnosis'); + $diagnosis_value = $this->input->post('input_diagnosis_value'); + $diagnosis_remarks = $this->input->post('input_diagnosis_remarks'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_code' => $diagnosis_value, + 'comp_report' => $diagnosis, + 'comp_remark' => $diagnosis_remarks, + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->insert_p_diagnosis($datainsert); + + $content = ""; + + $sql = "select * from ipd_discharge_diagnosis where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "
"; + + if (count($dataRec) > 0) { + $content .= ''; + } + + foreach ($dataRec as $row) { + $content .= ' + + + + + '; + } + + $content .= '
Diagnosis Remarks
+ + + + UpdateRemove
'; + + echo $content; + } + + + public function update_diagnosis() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $diagnosis_remarks = $this->input->post('diagnosis_remarks'); + $diagnosis = $this->input->post('diagnosis'); + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('invACode'); + + $sql = "select * from ipd_discharge_diagnosis where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "Nothing Done"; + + if (count($dataRec) > 0) { + $dataupdate = array( + 'comp_remark' => $diagnosis_remarks, + 'comp_report' => $diagnosis, + 'update_by' => $user_name + ); + + + $this->ipdDischarge_M->update_p_diagnosis($dataupdate, $rec_id); + + $content = "Update Done"; + } + + echo $content; + } + + + public function remove_diagnosis($invRecID, $ipd_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_discharge_diagnosis where ipd_id=" . $ipd_id . " and id=" . $invRecID; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + if (count($dataRec) > 0) { + + $this->ipdDischarge_M->remove_p_diagnosis($invRecID); + } + + $content = ""; + + $sql = "select * from ipd_discharge_diagnosis where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "
"; + if (count($dataRec) > 0) { + $content .= ''; + } + + foreach ($dataRec as $row) { + $content .= ' + + + + + '; + } + + $content .= '
Diagnosis Remarks
+ + + + UpdateRemove
'; + + echo $content; + } + + public function update_diagnosis_edit() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_remark' => $editor_Sys_Exam, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_diagnosis_remark($datainsert, $ipd_id); + + echo 'Saved'; + } + + //Summary of Key investigtion during Hospitalization + public function update_investigtions_inhos() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_remark' => $editor_Sys_Exam, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_investigtions_inhos($datainsert, $ipd_id); + + echo 'Saved'; + } + + //Course in the Hospitalization + + + public function add_course() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $diagnosis = $this->input->post('input_course'); + $diagnosis_value = $this->input->post('input_course_value'); + $diagnosis_remarks = $this->input->post('input_course_remarks'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_code' => $diagnosis_value, + 'comp_report' => $diagnosis, + 'comp_remark' => $diagnosis_remarks, + 'update_by' => $user_name + ); + + $this->ipdDischarge_M->insert_p_course($datainsert); + + $content = ""; + + $sql = "select * from ipd_discharge_course where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "
"; + + if (count($dataRec) > 0) { + $content .= ''; + } + + foreach ($dataRec as $row) { + $content .= ' + + + + + '; + } + + $content .= '
Course Remarks
+ + + + UpdateRemove
'; + + echo $content; + } + + + public function update_course() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $diagnosis_remarks = $this->input->post('course_remarks'); + $comp_report = $this->input->post('course'); + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('invACode'); + + $sql = "select * from ipd_discharge_course where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "Nothing Done"; + + if (count($dataRec) > 0) { + $dataupdate = array( + 'comp_remark' => $diagnosis_remarks, + 'comp_report' => $comp_report, + 'update_by' => $user_name + ); + + + $this->ipdDischarge_M->update_p_course($dataupdate, $rec_id); + + $content = "Update Done"; + } + + echo $content; + } + + + public function remove_course($invRecID, $ipd_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_discharge_course where ipd_id=" . $ipd_id . " and id=" . $invRecID; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + if (count($dataRec) > 0) { + + $this->ipdDischarge_M->remove_p_course($invRecID); + } + + $content = ""; + + $sql = "select * from ipd_discharge_course where ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "
"; + + if (count($dataRec) > 0) { + $content .= ''; + } + + foreach ($dataRec as $row) { + $content .= ' + + + + + '; + } + + $content .= '
Course Remarks
+ + + + UpdateRemove
'; + + echo $content; + } + + public function update_course_remark() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_remark' => $editor_Sys_Exam, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_course_remark($datainsert, $ipd_id); + + echo 'Saved'; + } + + + //Discharge Instructions + public function save_Instructions() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $review_after = $this->input->post('input_next_visit'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'comp_remark' => $editor_Sys_Exam, + 'review_after' => $review_after, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_instructions($datainsert, $ipd_id); + + echo 'Saved'; + } + + + + public function save_Footer() + { + $editor_Sys_Exam = $this->input->post('editor_Sys_Exam'); + $ipd_id = $this->input->post('ipd_id'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'footer_text' => $editor_Sys_Exam, + ); + + $this->ipdDischarge_M->update_insert_ipd_discharge_instructions($datainsert, $ipd_id); + + echo 'Saved'; + } + + //Drugs + + public function add_drug() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $input_med_name = strtoupper($this->input->post('input_med_name')); + $input_med_type = $this->input->post('input_med_type'); + $input_dosage = $this->input->post('input_dosage'); + $input_dosage_when = $this->input->post('input_dosage_when'); + $input_dosage_freq = $this->input->post('input_dosage_freq'); + $input_dose_where = $this->input->post('input_dose_where'); + $input_no_of_days = $this->input->post('input_no_of_days'); + $input_qty = $this->input->post('input_qty'); + $input_remark = strtoupper($this->input->post('input_remark')); + $hid_med_id = $this->input->post('hid_med_id'); + $ipd_id = $this->input->post('ipd_id'); + $hid_ipd_med_item_id = $this->input->post('hid_ipd_med_item_id'); + $input_med_salt = $this->input->post('input_med_salt'); + + $datainsert = array( + 'ipd_id' => $ipd_id, + 'med_id' => $hid_med_id, + 'med_name' => $input_med_name, + 'med_type' => $input_med_type, + 'med_salt' => $input_med_salt, + 'dosage' => $input_dosage, + 'dosage_when' => $input_dosage_when, + 'dosage_freq' => $input_dosage_freq, + 'dosage_where' => $input_dose_where, + 'qty' => $input_qty, + 'no_of_days' => $input_no_of_days, + 'remark' => $input_remark, + 'update_by' => $user_name + ); + + if ($hid_ipd_med_item_id > 0) { + $this->ipdDischarge_M->update_p_drug($datainsert, $hid_ipd_med_item_id); + } else { + $this->ipdDischarge_M->insert_p_drug($datainsert); + } + + + + //Discharge Medications New Method + $sql = "SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((ipd_discharge_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.ipd_id='" . $ipd_id . "' order by pt.id "; + $query = $this->db->query($sql); + $data['ipd_discharge_prescrption_prescribed'] = $query->result(); + + $content = $this->load->view('IPD_Discharge/ipd_prescription', $data, true); + + echo $content; + } + + + public function update_drug() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $drug_remarks = $this->input->post('drug_remarks'); + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('invACode'); + + $sql = "select * from ipd_discharge_drug where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $content = "Nothing Done"; + + if (count($dataRec) > 0) { + $dataupdate = array( + 'drug_dose' => $drug_remarks, + 'update_by' => $user_name + ); + + + $this->ipdDischarge_M->update_p_drug($dataupdate, $rec_id); + + $content = "Update Done"; + } + + echo $content; + } + + public function remove_drug($invRecID, $ipd_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_discharge_prescrption_prescribed where ipd_id=" . $ipd_id . " and id=" . $invRecID; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + if (count($dataRec) > 0) { + $this->ipdDischarge_M->remove_p_drug($invRecID); + } + + //Discharge Medications New Method + $sql = "SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((ipd_discharge_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.ipd_id='" . $ipd_id . "' Order by pt.id"; + $query = $this->db->query($sql); + $data['ipd_discharge_prescrption_prescribed'] = $query->result(); + + $content = $this->load->view('IPD_Discharge/ipd_prescription', $data, true); + + echo $content; + } + + public function medical_Select() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user->id . ']:T-' . date('d-m-Y h:m:s'); + + $ipd_id = $this->input->post('ipd_id'); + $rec_id = $this->input->post('med_prec_id'); + + $sql = "select * from ipd_discharge_prescrption_prescribed + where id=" . $rec_id . " and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $dataRec = $query->result(); + + $rvar = array( + "id" => $dataRec[0]->id, + "ipd_id" => $ipd_id, + "med_name" => $dataRec[0]->med_name, + "med_type" => $dataRec[0]->med_type, + "dosage" => $dataRec[0]->dosage, + "dosage_when" => $dataRec[0]->dosage_when, + "dosage_freq" => $dataRec[0]->dosage_freq, + "no_of_days" => $dataRec[0]->no_of_days, + "qty" => $dataRec[0]->qty, + "remark" => $dataRec[0]->remark, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + //Chamunda Hospital + public function preview_discharge_report($ipdno) + { + $content = ""; + + $dataupdate = array( + 'ipd_create' => 1, + ); + + $this->Ipd_M->update($dataupdate, $ipdno); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $sql = "select * from ipd_master where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master_data = $query->result(); + + $p_id = $ipd_master[0]->p_id; + $ipd_admit_date = $ipd_master[0]->register_date; + + $sql = "select * from patient_master_exten where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $patient_master = $query->result(); + + $sql = "select * from patient_master where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $patient_master_data = $query->result(); + + + if ($ipd_master[0]->discharge_date == null || $ipd_master[0]->discharge_date == '0000-00-00' || $ipd_master[0]->discharge_date == '1901-01-01') { + $ipd_discharge_date = date('Y-m-d'); + } else { + $ipd_discharge_date = $ipd_master[0]->discharge_date; + } + + if ($ipd_master[0]->case_id == 0) { + $Discharge_time = date('h:i A', strtotime($ipd_master[0]->discharge_time)); + $Reg_time = date('h:i A', strtotime($ipd_master[0]->reg_time)); + } else { + $Discharge_time = ''; + $Reg_time = ''; + } + + $data['Discharge_time'] = $Discharge_time; + $data['Reg_time'] = $Reg_time; + + + //IPD DEpartment + + $dept_id = $ipd_master_data[0]->dept_id; + + if ($dept_id == '') { + $dept_id = 1; + } + + $sql = "select * from hc_department where iId=$dept_id"; + $query = $this->db->query($sql); + $ipd_department = $query->result(); + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge = $query->result(); + + $doc_list = $ipd_master[0]->doc_list; + + $sql = "select d.id,d.p_fname,d.p_title,d.mphone1,d.mphone2, + if(d.gender=1,'Male','Female') as xgender,Get_Age(d.dob) as age, + d.dob,d.zip,d.email1,d.email2, + group_concat(distinct m.SpecName) as SpecName,d.doc_sign + from (doctor_master d left join (doc_spec s join med_spec m on s.med_spec_id=m.id) on d.id=s.doc_id) + where d.id in (" . $doc_list . ") group by d.id"; + $query = $this->db->query($sql); + $doc_master = $query->result(); + + $depart_name = $ipd_department[0]->vName; + + $doc_list_main_sign = ' + + + '; + + $row_num = 0; + + // Doctor Name + + foreach ($doc_master as $row) { + $row_num = $row_num + 1; + + $mod_r = $row_num % 2; + if ($mod_r > 0) { + $doc_list_main_sign .= ''; + } + + $doc_list_main_sign .= ' + '; + + if ($mod_r == 0) { + $doc_list_main_sign .= ''; + } + } + + $row_num = $row_num + 1; + $mod_r = $row_num % 2; + if ($mod_r == 0) { + + $doc_list_main_sign .= ' + '; + } + + $doc_list_main_sign .= "

Treating Consultant

Dr. ' . $row->p_fname . '
[' . $row->SpecName . ']
+ ' . nl2br($row->doc_sign) . ' +
"; + + $data['doc_list_main_sign'] = $doc_list_main_sign; + + //Presenting Complaints with Duration and Reason for Admission + + $sql = "select * from ipd_discharge_complaint where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_complaint = $query->result(); + + $sql = "select * from ipd_discharge_complaint_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_complaint_remark = $query->result(); + + + //Surgery + $sql = "select * from ipd_discharge_surgery where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_surgery = $query->result(); + + //Prosedure + $sql = "select * from ipd_discharge_procedure where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_procedure = $query->result(); + + //General examination + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,d.ipd_d_id,g.col_unit + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' + where CHAR_LENGTH(d.rdata)>0 "; + $query = $this->db->query($sql); + $ipd_discharge_general_exam_col = $query->result(); + + $sql = "select g.id,g.sys_exam_name,g.sys_format,d.rdata + from ipd_discharge_sys_exam g left join ipd_discharge_1_a d on g.id=d.head_id and d.ipd_d_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_sys_exam = $query->result(); + + + //CLINICAL INVESTIGATION REPORTS + + $sql = "select * from ipd_discharge_2 where ipd_d_id='" . $ipdno . "' and CHAR_LENGTH(lab_investigation_list)>0"; + $query = $this->db->query($sql); + $ipd_discharge_2 = $query->result(); + + $sql = "select * from ipd_discharge_2 where ipd_d_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_2_rdata = $query->result(); + + $lab_list = ""; + + if (count($ipd_discharge_2) > 0) { + $lab_list = $ipd_discharge_2[0]->lab_investigation_list; + } + + if (strlen($lab_list) > 0) { + $lab_list_array = explode(",", $lab_list); + $sql_lab_test = "SELECT t.Test,t.Unit,t.FixedNormals"; + + foreach ($lab_list_array as $key => $value) { + $sql_lab_test .= "," . "group_concat(if(m.inv_date=" . $value . ",i.lab_test_value,null)) AS lab_test_value_" . $key; + } + + $sql_lab_test .= " FROM ((((invoice_master m JOIN lab_request l ON m.id=l.charge_id) + JOIN lab_request_item i ON l.id=i.lab_request_id) + JOIN lab_tests t ON i.lab_test_id=t.mstTestKey) + JOIN ipd_discharge_investigation_template d ON t.TestID=d.test_code) + JOIN lab_rgroups g ON d.group_test=g.mstRGrpKey + WHERE m.attach_id=" . $p_id . " and m.inv_date IN (" . $lab_list . ") + GROUP BY d.test_code + ORDER BY g.sort_order,t.mstTestKey"; + $query = $this->db->query($sql_lab_test); + $lab_request = $query->result_array(); + } + + //Final Diagnosis + + $sql = "select * from ipd_discharge_diagnosis where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_diagnosis = $query->result(); + + $sql = "select * from ipd_discharge_diagnosis_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_diagnosis_remark = $query->result(); + + //Summary of key investigtions during Hospitalization + + $sql = "select * from ipd_discharge_investigtions_inhos where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_investigtions_inhos = $query->result(); + + //Course in the hospital + + $sql = "select * from ipd_discharge_course where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_course = $query->result(); + + $sql = "select * from ipd_discharge_course_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_course_remark = $query->result(); + + //Exam. in Discharge + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_unit + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b_final d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' + where CHAR_LENGTH(d.rdata)>0 "; + $query = $this->db->query($sql); + $ipd_discharge_exam_on_discharge_col = $query->result(); + + //investigation Manual + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_unit + from ipd_discharge_investigation_during_admit g left join ipd_discharge_1_d d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' + where CHAR_LENGTH(d.rdata)>0 "; + $query = $this->db->query($sql); + $ipd_discharge_exam_on_discharge_col_1 = $query->result(); + + //investigation 2 Xray + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_unit + from ipd_discharge_special_investigation g left join ipd_discharge_1_e d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' + where CHAR_LENGTH(d.rdata)>0 "; + $query = $this->db->query($sql); + $ipd_discharge_exam_on_discharge_col_2 = $query->result(); + + //Discharge Medications + + $sql = "select * from ipd_discharge_drug where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_drug = $query->result(); + + //Discharge Instructions + + $sql = "select * from ipd_discharge_instructions where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_instructions = $query->result(); + + //Discharge FOOD DRUG INTERACTION + $sql = "select * from ipd_discharge_drug_food_interaction where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_drug_food_interaction = $query->result(); + + $food_list = "0"; + if (count($ipd_discharge_drug_food_interaction) > 0) { + if (strlen($ipd_discharge_drug_food_interaction[0]->food_id_list) > 0) { + $food_list = $ipd_discharge_drug_food_interaction[0]->food_id_list; + } + } + + $sql = "SELECT m.id,m.food_short,m.food_desc,m.food_desc_lang + FROM ipd_discharge_master_food m where m.id IN (" . $food_list . ")"; + $query = $this->db->query($sql); + $dis_food_interaction = $query->result(); + + //Diet Advice + + $data['diet_advice'] = ""; + if (count($dis_food_interaction) > 0 || count($ipd_discharge_drug_food_interaction) > 0) { + $content = '

Dietary : '; + $content .= ''; + + foreach ($dis_food_interaction as $row) { + $content .= '' . $row->food_short . ': ' . $row->food_desc_lang . '
'; + } + $content .= '

'; + + if ($ipd_discharge_drug_food_interaction[0]->food_text != '') { + $content .= $ipd_discharge_drug_food_interaction[0]->food_text; + } + $data['diet_advice'] = $content; + } + + + + //Content Start + $sql = "SELECT * FROM ipd_discharg_status where id =" . $ipd_master[0]->discarge_patient_status; + $query = $this->db->query($sql); + $ipd_discharge_status = $query->result(); + + //HTML Style + + + + if (count($ipd_discharge_status) < 1) { + $h1_head = ''; + } else { + $h1_head = $ipd_discharge_status[0]->status_details; + } + + $data['h1_head'] = $h1_head; + $data['depart_name'] = $depart_name; + + if (D_discharge_doctor_name == 1) { + $data['Doc_Name_List'] = $doc_list_main_sign; + } + + if ($ipd_master[0]->case_id == '0') { + $discharge_date_time = date('h:m A', strtotime($ipd_master[0]->discharge_time)); + } else { + $discharge_date_time = ''; + } + + $discharge_date_time = $ipd_master[0]->discharge_time; + + $p_address = ""; + + if (strlen($patient_master[0]->p_address) > 2) { + $p_address = "
Address : " . $patient_master[0]->p_address; + } + + if (strtoupper($patient_master[0]->blood_group) == 'NOT DEFINE') { + $blood_group_show = ''; + } else { + $blood_group_show = 'Blood Group : ' . $patient_master[0]->blood_group; + } + + $data['ipd_master'] = $ipd_master; + + if (count($ipd_discharge_surgery) > 0) { + $data['Surgery'] = ''; + $content = '

Surgery : '; + foreach ($ipd_discharge_surgery as $row) { + $content .= '
' . $row->surgery_name . '    / Date of Surgery : ' . MysqlDate_to_str($row->surgery_date); + } + $content .= "

"; + $data['Surgery'] = $content; + } + + if (count($ipd_discharge_procedure) > 0) { + $data['Procedure'] = ''; + $content = '

Procedure : '; + + foreach ($ipd_discharge_procedure as $row) { + $content .= '
' . $row->procedure_name . '    / Date of Procedure : ' . MysqlDate_to_str($row->procedure_date); + } + + $content .= "

"; + + $data['Procedure'] = $content; + } + + if ($ipd_master[0]->isdelivery == 1) { + $baby_desc = 'Sex of baby: ' . $ipd_master[0]->delivery_sex_of_baby . '   '; + + if ($ipd_master[0]->delivery_sex_of_baby2 <> '') { + $baby_desc .= 'Sex of Second Baby :' . $ipd_master[0]->delivery_sex_of_baby2 . '   '; + } + + if ($ipd_master[0]->delivery_sex_of_baby3 == '') { + $baby_desc .= 'Sex of Third Baby :' . $ipd_master[0]->delivery_sex_of_baby3 . ''; + } + + $content = ''; + $content .= 'Child Birth : '; + $content .= 'Delivery Date and Time : ' . MysqlDate_to_str($ipd_master[0]->delivery_date) . ' ' . $ipd_master[0]->delivery_time; + $content .= '
' . $baby_desc; + + $data['isdelivery'] = $content; + } + + //Presenting Complaints with Duration and Reason for Admission + if (count($ipd_discharge_complaint) > 0 || count($ipd_discharge_complaint_remark) > 0) { + + $content = '

Presenting Complaints and Reason for Admission :
'; + + foreach ($ipd_discharge_complaint as $row) { + $content .= $row->comp_report . ' '; + $content .= '' . $row->comp_remark . ''; + } + + if (count($ipd_discharge_complaint_remark) > 0) { + if ($ipd_discharge_complaint_remark[0]->comp_remark != '') { + $content .= nl2br($ipd_discharge_complaint_remark[0]->comp_remark); + } + } + + $content .= "

"; + + + $data['discharge_complaint'] = $content; + } + + //Provisional Diagnosis at the time of Admission + if (count($ipd_discharge_general_exam_col) > 0) { + $content = '

General Examination on Admission :
'; + + foreach ($ipd_discharge_general_exam_col as $row) { + $content .= $row->col_name . ' :' . $row->rdata . $row->col_unit . '   '; + } + $content .= '

'; + + $data['discharge_general_exam'] = $content; + } + + foreach ($ipd_discharge_sys_exam as $row) { + $content = ''; + if ($row->rdata == null || $row->rdata == '') { + } else { + //$content.='

'.$row->sys_exam_name.'

'; + $content = $row->rdata; + } + + $data['discharge_sys_exam'] = $content; + } + + + //Personal History + + $personal_history = ''; + + if ($patient_master_data[0]->is_smoking == 1) { + $personal_history .= 'Smoking '; + } + + if ($patient_master_data[0]->is_alcohol == 1) { + $personal_history .= 'Alcoholic '; + } + + if ($patient_master_data[0]->is_drug_abuse == 1) { + $personal_history .= 'Drug Abuse '; + } + + if ($patient_master_data[0]->is_tobacoo == 1) { + $personal_history .= 'Tobacoo '; + } + + if ($patient_master_data[0]->is_hypertesion == 1) { + $personal_history .= 'Hypertension'; + } + + if ($patient_master_data[0]->is_niddm == 1) { + $personal_history .= 'Type 2 DM'; + } + + if ($patient_master_data[0]->is_hbsag == 1) { + $personal_history .= 'HBsAg '; + } + + if ($patient_master_data[0]->is_hcv == 1) { + $personal_history .= 'HCV '; + } + + if ($patient_master_data[0]->is_hiv_I_II == 1) { + $personal_history .= 'HIV I-II '; + } + + if ($patient_master_data[0]->Others == 1) { + $personal_history .= 'Others '; + } + + if (strlen($personal_history) > 0) { + $content = "

Personal History : " . $personal_history . "

"; + + $data['personal_history'] = $content; + } + + //CLINICAL INVESTIGATION REPORTS + $data['lab_test_content'] = "

Clinical Investigation Reports : "; + $content = ''; + if (isset($lab_request)) { + + $content .= ' + '; + $content .= ''; + $content .= ''; + $content .= ''; + foreach ($lab_list_array as $key => $value) { + $content .= ''; + } + $content .= ''; + + foreach ($lab_request as $row) { + $content .= ''; + $content .= ''; + $content .= ''; + foreach ($lab_list_array as $key => $value) { + $content .= ''; + } + $content .= ''; + } + + $content .= '
Test NameFixed Normals' . MysqlDate_to_str(str_replace("'", "", $value)) . '
' . $row['Test'] . '' . $row['FixedNormals'] . '' . $row['lab_test_value_' . $key] . '
'; + + if (isset($data['lab_test_content'])) { + $data['lab_test_content'] .= $content; + } else { + $data['lab_test_content'] = $content; + } + } + + //investigation Manual + if (count($ipd_discharge_exam_on_discharge_col_1) > 0) { + $content = ''; + foreach ($ipd_discharge_exam_on_discharge_col_1 as $row) { + $content .= '' . $row->col_name . ': ' . $row->rdata . '   / '; + } + $content .= "
"; + + if (isset($data['lab_test_content'])) { + $data['lab_test_content'] .= $content; + } else { + $data['lab_test_content'] = $content; + } + } + + + //Manual X-Ray + if (count($ipd_discharge_exam_on_discharge_col_2) > 0) { + $content = ''; + foreach ($ipd_discharge_exam_on_discharge_col_2 as $row) { + $content .= '' . $row->col_name . ':' . $row->rdata . "
"; + } + + if (isset($data['lab_test_content'])) { + $data['lab_test_content'] .= $content; + } else { + $data['lab_test_content'] = $content; + } + } + + if (count($ipd_discharge_2_rdata) > 0) { + $content = ''; + if ($ipd_discharge_2_rdata[0]->rdata != '') { + $content .= '

' . $ipd_discharge_2_rdata[0]->rdata . '
'; + } + if (isset($data['lab_test_content'])) { + $data['lab_test_content'] .= $content; + } else { + $data['lab_test_content'] = $content; + } + } + + $data['lab_test_content'] .= '

'; + + //Final Diagnosis at the time of Discharge + $content = '

Final Diagnosis'; + if (count($ipd_discharge_diagnosis) > 0) { + foreach ($ipd_discharge_diagnosis as $row) { + $content .= '
' . $row->comp_report . ' '; + if (strlen($row->comp_remark) > 0) { + $content .= '(' . $row->comp_remark . ')'; + } + } + } + + if (count($ipd_discharge_diagnosis_remark) > 0) { + if ($ipd_discharge_diagnosis_remark[0]->comp_remark != '') { + $content .= '
' . nl2br(trim($ipd_discharge_diagnosis_remark[0]->comp_remark)); + } + } + + $content .= "

"; + + $data['FinalDiagnosis'] = $content; + + //Summary of key investigtions during Hospitalization + if (count($ipd_discharge_investigtions_inhos) > 0) { + $content = ''; + if ($ipd_discharge_investigtions_inhos[0]->comp_remark != '') { + $content .= "Summary of key investigtions during Hospitalization"; + $content .= '
' . $ipd_discharge_investigtions_inhos[0]->comp_remark . '
'; + } + + $data['discharge_investigtions_inhos'] = $content; + } + + //Course in the hospital + if (count($ipd_discharge_course) > 0) { + $content = '

Course in the hospital'; + foreach ($ipd_discharge_course as $row) { + $content .= '
' . $row->comp_report . ' '; + $content .= '' . $row->comp_remark . ''; + } + $content .= "

"; + + $data['Course_in_the_hospital'] = $content; + } + + if (count($ipd_discharge_course_remark) > 0) { + $content = ''; + if ($ipd_discharge_course_remark[0]->comp_remark != '') { + $content .= '
' . $ipd_discharge_course_remark[0]->comp_remark . '
'; + } + if (isset($data['Course_in_the_hospital'])) { + $data['Course_in_the_hospital'] .= $content; + } else { + $data['Course_in_the_hospital'] = '

Course in the hospital' . $content . "

"; + } + } + + + //Exam in Discharge + if (count($ipd_discharge_exam_on_discharge_col) > 0) { + $content = '

Examination on Discharge : '; + $content .= ''; + + foreach ($ipd_discharge_exam_on_discharge_col as $row) { + $content .= $row->col_name . ': ' . $row->rdata . ' ' . $row->col_unit . '   / '; + } + $content .= '

'; + + $data['discharge_exam_on_discharge'] = $content; + } + + //Discharge Medicince + + $sql = "SELECT pt.* ,d.dose_show_sign AS dose_shed,d.dose_show_desc AS dose_shed_hindi, + dw.dose_sign_desc AS dose_when,dw.dose_sign_hindi AS dose_when_hindi, + df.dose_sign_desc AS dose_frequency,df.dose_sign_hindi AS dose_frequency_hindi, + d_on.dose_sign_desc AS dose_where,d_on.dose_sign_hindi AS dose_where_hindi, + m.genericname + FROM ((((ipd_discharge_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id) + LEFT JOIN opd_med_master m ON pt.med_id =m.id + where pt.ipd_id=" . $ipdno . " Order by pt.id"; + $query = $this->db->query($sql); + $ipd_p_prescribed = $query->result(); + + $medical = '

'; + $sr_no = 1; + if (count($ipd_p_prescribed) > 0) { + $medical = "

Discharge Medications"; + $medical .= '

+ + + + + + + + '; + + foreach ($ipd_p_prescribed as $row) { + + $medical .= ' + + + + + + '; + $medical .= ' + + + '; + + $sr_no = $sr_no + 1; + } + $medical .= "
Medicine NameDosageQtyDay
' . $sr_no . ' - ' . $row->med_type . ' ' . $row->med_name . '' . $row->dose_shed . ' / ' . $row->dose_shed_hindi . ' ' . $row->dose_when_hindi . ' ' . $row->dose_frequency_hindi . '' . $row->qty . '' . $row->no_of_days . '
'; + if (strlen($row->genericname) > 0 || strlen($row->remark) > 0 || strlen($row->dose_shed_hindi) > 0) { + if (strlen($row->genericname) > 1) { + $medical .= 'Composition : ' . $row->genericname . ''; + } + + if (strlen($row->remark) > 0) { + $medical .= ' Notes : ' . $row->remark . ''; + } + } + + $medical .= '

"; + + $data['Discharge_Medications'] = $medical; + } + + + $foot_banner_list = "0"; + $content = ""; + //Discharge Instructions 1 + if (count($ipd_discharge_instructions) > 0) { + + $content .= '

Discharge Advice/Instructions/Summary
'; + + if ($ipd_discharge_instructions[0]->comp_remark <> '') { + $content .= $ipd_discharge_instructions[0]->comp_remark; + } + + if (strlen($ipd_discharge_instructions[0]->review_after) > 0) { + $content .= '
Review after ' . $ipd_discharge_instructions[0]->review_after . ' days / as and when required
'; + } + + if (strlen($ipd_discharge_instructions[0]->footer_banner) > 0) { + $foot_banner_list = $ipd_discharge_instructions[0]->footer_banner; + } + + if ($ipd_discharge_instructions[0]->footer_text != '') { + $content .= $ipd_discharge_instructions[0]->footer_text; + } + + if ($foot_banner_list <> "0") { + $sql = "SELECT m.id,m.banner_name,m.banner_image_name + FROM ipd_discharge_banner m where m.id IN (" . $foot_banner_list . ") order by id desc"; + $query = $this->db->query($sql); + $dis_banner_list = $query->result(); + + foreach ($dis_banner_list as $row) { + $content .= '

'; + } + } + } + + $data['Discharge_Instructions'] = $content; + + $content_html = $this->load->view('IPD_Discharge/' . D_discharge_content_format, $data, true); + + // Update in Database + $dataupdate = array( + 'ipd_id' => $ipdno, + 'content' => $content_html + ); + $this->ipdDischarge_M->update_ipdDischarge($dataupdate, $ipd_discharge[0]->id); + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge'] = $query->result(); + + + $data['content'] = $content_html; + + $this->load->view('IPD_Discharge/ipd_discharge_preview', $data); + } + + + + + //Report Format + + public function create_discharge_report($ipdno) + { + $content = ""; + + $dataupdate = array( + 'ipd_create' => 1, + ); + + $this->Ipd_M->update($dataupdate, $ipdno); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $sql = "select * from ipd_master where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master_data = $query->result(); + + $p_id = $ipd_master[0]->p_id; + $ipd_admit_date = $ipd_master[0]->register_date; + + $sql = "select * from patient_master_exten where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $patient_master = $query->result(); + + + $sql = "select * from patient_master where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $patient_master_data = $query->result(); + + //IPD DEpartment + + $dept_id = $ipd_master_data[0]->dept_id; + + $sql = "select * from hc_department where iId=$dept_id"; + $query = $this->db->query($sql); + $ipd_department = $query->result(); + + if ($ipd_master[0]->discharge_date == null || $ipd_master[0]->discharge_date == '0000-00-00' || $ipd_master[0]->discharge_date == '1901-01-01') { + $ipd_discharge_date = date('Y-m-d'); + } else { + $ipd_discharge_date = $ipd_master[0]->discharge_date; + } + + if ($ipd_master[0]->case_id == 0) { + $Discharge_time = date('h:m A', strtotime($ipd_master[0]->discharge_time)); + $Reg_time = date('h:m A', strtotime($ipd_master[0]->reg_time)); + } else { + $Discharge_time = ''; + $Reg_time = ''; + } + + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge = $query->result(); + + $doc_list = $ipd_master[0]->doc_list; + + $sql = "select d.id,d.p_fname,d.p_title,d.mphone1,d.mphone2, + if(d.gender=1,'Male','Female') as xgender,Get_Age(d.dob) as age, + d.dob,d.zip,d.email1,d.email2, + group_concat(distinct m.SpecName) as SpecName,d.doc_sign + from (doctor_master d left join (doc_spec s join med_spec m on s.med_spec_id=m.id) on d.id=s.doc_id) + where d.id in (" . $doc_list . ") group by d.id"; + $query = $this->db->query($sql); + $doc_master = $query->result(); + + + $depart_name = ' + + + +
+

Department/Specialty : ' . $ipd_department[0]->vName . '

+
'; + + + $doc_list = ""; + $doc_list_sign = ' '; + + $doc_list_main_sign = '

Treating Consultant / Authorized Team Doctor

'; + + $row_num = 0; + foreach ($doc_master as $row) { + $row_num = $row_num + 1; + + $doc_list .= "Dr. " . $row->p_fname . " [" . $row->SpecName . "]
"; + + $doc_list_sign .= ' + + + + '; + + $mod_r = $row_num % 2; + if ($mod_r > 0) { + $doc_list_main_sign .= ''; + } + + $doc_list_main_sign .= ' + '; + + if ($mod_r == 0) { + $doc_list_main_sign .= ''; + } + } + $row_num = $row_num + 1; + $mod_r = $row_num % 2; + if ($mod_r == 0) { + + $doc_list_main_sign .= ' + '; + } + + + $doc_list_sign .= "

Treating Consultant/Department/Specialty

Dr. ' . $row->p_fname . ' +
' . $row->SpecName . ' +
+
+
Signature of Consultant
Dr. ' . $row->p_fname . '
[' . $row->SpecName . ']
+ ' . nl2br($row->doc_sign) . ' +
"; + + $doc_list_main_sign .= ""; + + //Presenting Complaints with Duration and Reason for Admission + + $sql = "select * from ipd_discharge_complaint where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_complaint = $query->result(); + + $sql = "select * from ipd_discharge_complaint_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_complaint_remark = $query->result(); + + + //Surgery + $sql = "select * from ipd_discharge_surgery where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_surgery = $query->result(); + + //Prosedure + $sql = "select * from ipd_discharge_procedure where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_procedure = $query->result(); + + //General examination + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,d.ipd_d_id,g.col_unit + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' + where CHAR_LENGTH(d.rdata)>0 "; + $query = $this->db->query($sql); + $ipd_discharge_general_exam_col = $query->result(); + + $sql = "select g.id,g.sys_exam_name,g.sys_format,d.rdata + from ipd_discharge_sys_exam g left join ipd_discharge_1_a d on g.id=d.head_id and d.ipd_d_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_sys_exam = $query->result(); + + + //CLINICAL INVESTIGATION REPORTS + + $sql = "select * from ipd_discharge_2 where ipd_d_id='" . $ipdno . "' and CHAR_LENGTH(lab_investigation_list)>0"; + $query = $this->db->query($sql); + $ipd_discharge_2 = $query->result(); + + $sql = "select * from ipd_discharge_2 where ipd_d_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_2_rdata = $query->result(); + + $lab_list = ""; + + if (count($ipd_discharge_2) > 0) { + $lab_list = $ipd_discharge_2[0]->lab_investigation_list; + } + + if (strlen($lab_list) > 0) { + $lab_list_array = explode(",", $lab_list); + $sql_lab_test = "SELECT t.Test,t.Unit,t.FixedNormals"; + + foreach ($lab_list_array as $key => $value) { + $sql_lab_test .= "," . "group_concat(if(m.inv_date=" . $value . ",i.lab_test_value,null)) AS lab_test_value_" . $key; + } + + $sql_lab_test .= " FROM ((((invoice_master m JOIN lab_request l ON m.id=l.charge_id) + JOIN lab_request_item i ON l.id=i.lab_request_id) + JOIN lab_tests t ON i.lab_test_id=t.mstTestKey) + JOIN ipd_discharge_investigation_template d ON t.TestID=d.test_code) + JOIN lab_rgroups g ON d.group_test=g.mstRGrpKey + WHERE m.attach_id=" . $p_id . " and m.inv_date IN (" . $lab_list . ") + GROUP BY d.test_code + ORDER BY g.sort_order,t.mstTestKey"; + + + $query = $this->db->query($sql_lab_test); + $lab_request = $query->result_array(); + } + + //Final Diagnosis + + $sql = "select * from ipd_discharge_diagnosis where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_diagnosis = $query->result(); + + $sql = "select * from ipd_discharge_diagnosis_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_diagnosis_remark = $query->result(); + + + //Summary of key investigtions during Hospitalization + + $sql = "select * from ipd_discharge_investigtions_inhos where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_investigtions_inhos = $query->result(); + + //Course in the hospital + + $sql = "select * from ipd_discharge_course where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_course = $query->result(); + + $sql = "select * from ipd_discharge_course_remark where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_course_remark = $query->result(); + + //Exam. in Discharge + + $sql = "select g.id,g.col_name,g.col_description,d.col_id,d.short_head,d.rdata,g.col_unit + from ipd_discharge_general_exam_col g left join ipd_discharge_1_b_final d on g.id=d.col_id and d.ipd_d_id='" . $ipdno . "' + where CHAR_LENGTH(d.rdata)>0 "; + $query = $this->db->query($sql); + $ipd_discharge_exam_on_discharge_col = $query->result(); + + + //Discharge Medications + + $sql = "select * from ipd_discharge_drug where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_drug = $query->result(); + + //Discharge Instructions + + $sql = "select * from ipd_discharge_instructions where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_instructions = $query->result(); + + //Discharge FOOD DRUG INTERACTION + $sql = "select * from ipd_discharge_drug_food_interaction where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge_drug_food_interaction = $query->result(); + + $food_list = "0"; + if (count($ipd_discharge_drug_food_interaction) > 0) { + if (strlen($ipd_discharge_drug_food_interaction[0]->food_id_list) > 0) { + $food_list = $ipd_discharge_drug_food_interaction[0]->food_id_list; + } + } + + $sql = "SELECT m.id,m.food_short + FROM ipd_discharge_master_food m where m.id IN (" . $food_list . ")"; + $query = $this->db->query($sql); + $dis_food_interaction = $query->result(); + + //HTML Style + + $style_tag_P = "LINE-HEIGHT:20px;"; + + $content_space_line = ' + + + + + +
+ +
'; + + + //Content Start + $sql = "SELECT * FROM ipd_discharg_status where id =" . $ipd_master[0]->discarge_patient_status; + $query = $this->db->query($sql); + $ipd_discharge_status = $query->result(); + + if (count($ipd_discharge_status) < 1) { + $h1_head = ''; + } else { + $h1_head = $ipd_discharge_status[0]->status_details; + } + + $content .= ' + + + + + + +
+

' . $h1_head . '

+
'; + + $content .= $depart_name; + + $content .= $content_space_line; + + $content .= $doc_list_main_sign; + + $content .= $content_space_line; + + if ($ipd_master[0]->case_id == '0') { + $discharge_date_time = date('h:m A', strtotime($ipd_master[0]->discharge_time)); + } else { + $discharge_date_time = ''; + } + + $discharge_date_time = $ipd_master[0]->discharge_time; + + $p_address = ""; + + if (strlen($patient_master[0]->p_address) > 2) { + $p_address = "
Address : " . $patient_master[0]->p_address; + } + + if (strtoupper($patient_master[0]->blood_group) == 'NOT DEFINE') { + $blood_group_show = ''; + } else { + $blood_group_show = 'Blood Group : ' . $patient_master[0]->blood_group; + } + + $content .= ' + + + + + + + + + + + + + + + + + + + + + + + +
+

Patient Information

+
Name of Patient  : ' . ucwords($ipd_master[0]->p_fname) . ' +
' . ucwords($ipd_master[0]->p_relative) . ' ' . ucwords($ipd_master[0]->p_rname) . '' . $p_address . '
UHID:' . $ipd_master[0]->p_code . 'IPD No. : ' . $ipd_master[0]->ipd_code . '
Age : ' . $ipd_master[0]->str_age . ' /  Gender :  ' . $ipd_master[0]->xgender . ' TPA:' . $ipd_master[0]->admit_type . 'Discharge Status : ' . $ipd_master[0]->status_desc . '
Date of Admission : ' . $ipd_master[0]->str_register_date . ' ' . $Reg_time . ' Date of Discharge : ' . $ipd_master[0]->str_discharge_date . ' ' . $Discharge_time . '
MLC :' . $ipd_master[0]->mlc_type . '' . $blood_group_show . '
'; + + $content .= $content_space_line; + + if ($ipd_master[0]->issurgery == 1 || $ipd_master[0]->isdelivery == 1 || count($ipd_discharge_surgery) > 0 || count($ipd_discharge_procedure) > 0) { + $content .= ' + + '; + + if ($ipd_master[0]->issurgery == 1) { + $content .= ' + + + + + '; + } + + if (count($ipd_discharge_surgery) > 0) { + foreach ($ipd_discharge_surgery as $row) { + $content .= ' + + + + + '; + } + } + + if (count($ipd_discharge_procedure) > 0) { + foreach ($ipd_discharge_procedure as $row) { + $content .= ' + + + + + '; + } + } + + + + if ($ipd_master[0]->isdelivery == 1) { + $baby_desc = 'Sex of baby: ' . $ipd_master[0]->delivery_sex_of_baby . ''; + + if ($ipd_master[0]->delivery_sex_of_baby2 <> '') { + $baby_desc .= 'Sex of Second Baby :' . $ipd_master[0]->delivery_sex_of_baby2 . ''; + } + + if ($ipd_master[0]->delivery_sex_of_baby3 <> '') { + $baby_desc .= 'Sex of Third Baby :' . $ipd_master[0]->delivery_sex_of_baby3 . ''; + } + + $content .= ' + + + + + '; + } + + $content .= ' + +
+

Surgery

+
' . $ipd_master[0]->surgery_name . 'Date of Surgery : ' . MysqlDate_to_str($ipd_master[0]->surgery_date) . '
+

Surgery

+
' . $row->surgery_name . 'Date of Surgery : ' . MysqlDate_to_str($row->surgery_date) . '
+

Procedure

+
' . $row->procedure_name . 'Date of Procedure : ' . MysqlDate_to_str($row->procedure_date) . '
+

Child Birth

+
Delivery Date and Time : ' . MysqlDate_to_str($ipd_master[0]->delivery_date) . ' ' . $ipd_master[0]->delivery_time . '' . $baby_desc . '
'; + } + + + + //Presenting Complaints with Duration and Reason for Admission + + $content .= '

Presenting Complaints and Reason for Admission

'; + + foreach ($ipd_discharge_complaint as $row) { + $content .= '' . $row->comp_report . '
'; + $content .= '' . $row->comp_remark . ''; + } + + if (count($ipd_discharge_complaint_remark) > 0) { + if ($ipd_discharge_complaint_remark[0]->comp_remark != '') { + $content .= '' . nl2br($ipd_discharge_complaint_remark[0]->comp_remark) . ' '; + } + } + + //Provisional Diagnosis at the time of Admission + + $content .= ' +

General Examination on Admission

+ + '; + $icol = 0; + $no_col = 4; + foreach ($ipd_discharge_general_exam_col as $row) { + if ($icol % $no_col == 0) { + $content .= ''; + } + $content .= ''; + + if ($icol % $no_col == $no_col - 1) { + $content .= ''; + } + + $icol = $icol + 1; + } + + while ($icol % $no_col > 0) { + $content .= ''; + + if ($icol % $no_col == $no_col - 1) { + $content .= ''; + } + $icol = $icol + 1; + } + + $content .= '
' . $row->col_name . ': ' . $row->rdata . ' ' . $row->col_unit . '
  
'; + + foreach ($ipd_discharge_sys_exam as $row) { + if ($row->rdata == null || $row->rdata == '') { + } else { + //$content.='

'.$row->sys_exam_name.'

'; + $content .= '
' . $row->rdata . '
'; + } + } + + //Personal History + + $personal_history = ''; + + if ($patient_master_data[0]->is_smoking == 1) { + $personal_history .= 'Smoking '; + } + + if ($patient_master_data[0]->is_alcohol == 1) { + $personal_history .= 'Alcoholic '; + } + + if ($patient_master_data[0]->is_drug_abuse == 1) { + $personal_history .= 'Drug Abuse '; + } + + if ($patient_master_data[0]->is_tobacoo == 1) { + $personal_history .= 'Tobacoo '; + } + + if ($patient_master_data[0]->is_hypertesion == 1) { + $personal_history .= 'Hypertension '; + } + + if ($patient_master_data[0]->is_niddm == 1) { + $personal_history .= 'NIDDM '; + } + + if ($patient_master_data[0]->is_hbsag == 1) { + $personal_history .= 'HBsAg '; + } + + if ($patient_master_data[0]->is_hcv == 1) { + $personal_history .= 'HCV '; + } + + if ($patient_master_data[0]->is_hiv_I_II == 1) { + $personal_history .= 'HIV I-II '; + } + + if ($patient_master_data[0]->Others == 1) { + $personal_history .= 'Others '; + } + + if (strlen($personal_history) > 0) { + $content .= "Personal History : " . $personal_history; + } + + //CLINICAL INVESTIGATION REPORTS + if (isset($lab_request)) { + $content .= '

Clinical Investigation Reports

'; + $content .= ' + '; + + $content .= ''; + $content .= ''; + $content .= ''; + foreach ($lab_list_array as $key => $value) { + $content .= ''; + } + $content .= ''; + + foreach ($lab_request as $row) { + $content .= ''; + $content .= ''; + $content .= ''; + foreach ($lab_list_array as $key => $value) { + $content .= ''; + } + $content .= ''; + } + + $content .= '
Fixed Normals' . MysqlDate_to_str(str_replace("'", "", $value)) . '
' . $row['Test'] . '' . $row['FixedNormals'] . '' . $row['lab_test_value_' . $key] . '
'; + } + + if (count($ipd_discharge_2_rdata) > 0) { + if ($ipd_discharge_2_rdata[0]->rdata != '') { + $content .= '
' . $ipd_discharge_2_rdata[0]->rdata . '
'; + } + } + + //Final Diagnosis at the time of Discharge + + $content .= '

Final Diagnosis

'; + + foreach ($ipd_discharge_diagnosis as $row) { + $content .= '
' . $row->comp_report . ' '; + $content .= '' . $row->comp_remark . ''; + } + + if (count($ipd_discharge_diagnosis_remark) > 0) { + if ($ipd_discharge_diagnosis_remark[0]->comp_remark != '') { + $content .= '
' . $ipd_discharge_diagnosis_remark[0]->comp_remark . '
'; + } + } + + //Summary of key investigtions during Hospitalization + if (count($ipd_discharge_investigtions_inhos) > 0) { + if ($ipd_discharge_investigtions_inhos[0]->comp_remark != '') { + $content .= "

Summary of key investigtions during Hospitalization

"; + $content .= '
' . $ipd_discharge_investigtions_inhos[0]->comp_remark . '
'; + } + } + + //Course in the hospital + + $content .= '
+

Course in the hospital

'; + + foreach ($ipd_discharge_course as $row) { + $content .= '
' . $row->comp_report . ' '; + $content .= '' . $row->comp_remark . ''; + } + + if (count($ipd_discharge_course_remark) > 0) { + if ($ipd_discharge_course_remark[0]->comp_remark != '') { + $content .= '
' . $ipd_discharge_course_remark[0]->comp_remark . '
'; + } + } + + //Exam in Discharge + + $content .= '

Examination on Discharge

'; + + $content .= ' + + '; + $icol = 0; + $no_col = 4; + foreach ($ipd_discharge_exam_on_discharge_col as $row) { + if ($icol % $no_col == 0) { + $content .= ''; + } + $content .= ''; + + if ($icol % $no_col == $no_col - 1) { + $content .= ''; + } + + $icol = $icol + 1; + } + + while ($icol % $no_col > 0) { + $content .= ''; + + if ($icol % $no_col == $no_col - 1) { + $content .= ''; + } + $icol = $icol + 1; + } + + $content .= '
' . $row->col_name . ': ' . $row->rdata . ' ' . $row->col_unit . '
  
'; + + $content .= '

Discharge Medications

'; + $content .= "
    "; + foreach ($ipd_discharge_drug as $row) { + $content .= '
  1. ' . $row->drug_name . ' ----------> '; + + $content .= ' ' . $row->drug_dose . ''; + + if (strlen($row->drug_day) > 0) { + $content .= ' [ ' . $row->drug_day . " days] "; + } else { + $content .= ' '; + } + + $content .= '
  2. '; + } + $content .= "
"; + + + + //FOOD DRUG INTERACTION + if (count($ipd_discharge_drug_food_interaction) > 0) { + if (strlen($ipd_discharge_drug_food_interaction[0]->food_text) > 0 || count($dis_food_interaction) > 0) { + $content .= "

Dietary

"; + } + } + + if (count($ipd_discharge_drug_food_interaction) > 0) { + if ($ipd_discharge_drug_food_interaction[0]->food_text != '') { + $content .= $ipd_discharge_drug_food_interaction[0]->food_text; + } + } + + foreach ($dis_food_interaction as $row) { + $content .= $row->food_desc_lang . '
'; + //$content.=''.$row->food_desc.''; + } + + //Discharge Instructions + if (count($ipd_discharge_instructions) > 0) { + if ($ipd_discharge_instructions[0]->comp_remark != '') { + $content .= "

Discharge Advice/Instructions/Summary

"; + $content .= '
' . $ipd_discharge_instructions[0]->comp_remark . '
'; + } + + if ($ipd_discharge_instructions[0]->footer_text != '') { + $content .= $ipd_discharge_instructions[0]->footer_text; + } + } + + + + + //FOOD DRUG INTERACTION + //$content.=$doc_list_sign; + + //Foot Banner + $foot_banner_list = "0"; + if (count($ipd_discharge_instructions) > 0) { + if (strlen($ipd_discharge_instructions[0]->footer_banner) > 0) { + $foot_banner_list = $ipd_discharge_instructions[0]->footer_banner; + } + } + + $sql = "SELECT m.id,m.banner_name,m.banner_image_name + FROM ipd_discharge_banner m where m.id IN (" . $foot_banner_list . ") order by id desc"; + $query = $this->db->query($sql); + $dis_banner_list = $query->result(); + + foreach ($dis_banner_list as $row) { + $content .= '

'; + } + + // Update in Database + $dataupdate = array( + 'ipd_id' => $ipdno, + 'content' => $content + ); + $this->ipdDischarge_M->update_ipdDischarge($dataupdate, $ipd_discharge[0]->id); + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge'] = $query->result(); + + $this->load->view('IPD_Discharge/ipd_discharge_preview', $data); + } + + // + + public function edit_discharge_report($ipdno) + { + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $data['ipd_discharge'] = $query->result(); + + $this->load->view('IPD_Discharge/ipd_discharge_preview', $data); + } + + + public function show_file($ipdno) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge = $query->result(); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + // Doctor Name + + $docname = ''; + $docedu = ''; + + $report_head = 'Patient Name :' . $ipd_master[0]->p_fname . ' / Age :' . $ipd_master[0]->str_age . ' / Gender :' . $ipd_master[0]->xgender . ' / IPD ID :' . $ipd_master[0]->ipd_code; + + $complete_report = $ipd_discharge[0]->content; + + $folder_name = 'uploads/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name = 'Report-IPD-Discharge-' . $ipdno . "-" . date('Ymdhis') . ".pdf"; + + $filepath = $folder_name . '/' . $file_name; + + $udata = array( + 'file_name' => $file_name, + 'file_type' => 'pdf', + 'file_path' => $folder_name, + 'full_path' => $filepath, + 'orig_name' => $file_name, + 'client_name' => 'system_genrate', + 'file_ext' => '.pdf', + 'upload_by' => $user_name, + 'pid' => $ipd_master[0]->p_id, + 'ipd_id' => $ipd_master[0]->id, + 'case_id' => 0, + 'file_desc' => $report_head, + 'charge_id' => 0 + ); + + $this->load->model('File_M'); + + $sql = "select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='" . $file_name . "'"; + $query = $this->db->query($sql); + $check_file_exist = $query->result(); + + if (count($check_file_exist) < 1) { + $this->File_M->insert($udata); + } else { + $this->File_M->update($udata, $check_file_exist[0]->id); + } + + create_Discharge_report_pdf($complete_report, $filepath, '', $report_head, $docname, $docedu); + } + + + + public function show_file2($ipdno) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge = $query->result(); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + // Doctor Name + + $docname = ''; + $docedu = ''; + + $report_head = 'Patient Name :' . $ipd_master[0]->p_fname . ' / Age :' . $ipd_master[0]->str_age . ' / Gender :' . $ipd_master[0]->xgender . ' / IPD ID :' . $ipd_master[0]->ipd_code; + + $complete_report = $ipd_discharge[0]->content; + + $folder_name = 'uploads/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name = 'Report-IPD-Discharge-' . $ipdno . "-" . date('Ymdhis') . ".pdf"; + + $filepath = $folder_name . '/' . $file_name; + + $udata = array( + 'file_name' => $file_name, + 'file_type' => 'pdf', + 'file_path' => $folder_name, + 'full_path' => $filepath, + 'orig_name' => $file_name, + 'client_name' => 'system_genrate', + 'file_ext' => '.pdf', + 'upload_by' => $user_name, + 'pid' => $ipd_master[0]->p_id, + 'ipd_id' => $ipd_master[0]->id, + 'case_id' => 0, + 'file_desc' => $report_head, + 'charge_id' => 0 + ); + + $this->load->model('File_M'); + + $sql = "select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='" . $file_name . "'"; + $query = $this->db->query($sql); + $check_file_exist = $query->result(); + + if (count($check_file_exist) < 1) { + $this->File_M->insert($udata); + } else { + $this->File_M->update($udata, $check_file_exist[0]->id); + } + + create_discharge_logo_pdf($complete_report, $filepath); + } + + public function show_file3($ipdno) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge = $query->result(); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + // Doctor Name + + $docname = ''; + $docedu = ''; + + $report_head = 'Patient Name :' . $ipd_master[0]->p_fname . ' / Age :' . $ipd_master[0]->str_age . ' / Gender :' . $ipd_master[0]->xgender . ' / IPD ID :' . $ipd_master[0]->ipd_code; + + $report_foot = 'P:' . $ipd_master[0]->p_fname . ' / A:' . $ipd_master[0]->str_age . ' /G:' . $ipd_master[0]->xgender . ' /' . $ipd_master[0]->ipd_code; + + $complete_report = $ipd_discharge[0]->content; + + $folder_name = 'uploads/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name = 'Report-IPD-Discharge-' . $ipdno . "-" . date('Ymdhis') . ".pdf"; + + $filepath = $folder_name . '/' . $file_name; + + $udata = array( + 'file_name' => $file_name, + 'file_type' => 'pdf', + 'file_path' => $folder_name, + 'full_path' => $filepath, + 'orig_name' => $file_name, + 'client_name' => 'system_genrate', + 'file_ext' => '.pdf', + 'upload_by' => $user_name, + 'pid' => $ipd_master[0]->p_id, + 'ipd_id' => $ipd_master[0]->id, + 'case_id' => 0, + 'file_desc' => $report_head, + 'charge_id' => 0 + ); + + $this->load->model('File_M'); + + $sql = "select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='" . $file_name . "'"; + $query = $this->db->query($sql); + $check_file_exist = $query->result(); + + if (count($check_file_exist) < 1) { + $this->File_M->insert($udata); + } else { + $this->File_M->update($udata, $check_file_exist[0]->id); + } + + //create_Discharge_report_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu); + + $content = ''; + + $filename = '/uploads/' . time() . "_order.pdf"; + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = true; + + $Head_Print = ' + + + + + +
+
+
+
+
+
+
+
+
+
+
'; + + $this->m_pdf->pdf->SetHTMLFooter(' + + + + + + +
Page : {PAGENO}/{nbpg}' . $report_foot . '
'); + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($Head_Print . $content . $complete_report); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } + + public function show_discharge($ipdno, $print_type = 0) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $sql = "select * from ipd_discharge where ipd_id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_discharge = $query->result(); + + $sql = "select * from v_ipd_list where id='" . $ipdno . "' "; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + + $department = ''; + + $docname = ''; + $docedu = ''; + + $data['report_head'] = 'Patient Name :' . $ipd_master[0]->p_fname . ' / Age :' . $ipd_master[0]->str_age . ' / Gender :' . $ipd_master[0]->xgender . ' / IPD ID :' . $ipd_master[0]->ipd_code; + + $data['report_foot'] = 'P:' . $ipd_master[0]->p_fname . ' / A:' . $ipd_master[0]->str_age . ' /G:' . $ipd_master[0]->xgender . ' /' . $ipd_master[0]->ipd_code; + + $data['complete_report'] = $ipd_discharge[0]->content; + + $data['print_type'] = $print_type; + + $folder_name = 'uploads/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name = 'Report-IPD-Discharge-' . $ipdno . "-" . date('Ymdhis') . ".pdf"; + + $filepath = $folder_name . '/' . $file_name; + + $udata = array( + 'file_name' => $file_name, + 'file_type' => 'pdf', + 'file_path' => $folder_name, + 'full_path' => $filepath, + 'orig_name' => $file_name, + 'client_name' => 'system_genrate', + 'file_ext' => '.pdf', + 'upload_by' => $user_name, + 'pid' => $ipd_master[0]->p_id, + 'ipd_id' => $ipd_master[0]->id, + 'case_id' => 0, + 'file_desc' => $data['report_head'], + 'charge_id' => 0 + ); + + $this->load->model('File_M'); + + $sql = "select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='" . $file_name . "'"; + $query = $this->db->query($sql); + $check_file_exist = $query->result(); + + if (count($check_file_exist) < 1) { + $this->File_M->insert($udata); + } else { + $this->File_M->update($udata, $check_file_exist[0]->id); + } + + //create_Discharge_report_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu); + + $print_content = $this->load->view('IPD_Discharge/' . D_discharge_template, $data, TRUE); + + //$print_content=$this->load->view('IPD_Discharge/ipd_discharge_print_format_1',$data,TRUE); + + $filename = '/uploads/' . time() . "_order.pdf"; + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = true; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($print_content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } +} diff --git a/old_code_ci3/controllers/Item.php b/old_code_ci3/controllers/Item.php new file mode 100644 index 0000000..d1823c6 --- /dev/null +++ b/old_code_ci3/controllers/Item.php @@ -0,0 +1,354 @@ +db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item/item_type_search_v',$data); + } + + public function search_adv($itype_id=1) + { + + $sql = "SELECT * FROM v_hc_items where itype=".$itype_id; + $query = $this->db->query($sql); + $data= $query->result(); + echo ' Print

'; + + echo ' + + + + + + + + + + '; + if(count($data)>0){ + for ($i = 0; $i < count($data); ++$i) { + echo ' + + + + + + '; + } + } + + echo ' + + + + + + + + + +
OPD or IPDGroupCharge NameAmount
'.$data[$i]->isIPD_OPD.''.$data[$i]->group_desc.''.$data[$i]->idesc.''.$data[$i]->amount.' + +
OPD or IPDGroupCharge NameAmount
'; + echo ""; + + } + + public function search() + { + $sql = "SELECT * FROM hc_item_type order by group_desc"; + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $sql = "SELECT * FROM v_hc_items where itype=1"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item/item_search_V',$data); + + } + + + public function search_ipd() + { + $sql = "SELECT * FROM ipd_item_type order by group_desc"; + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $sql = "SELECT * FROM ipd_items where itype=1"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item_ipd/item_search_V',$data); + + } + + public function search_print($itype_id=1) + { + + $sql = "SELECT * FROM v_hc_items where itype=".$itype_id." order by group_desc"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item/item_item_list',$data); + + } + + function itemtype_record($id) + { + $sql = "SELECT *,(case is_ipd_opd when 0 then 'OPD-IPD' when 1 then 'OPD' when 2 then 'IPD' end) as isIPD_OPD + FROM hc_item_type where itype_id='".$id."' order by group_desc"; + $query = $this->db->query($sql); + $data['data_item']= $query->result(); + + $this->load->view('item/item_type_profile',$data); + } + + function item_record($id) + { + + $sql="select * from v_hc_items where id=".$id; + $query = $this->db->query($sql); + $data['data_item']= $query->result(); + + $sql="select * from hc_item_type"; + $query = $this->db->query($sql); + $data['data_item_type']= $query->result(); + + $sql="select * from v_insurance_item_list where c_item_id=".$id; + $query = $this->db->query($sql); + $data['data_insurance_item']= $query->result(); + + $sql="select * from hc_insurance where id>1"; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $this->load->view('item/item_profile_V',$data); + } + + public function UpdateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + + $data = array( + 'itype' => $this->input->post('Item_Type'), + 'idesc' => $this->input->post('input_Item_name'), + 'amount' => $this->input->post('input_amount'), + 'update_date' => date('Y-m-d H:i:s') + ); + $old_id=$this->input->post('p_id'); + $update=$this->item_M->update($data,$old_id); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function AddRecord() + { + $sql="select * from hc_item_type"; + $query = $this->db->query($sql); + $data['data_item_type']= $query->result(); + + $this->load->view('item/item_create_V',$data); + } + + + public function AddItemTypeRecord() + { + $this->load->view('item/item_type_create'); + } + + public function CreateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + $data = array( + 'itype' => $this->input->post('Item_Type'), + 'idesc' => $this->input->post('input_Item_name'), + 'amount' => $this->input->post('input_amount'), + 'update_date' => date('Y-m-d H:i:s') + ); + + $inser_id=$this->item_M->insert($data); + + if($inser_id>0) + { + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function AddInsuranceItemRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + $data = array( + 'hc_items_id' => $this->input->post('p_id'), + 'hc_insurance_id' => $this->input->post('ins_company_name'), + 'amount1' => $this->input->post('input_amount'), + 'code' => $this->input->post('input_item_code') + ); + + $inser_id=$this->item_M->insert_in_item($data); + + if($inser_id>0) + { + $sql="select * from v_insurance_item_list where c_item_id=".$this->input->post('p_id'); + $query = $this->db->query($sql); + $data_insurance_item= $query->result(); + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data_insurance_item); ++$i) { + echo ' + + + + + '; + } + echo '
Company NameAmountCodeAction
'.$data_insurance_item[$i]->ins_company_name.''.$data_insurance_item[$i]->i_amount.''.$data_insurance_item[$i]->code.'
'; + } + + } + + public function remove_record_item() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + $data = array( + 'isdelete' => $this->input->post('in_remove_id') + ); + + $inser_id=$this->item_M->delete_in_item($data,$this->input->post('in_remove_id')); + + if($inser_id>0) + { + $sql="select * from v_insurance_item_list where c_item_id=".$this->input->post('p_id'); + $query = $this->db->query($sql); + $data_insurance_item= $query->result(); + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data_insurance_item); ++$i) { + echo ' + + + + + '; + } + echo '
Company NameAmountCodeAction
'.$data_insurance_item[$i]->ins_company_name.''.$data_insurance_item[$i]->i_amount.''.$data_insurance_item[$i]->code.'
'; + } + + } + + + public function _render_page($view, $data=null, $returnhtml=false)//I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data: $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html;//This will return html on 3rd argument being true + } + + + public function CreateItemTypeRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + $data = array( + 'is_ipd_opd' => $this->input->post('Item_Type_ipd'), + 'group_desc' => $this->input->post('input_Item_type') + ); + + $inser_id=$this->item_M->insert_type($data); + + if($inser_id>0) + { + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function UpdateItemTypeRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + + $data = array( + 'is_ipd_opd' => $this->input->post('Item_Type_ipd'), + 'group_desc' => $this->input->post('input_Item_type') + ); + + $old_id=$this->input->post('itemtype_id'); + $update=$this->item_M->update_type($data,$old_id); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Item_IPD.php b/old_code_ci3/controllers/Item_IPD.php new file mode 100644 index 0000000..63d053e --- /dev/null +++ b/old_code_ci3/controllers/Item_IPD.php @@ -0,0 +1,354 @@ +load->model('Item_ipd_M'); + } + + public function search_itemtype() + { + $sql = "SELECT * FROM ipd_item_type + order by group_desc"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item_ipd/item_type_search_v',$data); + } + + public function search_adv($itype_id=1) + { + + $sql = "SELECT i.*,t.group_desc FROM ipd_items i join ipd_item_type t on i.itype=itype_id where itype=$itype_id"; + $query = $this->db->query($sql); + $data= $query->result(); + echo ' Print

'; + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data); ++$i) { + echo ' + + + + + '; + } + + echo ' + + + + + + + + +
GroupCharge NameAmount
'.$data[$i]->group_desc.''.$data[$i]->idesc.''.$data[$i]->amount.' + +
GroupCharge NameAmount
'; + echo ""; + + } + + public function search() + { + $sql = "SELECT * FROM ipd_item_type + order by group_desc"; + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $sql = "SELECT i.*,t.group_desc + FROM ipd_items i join ipd_item_type t on i.itype=itype_id where itype=1"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item_ipd/item_search_V',$data); + + } + + public function search_print($itype_id=1) + { + $sql = "select m.id AS id,m.itype AS itype,m.idesc AS idesc,m.idesc_detail AS idesc_detail, + m.amount AS amount,t.itype_id AS itype_id, + t.group_desc AS group_desc, + 'IPD' AS isIPD_OPD + from (ipd_items m join ipd_item_type t on((m.itype = t.itype_id))) + where m.itype=".$itype_id." order by group_desc"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item_ipd/item_item_list',$data); + + } + + public function item_all_print() + { + $sql = "select m.id AS id,m.itype AS itype,m.idesc AS idesc,m.idesc_detail AS idesc_detail, + m.amount AS amount,t.itype_id AS itype_id, + t.group_desc AS group_desc, + 'IPD' AS isIPD_OPD + from (ipd_items m join ipd_item_type t on((m.itype = t.itype_id))) + order by group_desc"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $this->load->view('item_ipd/item_item_list',$data); + + } + + function itemtype_record($id) + { + $sql = "SELECT * + FROM ipd_item_type where itype_id='".$id."' order by group_desc"; + $query = $this->db->query($sql); + $data['data_item']= $query->result(); + + $this->load->view('item_ipd/item_type_profile',$data); + } + + function item_record($id) + { + + $sql = "SELECT i.*,t.group_desc + FROM ipd_items i join ipd_item_type t on i.itype=itype_id where id=$id"; + $query = $this->db->query($sql); + $data['data_item']= $query->result(); + + $sql="select * from ipd_item_type"; + $query = $this->db->query($sql); + $data['data_item_type']= $query->result(); + + $sql="select * from v_insurance_ipd_item_list where c_item_id=".$id; + $query = $this->db->query($sql); + $data['data_insurance_item']= $query->result(); + + $sql="select * from hc_insurance where id>1"; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $this->load->view('item_ipd/item_profile_V',$data); + } + + public function UpdateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $data = array( + 'itype' => $this->input->post('Item_Type'), + 'idesc' => $this->input->post('input_Item_name'), + 'amount' => $this->input->post('input_amount'), + 'update_date' => date('Y-m-d H:i:s') + ); + $old_id=$this->input->post('p_id'); + $update=$this->Item_ipd_M->update($data,$old_id); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function AddRecord() + { + $sql="select * from ipd_item_type"; + $query = $this->db->query($sql); + $data['data_item_type']= $query->result(); + + $this->load->view('item_ipd/item_create_V',$data); + } + + + public function AddItemTypeRecord() + { + $this->load->view('item_ipd/item_type_create'); + } + + public function CreateRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $data = array( + 'itype' => $this->input->post('Item_Type'), + 'idesc' => $this->input->post('input_Item_name'), + 'amount' => $this->input->post('input_amount'), + 'update_date' => date('Y-m-d H:i:s') + ); + + $inser_id=$this->Item_ipd_M->insert($data); + + if($inser_id>0) + { + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function AddInsuranceItemRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_ipd_M'); + $data = array( + 'hc_items_id' => $this->input->post('p_id'), + 'hc_insurance_id' => $this->input->post('ins_company_name'), + 'amount1' => $this->input->post('input_amount'), + 'code' => $this->input->post('input_item_code') + ); + + $inser_id=$this->item_ipd_M->insert_in_item($data); + + if($inser_id>0) + { + $sql="select * from v_insurance_ipd_item_list where c_item_id=".$this->input->post('p_id'); + $query = $this->db->query($sql); + $data_insurance_item= $query->result(); + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data_insurance_item); ++$i) { + echo ' + + + + + '; + } + echo '
Company NameAmountCodeAction
'.$data_insurance_item[$i]->ins_company_name.''.$data_insurance_item[$i]->i_amount.''.$data_insurance_item[$i]->code.'
'; + } + + } + + public function remove_record_item() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_ipd_M'); + $data = array( + 'isdelete' => $this->input->post('in_remove_id') + ); + + $inser_id=$this->item_ipd_M->delete_in_item($data,$this->input->post('in_remove_id')); + + $sql="select * from v_insurance_ipd_item_list where c_item_id=".$this->input->post('p_id'); + $query = $this->db->query($sql); + $data_insurance_item= $query->result(); + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data_insurance_item); ++$i) { + echo ' + + + + + '; + } + echo '
Company NameAmountCodeAction
'.$data_insurance_item[$i]->ins_company_name.''.$data_insurance_item[$i]->i_amount.''.$data_insurance_item[$i]->code.'
'; + + } + + + + + public function _render_page($view, $data=null, $returnhtml=false)//I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data: $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html;//This will return html on 3rd argument being true + } + + + public function CreateItemTypeRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('item_M'); + $data = array( + 'group_desc' => $this->input->post('input_Item_type') + ); + + $inser_id=$this->Item_ipd_M->insert_type($data); + + if($inser_id>0) + { + + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function UpdateItemTypeRecord() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $data = array( + 'group_desc' => $this->input->post('input_Item_type') + ); + + $old_id=$this->input->post('itemtype_id'); + $update=$this->Item_ipd_M->update_type($data,$old_id); + + if($update>0) + { + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Lab_Admin.php b/old_code_ci3/controllers/Lab_Admin.php new file mode 100644 index 0000000..6f1edb6 --- /dev/null +++ b/old_code_ci3/controllers/Lab_Admin.php @@ -0,0 +1,3493 @@ +db->query($sql); + $data['labReport_master']= $query->result(); + + $this->load->view('PathLab_Report/lab_report_list',$data); + } + + public function report_ultrasound_list($modality=2) + { + $sql="select * from radiology_ultrasound_template where modality=".$modality; + $query = $this->db->query($sql); + $data['labReport_master']= $query->result(); + + $data['modality']=$modality; + + $this->load->view('PathLab_Report/ultrasound_template_list',$data); + } + + public function report_test_list($repo_id) + { + $sql="select j.id,r.mstRepoKey,t.mstTestKey,t.Test,t.TestID,t.Result,j.EOrder + from lab_repo r join lab_repotests j join lab_tests t + on r.mstRepoKey=j.mstRepoKey and j.mstTestKey=t.mstTestKey where r.mstRepoKey=".$repo_id." order by j.EOrder" ; + $query = $this->db->query($sql); + $data['lab_Rep_Item_List']= $query->result(); + + $data['mstRepoKey']=$repo_id; + + $this->load->view('PathLab_Report/lab_report_test_list',$data); + } + + public function test_search_page($repo_id) + { + $data['repo_id']=$repo_id; + $this->load->view('PathLab_Report/lab_test_search',$data); + } + + public function test_parameter_load($mstTestKey,$mstRepoKey) + { + $sql="select * from lab_tests where mstTestKey=".$mstTestKey ; + $query = $this->db->query($sql); + $data['lab_test_parameter']= $query->result(); + + $sql="select *,if(option_bold=1,'Bold','') as option_bold_str from lab_tests_option where mstTestKey=".$mstTestKey. " order by sort_id " ; + $query = $this->db->query($sql); + $data['lab_test_option']= $query->result(); + + $data['mstRepoKey']=$mstRepoKey; + + $this->load->view('PathLab_Report/lab_report_item_edit',$data); + } + public function remove_test_option($option_id,$id_key) + { + $this->db->delete("lab_tests_option", "id=".$option_id); + + $sql="select *,if(option_bold=1,'Bold','') as option_bold_str from lab_tests_option where mstTestKey=".$id_key. " order by sort_id " ; + $query = $this->db->query($sql); + $lab_test_option= $query->result(); + + $option_content=' + + + + + + + + + '; + for ($i = 0; $i < count($lab_test_option); ++$i) { + $option_content=$option_content.' + + + + + '; + } + $option_content=$option_content.'
#CodeBoldAction
'.$lab_test_option[$i]->sort_id.''.$lab_test_option[$i]->option_value.''.$lab_test_option[$i]->option_bold_str.' +
+ + '; + + $option_current=$lab_test_option[$i]->id; + $sort_current=$lab_test_option[$i]->sort_id; + + if($i+1 < count($lab_test_option)) + { + $option_next=$lab_test_option[$i+1]->id; + $sort_next=$lab_test_option[$i+1]->sort_id; + + $option_content=$option_content. ''; + } + + if($i>0) + { + $option_prev=$lab_test_option[$i-1]->id; + $sort_prev=$lab_test_option[$i-1]->sort_id; + + $option_content=$option_content. ''; + + } + + $option_content=$option_content.'
+
'; + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + + $rvar=array( + 'insert_id' => 1, + 'showcontent'=> $showcontent, + 'option_content' => $option_content + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function test_parameter_edit() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('PathLab_M'); + + $id_key=$this->input->post('mstTestKey'); + + $sql="select * from lab_tests where mstTestKey=".$id_key; + $query = $this->db->query($sql); + $lab_tests= $query->result(); + + $TestID=$lab_tests[0]->TestID; + $TestID_post=$this->input->post('input_test_code'); + + $test_chk=''; + + if($TestID!=$TestID_post || $TestID=='') + { + $test_chk='|is_unique[lab_tests.TestID]'; + } + + $FormRules = array( + array( + 'field' => 'input_Test_name', + 'label' => 'Test Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_test_code', + 'label' => 'Test Code', + 'rules' => 'required|min_length[1]|max_length[30]'.$test_chk + ) + ); + + $this->form_validation->set_rules($FormRules); + + $update_value=1; + $showcontent=""; + if ($this->form_validation->run() == TRUE) + { + $idChecked=$this->input->post('input_isChecked'); + + $data = array( + 'Test'=> $this->input->post('input_Test_name'), + 'TestID'=> $this->input->post('input_test_code'), + 'Result'=> $this->input->post('input_Default'), + 'Formula'=> $this->input->post('input_Formula'), + 'VRule'=> $this->input->post('input_Validation'), + 'VMsg'=> $this->input->post('input_Message'), + 'Unit'=> $this->input->post('input_Unit'), + 'FixedNormals'=> $this->input->post('input_Fixed'), + 'isGenderSpecific'=> $idChecked, + 'FixedNormalsWomen'=> $this->input->post('input_FixedNormalsWomen') + ); + + $this->PathLab_M->update_item_parameter($data,$id_key); + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + }else{ + $update_value=0; + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + + + $rvar=array( + 'update_value' => $update_value, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + + } + + public function test_parameter_add() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('PathLab_M'); + + $id_key=$this->input->post('mstTestKey'); + $mstRepoKey=$this->input->post('mstRepoKey'); + + $sql="select * from lab_tests where mstTestKey=".$id_key; + $query = $this->db->query($sql); + $lab_tests= $query->result(); + + $TestID=""; + + if(count($lab_tests)>0) + { + $TestID=$lab_tests[0]->TestID; + } + + $TestID_post=$this->input->post('input_test_code'); + + $test_chk=''; + + if($TestID!=$TestID_post || $TestID=='') + { + $test_chk='|is_unique[lab_tests.TestID]'; + } + + $FormRules = array( + array( + 'field' => 'input_Test_name', + 'label' => 'Test Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_test_code', + 'label' => 'Test Code', + 'rules' => 'required|min_length[1]|max_length[30]'.$test_chk + ) + ); + + $this->form_validation->set_rules($FormRules); + + $insert_id=0; + $showcontent=""; + if ($this->form_validation->run() == TRUE) + { + $udata = array( + 'Test'=> $this->input->post('input_Test_name'), + 'TestID'=> $this->input->post('input_test_code'), + 'Result'=> $this->input->post('input_Default'), + 'Formula'=> $this->input->post('input_Formula'), + 'VRule'=> $this->input->post('input_Validation'), + 'VMsg'=> $this->input->post('input_Message'), + 'Unit'=> $this->input->post('input_Unit'), + 'FixedNormals'=> $this->input->post('input_Fixed') + ); + + $insert_id=$this->PathLab_M->insert_item_parameter($udata,$id_key); + + $sql="select Max(EOrder) as MEOrder from lab_repotests where mstRepoKey=".$mstRepoKey; + $query = $this->db->query($sql); + $data['lab_repotests']= $query->result(); + + $MEOrder=0; + if(count($data['lab_repotests'])>0) + { + $MEOrder=$data['lab_repotests'][0]->MEOrder; + } + + if($MEOrder === NULL) + { + $MEOrder=1; + }else{ + $MEOrder=$MEOrder+1; + } + + $udata = array( + 'mstRepoKey'=> $mstRepoKey, + 'mstTestKey'=> $insert_id, + 'EOrder'=> $MEOrder + ); + + $sortorder_insert_id=$this->PathLab_M->insert_item_sortorder($udata); + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + }else{ + $insert_id=0; + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + + $rvar=array( + 'insert_id' => $insert_id, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + + } + + public function test_parameter_option_add() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('PathLab_M'); + + $FormRules = array( + array( + 'field' => 'input_op_value', + 'label' => 'Code', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + $sort_id=1; + $id_key=$this->input->post('mstTestKey'); + + $sql="select Max(sort_id) as msort_id from lab_tests_option where mstTestKey=".$id_key; + $query = $this->db->query($sql); + $lab_tests_option= $query->result(); + + if(count($lab_tests_option)>0) + { + $sort_id=$lab_tests_option[0]->msort_id; + $sort_id=$sort_id+1; + } + + $insert_id=0; + $showcontent=""; + $option_content=""; + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'mstTestKey'=> $id_key, + 'sort_id'=> $sort_id, + 'option_value'=> $this->input->post('input_op_value'), + 'option_text'=> $this->input->post('input_op_value'), + 'option_bold'=> $this->input->post('chk_bold') + ); + + $insert_id=$this->PathLab_M->insert_item_parameter_option($data); + + $sql="select *,if(option_bold=1,'Bold','') as option_bold_str from lab_tests_option where mstTestKey=".$id_key. " order by sort_id " ; + $query = $this->db->query($sql); + $lab_test_option= $query->result(); + + $option_content=' + + + + + + + + + '; + for ($i = 0; $i < count($lab_test_option); ++$i) { + + $option_content=$option_content.' + + + + + '; + } + $option_content=$option_content.'
#CodeBoldAction
'.$lab_test_option[$i]->sort_id.''.$lab_test_option[$i]->option_value.''.$lab_test_option[$i]->option_bold_str.'
+ '; + + $option_current=$lab_test_option[$i]->id; + $sort_current=$lab_test_option[$i]->sort_id; + + if($i+1 < count($lab_test_option)) + { + $option_next=$lab_test_option[$i+1]->id; + $sort_next=$lab_test_option[$i+1]->sort_id; + + $option_content=$option_content. ''; + } + + if($i>0) + { + $option_prev=$lab_test_option[$i]->id; + $sort_prev=$lab_test_option[$i]->sort_id; + + $option_content=$option_content. ''; + + } + + $option_content=$option_content.'
+
'; + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + }else{ + $$insert_id=0; + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + $rvar=array( + 'insert_id' => $insert_id, + 'showcontent'=> $showcontent, + 'option_content' => $option_content + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function change_sort($id_key,$option_id,$current,$change_option_id,$change) + { + $this->load->model('PathLab_M'); + + $udata = array( + 'sort_id'=> 0 + ); + + $this->PathLab_M->update_item_parameter_option($udata,$option_id); + + $udata = array( + 'sort_id'=> $current + ); + $this->PathLab_M->update_item_parameter_option($udata,$change_option_id); + + + $udata = array( + 'sort_id'=> $change + ); + $this->PathLab_M->update_item_parameter_option($udata,$option_id); + + + + $sql="select *,if(option_bold=1,'Bold','') as option_bold_str from lab_tests_option where mstTestKey=".$id_key. " order by sort_id " ; + $query = $this->db->query($sql); + $lab_test_option= $query->result(); + + $option_content=' + + + + + + + + + '; + for ($i = 0; $i < count($lab_test_option); ++$i) { + $option_content=$option_content.' + + + + + '; + } + $option_content=$option_content.'
#CodeBoldAction
'.$lab_test_option[$i]->sort_id.''.$lab_test_option[$i]->option_value.''.$lab_test_option[$i]->option_bold_str.' +
+ '; + + $option_current=$lab_test_option[$i]->id; + $sort_current=$lab_test_option[$i]->sort_id; + + if($i+1 < count($lab_test_option)) + { + $option_next=$lab_test_option[$i+1]->id; + $sort_next=$lab_test_option[$i+1]->sort_id; + + $option_content=$option_content. ''; + } + + if($i>0) + { + $option_prev=$lab_test_option[$i-1]->id; + $sort_prev=$lab_test_option[$i-1]->sort_id; + + $option_content=$option_content. ''; + + } + + $option_content=$option_content.'
+
'; + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + + $rvar=array( + 'insert_id' => 1, + 'showcontent'=> $showcontent, + 'option_content' => $option_content + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function change_sort_item($repo_id,$option_id,$current,$change_option_id,$change) + { + $this->load->model('PathLab_M'); + + $udata = array( + 'EOrder'=> 0 + ); + $this->PathLab_M->update_item_sortorder($udata,$option_id); + + $udata = array( + 'EOrder'=> $current + ); + $this->PathLab_M->update_item_sortorder($udata,$change_option_id); + + $udata = array( + 'EOrder'=> $change + ); + $this->PathLab_M->update_item_sortorder($udata,$option_id); + + $sql="select j.id,r.mstRepoKey,t.mstTestKey,t.Test,t.TestID,t.Result,j.EOrder + from lab_repo r join lab_repotests j join lab_tests t + on r.mstRepoKey=j.mstRepoKey and j.mstTestKey=t.mstTestKey where r.mstRepoKey=".$repo_id." order by j.EOrder" ; + $query = $this->db->query($sql); + $data['lab_Rep_Item_List']= $query->result(); + + $data['mstRepoKey']=$repo_id; + + $this->load->view('PathLab_Report/lab_report_test_list',$data); + + } + + + public function reportedit_load($repo_id=0) + { + $sql="select * from lab_repo where mstRepoKey=".$repo_id; + $query = $this->db->query($sql); + $data['labReport_master']= $query->result(); + + $item_id=0; + + if($repo_id>0) + { + $item_id=$data['labReport_master'][0]->charge_id; + } + + //$sql="select * from hc_items where itype=5 and id not in (select charge_id from lab_repo where charge_id>0 and charge_id<>".$item_id.")"; + $sql="select * from hc_items where itype in (5,30,6) and id not in (select charge_id from lab_repo where charge_id>0 and charge_id<>".$item_id.") order by idesc "; + + $query = $this->db->query($sql); + $data['hc_items']= $query->result(); + + $sql="select * from lab_rgroups "; + $query = $this->db->query($sql); + $data['lab_rgroups']= $query->result(); + + $sql="select j.id,r.mstRepoKey,t.mstTestKey,t.Test,t.TestID,t.Result,j.EOrder + from lab_repo r join lab_repotests j join lab_tests t + on r.mstRepoKey=j.mstRepoKey and j.mstTestKey=t.mstTestKey where r.mstRepoKey=".$repo_id." order by j.EOrder" ; + $query = $this->db->query($sql); + $data['lab_Rep_Item_List']= $query->result(); + + $sql="select * from color "; + $query = $this->db->query($sql); + $data['color_name']= $query->result(); + + $data['repo_id']=$repo_id; + + $this->load->view('PathLab_Report/lab_report_edit',$data); + } + + public function reportedit_ultrasound_load($modality=2,$repo_id=0) + { + $sql="select * from radiology_ultrasound_template where modality=$modality and id=".$repo_id; + $query = $this->db->query($sql); + $data['labReport_master']= $query->result(); + + $item_id=0; + + if($repo_id>0) + { + $item_id=$data['labReport_master'][0]->charge_id; + } + + + + $sql="select * from hc_items where itype=$modality order by idesc "; + + $query = $this->db->query($sql); + $data['hc_items']= $query->result(); + + $data['repo_id']=$repo_id; + + $data['modality']=$modality; + + $this->load->view('PathLab_Report/ultrasound_report_edit',$data); + } + + public function report_update() + { + + $this->load->model('PathLab_M'); + + $id_key=$this->input->post('repo_id'); + + $sql="select * from lab_repo where mstRepoKey=".$id_key; + $query = $this->db->query($sql); + $lab_repo= $query->result(); + + $repo_title=$lab_repo[0]->Title; + $repo_title_post=$this->input->post('input_Reportname'); + + $repo_chk=''; + + if($repo_title!=$repo_title_post) + { + $repo_chk='|is_unique[lab_repo.Title]'; + } + + $charge_id=$lab_repo[0]->charge_id; + $charge_id_post=$this->input->post('charge_id'); + $charge_chk=''; + + if($charge_id_post>0) + { + if($charge_id_post!=$charge_id) + { + $charge_chk='|is_unique[lab_repo.charge_id]'; + } + } + $update_record=0; + + $FormRules = array( + array( + 'field' => 'input_Reportname', + 'label' => 'Name', + 'rules' => 'required|min_length[1]|max_length[100]'.$repo_chk + ), + array( + 'field' => 'charge_id', + 'label' => 'Charge Name', + 'rules' => 'required|min_length[1]|max_length[30]'.$charge_chk + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'Title'=> $this->input->post('input_Reportname'), + 'GrpKey'=> $this->input->post('group_id'), + 'charge_id'=> $this->input->post('charge_id'), + 'HTMLData'=> $this->input->post('HTMLData'), + ); + + $this->PathLab_M->update_report($data,$id_key); + + $update_record=1; + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + + $rvar=array( + 'update_record' => $update_record, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function report_ultrasound_insert($modality) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('PathLab_M'); + + $FormRules = array( + array( + 'field' => 'input_Reportname', + 'label' => 'Name', + 'rules' => 'required|min_length[1]|max_length[100]|is_unique[lab_repo.Title]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + $insertid=0; + $showcontent=""; + if ($this->form_validation->run() == TRUE) + { + $id_key=$this->input->post('repo_id'); + $data = array( + 'template_name'=> $this->input->post('input_Reportname'), + 'title'=> $this->input->post('group_id'), + 'charge_id'=> $this->input->post('charge_id'), + 'Findings'=> $this->input->post('HTMLData'), + 'Impression'=> $this->input->post('Impression'), + 'modality'=> $modality + ); + $insertid=$this->PathLab_M->insert_ultrasound_report($data); + $showcontent="Data Saved successfully"; + + }else{ + $showcontent =validation_errors(); + } + + $rvar=array( + 'insertid' => $insertid, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function report_ultrasound_update($modality=2) + { + + $this->load->model('PathLab_M'); + + $id_key=$this->input->post('repo_id'); + + $sql="select * from radiology_ultrasound_template where id=".$id_key; + $query = $this->db->query($sql); + $lab_repo= $query->result(); + + $repo_title=$lab_repo[0]->title; + $repo_title_post=$this->input->post('input_Reportname'); + + $repo_chk=''; + + $charge_id_post=$this->input->post('charge_id'); + + + $update_record=0; + + $FormRules = array( + array( + 'field' => 'input_Reportname', + 'label' => 'Name', + 'rules' => 'required|min_length[1]|max_length[100]' + ), + array( + 'field' => 'charge_id', + 'label' => 'Charge Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'template_name'=> $this->input->post('input_Reportname'), + 'title'=> $this->input->post('group_id'), + 'charge_id'=> $charge_id_post, + 'Findings'=> $this->input->post('HTMLData'), + 'Impression'=> $this->input->post('Impression'), + 'modality'=> $modality + ); + + $this->PathLab_M->update_ultrasound_report($data,$id_key); + + $update_record=1; + + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + + $rvar=array( + 'update_record' => $update_record, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function report_insert() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('PathLab_M'); + + $FormRules = array( + array( + 'field' => 'input_Reportname', + 'label' => 'Name', + 'rules' => 'required|min_length[1]|max_length[100]|is_unique[lab_repo.Title]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + $insertid=0; + $showcontent=""; + if ($this->form_validation->run() == TRUE) + { + $id_key=$this->input->post('repo_id'); + $data = array( + 'Title'=> $this->input->post('input_Reportname'), + 'GrpKey'=> $this->input->post('group_id'), + 'charge_id'=> $this->input->post('charge_id'), + ' HTMLData'=> $this->input->post('HTMLData') + ); + $insertid=$this->PathLab_M->insert_report($data); + $showcontent=Show_Alert('success','Saved','Data Saved successfully'); + + + }else{ + $showcontent =Show_Alert('danger','Error',validation_errors()); + } + + $rvar=array( + 'insertid' => $insertid, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + + public function lab_master() + { + $this->load->view('PathLab_Report/lab_main'); + } + + public function lab_path($lab_type) + { + $data['lab_type']=$lab_type; + $this->load->view('PathLab_Report/pathlab_request_list',$data); + } + + + public function Entry_Update() + { + $this->load->model('PathLab_M'); + + $test_id=$this->input->post('test_id'); + $test_value=$this->input->post('test_value'); + + $udata = array( + 'lab_test_value'=> $test_value + ); + $this->PathLab_M->update_test_entry($udata,$test_id); + + + $sql="select lab_test_value from lab_request_item where id=".$test_id; + $query = $this->db->query($sql); + $data_value= $query->result(); + + echo $data_value[0]->lab_test_value; + + } + + public function Remark_Update($req_id) + { + $this->load->model('PathLab_M'); + + $udata = array( + 'Remark'=> $this->input->post('HTMLData') + ); + + $this->PathLab_M->update_test_request($udata,$req_id); + + echo "Saved"; + + } + + public function Final_Update($req_id) + { + $this->load->model('PathLab_M'); + + $udata = array( + 'Report_Data'=> $this->input->post('HTMLData') + ); + + $this->PathLab_M->update_test_request($udata,$req_id); + + echo "Saved"; + + } + + public function Report_Final_print($inv_req_id) + { + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name.'['.$user_id.']['.date('d-m-Y h:m:s').']'; + + $udata = array( + 'Report_Data'=> $this->input->post('HTMLData'), + 'report_update'=> $user_name + ); + + $sortorder_insert_id=$this->PathLab_M->update_invoice_report($udata,$inv_req_id); + echo 'Report Update'; + + } + + public function Report_single_print($lab_req_id) + { + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name.'['.$user_id.']['.date('d-m-Y h:m:s').']'; + + $udata = array( + 'Report_Data'=> $this->input->post('HTMLData'), + 'report_update'=> $user_name + ); + + $sortorder_insert_id=$this->PathLab_M->update_test_request($udata,$lab_req_id); + echo 'Report Update'; + + + } + + public function confirm_report($req_id) + { + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $udata = array( + 'confirm_by'=> $user_name, + 'status'=>2 + ); + + $this->PathLab_M->update_test_request($udata,$req_id); + + echo "Verified and Ready for Print"; + + } + + + + public function create_report($req_id) { + + $this->load->model('PathLab_M'); + + $sql="select * from lab_request where id=".$req_id; + $query = $this->db->query($sql); + $data_lab_request= $query->result(); + + $p_id=$data_lab_request[0]->patient_id; + + $sql="select * from patient_master_exten where id=$p_id"; + $query = $this->db->query($sql); + $data_patient_data= $query->result(); + + $gender=$data_patient_data[0]->gender; + + + $sql="select d.mstTestKey,d.Test,d.TestID,d.Result,d.Formula,d.VRule,d.VMsg,d.Unit, d.FixedNormals, + i.lab_test_value,i.lab_test_remark,i.id ,s.EOrder,d.isGenderSpecific,d.FixedNormalsWomen, + group_concat(concat(o.id,':',o.option_text,':',o.option_value) ORDER BY o.sort_id) as option_value + from (lab_request_item i join lab_tests d join lab_repotests s + on i.lab_test_id=d.mstTestKey and d.mstTestKey=s.mstTestKey and i.lab_repo_id=s.mstRepoKey) + left join lab_tests_option o on d.mstTestKey=o.mstTestKey + where i.lab_request_id=".$req_id." group by d.mstTestKey order by s.EOrder"; + $query = $this->db->query($sql); + $data_lab_test_list= $query->result(); + + $sql="select mstRepoKey,Title,HTMLData,GrpKey,charge_id,RepoGrp + from lab_repo join lab_rgroups on lab_repo.GrpKey=lab_rgroups.mstRGrpKey + where mstRepoKey=".$data_lab_request[0]->lab_repo_id; + + + $query = $this->db->query($sql); + $data_report_format= $query->result(); + + $sql="select * from invoice_master where attach_type=0 and id=".$data_lab_request[0]->charge_id; + $query = $this->db->query($sql); + $data_invoice_master= $query->result(); + + $sql="select id from lab_invoice_request where invoice_id=".$data_lab_request[0]->charge_id." and lab_type=".$data_lab_request[0]->lab_type ; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + if(count($data_report_format)>0) + { + + $Report_Head_H3='

'.$data_report_format[0]->Title.'

'; + $Report_string=$data_report_format[0]->HTMLData; + + }else{ + + $Report_Head_H3='

'.$data_lab_request[0]->report_name.'

'; + $Report_string=""; + } + + $Report_Header=' + + + + + +
'.$Report_Head_H3.'
+ '; + + + $Report_Footer=$data_lab_request[0]->Remark; + + //update report_string with test parameter + + $lab_test_array=array(); + for($j = 0; $j < count($data_lab_test_list); ++$j) { + $lab_test_array[$data_lab_test_list[$j]->TestID]=$data_lab_test_list[$j]->lab_test_value; + } + + + for ($i = 0; $i < count($data_lab_test_list); ++$i) { + + $FixedNormals=$data_lab_test_list[$i]->FixedNormals; + $isGenderSpecific=$data_lab_test_list[$i]->isGenderSpecific; + $FixedNormalsWomen=$data_lab_test_list[$i]->FixedNormalsWomen; + + $Test_Formula=$data_lab_test_list[$i]->Formula; + + //$LabTestValue=$data_lab_test_list[$i]->lab_test_value; + + if(strlen($Test_Formula)>0){ + foreach($lab_test_array as $key=>$value){ + if(is_numeric($value)) + { + $Test_Formula=str_replace('{'.$key.'}',$value,$Test_Formula); + }else{ + $Test_Formula=str_replace('{'.$key.'}','0',$Test_Formula); + } + + } + + //echo $Test_Formula; + + $LabTestValue=Round(cal_exp(trim($Test_Formula)),2); + + + }else{ + $LabTestValue=$data_lab_test_list[$i]->lab_test_value; + } + + + if($isGenderSpecific==1) + { + if($gender==1) + { + if(strlen($FixedNormals)>0 && is_numeric($LabTestValue)) + { + $FixedNormals_array=explode('-',$FixedNormals); + + if(is_array($FixedNormals_array)) + { + $FixedNormals_min=$FixedNormals_array[0]; + $FixedNormals_max=$FixedNormals_array[1]; + if(is_numeric($FixedNormals_min)&&is_numeric($FixedNormals_min)) + { + if($LabTestValue>=$FixedNormals_min && $LabTestValue<=$FixedNormals_max ) + { + + }else{ + $LabTestValue=''.$LabTestValue.''; + } + } + } + + } + }else{ + if(strlen($FixedNormalsWomen)>0 && is_numeric($LabTestValue)) + { + $FixedNormals_array=explode('-',$FixedNormalsWomen); + + if(is_array($FixedNormals_array)) + { + $FixedNormals_min=$FixedNormals_array[0]; + $FixedNormals_max=$FixedNormals_array[1]; + if(is_numeric($FixedNormals_min)&&is_numeric($FixedNormals_max)) + { + if($LabTestValue>=$FixedNormals_min && $LabTestValue<=$FixedNormals_max ) + { + + }else{ + $LabTestValue=''.$LabTestValue.''; + } + } + } + + } + } + + }else{ + if(strlen($FixedNormals)>0 && is_numeric($LabTestValue)) + { + $FixedNormals_array=explode('-',$FixedNormals); + + if(is_array($FixedNormals_array)) + { + $FixedNormals_min=$FixedNormals_array[0]; + $FixedNormals_max=$FixedNormals_array[1]; + if(is_numeric($FixedNormals_min)&&is_numeric($FixedNormals_min)) + { + if($LabTestValue>=$FixedNormals_min && $LabTestValue<=$FixedNormals_max ) + { + + }else{ + $LabTestValue=''.$LabTestValue.''; + } + } + } + + } + } + + $Report_string=str_replace('{'.$data_lab_test_list[$i]->TestID.'}',$LabTestValue,$Report_string); + } + + $complete_report=$Report_Header.$Report_string.$Report_Footer; + + $udata = array( + 'Report_Data'=> $complete_report, + 'status'=>1, + 'reported_time'=> date('Y-m-d H:i:s') + ); + + $this->PathLab_M->update_test_request($udata,$req_id); + + $udata = array( + 'reported_time'=> date('Y-m-d H:i:s') + ); + $this->PathLab_M->update_invoice_report($udata,$lab_invoice_request[0]->id); + + //echo 'Report Created'.$lab_invoice_request[0]->id; + + redirect('Lab_Admin/show_report_final/'.$req_id); + } + + + + public function show_report_final($req_id) + { + $sql="select * from lab_request where id=".$req_id; + $query = $this->db->query($sql); + $data['report_format']= $query->result(); + + $this->load->view('PathLab_Report/lab_final_report_show',$data); + } + + public function report_compile1($inv_id,$lab_type) + { + $sql="select l.*,g.RepoGrp, + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + FROM (lab_request l join lab_repo r on l.lab_repo_id=r.mstRepoKey) + left join lab_rgroups g on r.GrpKey=g.mstRGrpKey + where l.print_combine=1 and status=2 and l.charge_id=".$inv_id." and l.lab_type=".$lab_type." order by g.sort_order"; + + $query = $this->db->query($sql); + $data_lab_request= $query->result(); + + $sql="Select max(report_edit_req_no) as no + from lab_request where charge_id=".$inv_id." and lab_type=".$lab_type." "; + $query = $this->db->query($sql); + $data_lab_request_edit= $query->result(); + + if($data_lab_request_edit[0]->no>0) + { + $data_lab_request_edit_str='/'.$data_lab_request_edit[0]->no; + $note_edit_str='Caution : Please ignore the earlier report.'; + }else{ + $data_lab_request_edit_str=''; + $note_edit_str=''; + } + + + $sql="select * , + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + from lab_invoice_request l + where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + if(count($data_lab_request)==0) + { + exit( 'No Record Ready for print Report'); + } + + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * + from patient_master_exten p where id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $data_patient_master= $query->result(); + + if($invoice_master[0]->refer_by_id>0) + { + $sql="select * from doctor_master where id=".$invoice_master[0]->refer_by_id; + $query = $this->db->query($sql); + $doc_master= $query->result(); + $rdoc_name='Dr.'.$doc_master[0]->p_fname; + }else{ + $rdoc_name=$invoice_master[0]->refer_by_other; + } + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + + + $insurance_case_id=$invoice_master[0]->insurance_case_id; + + $org_ID=''; + + if($insurance_case_id>1) + { + $sql="select o.* ,i.short_name + from organization_case_master o join hc_insurance i on o.insurance_id=i.id + where o.id=".$insurance_case_id; + $query = $this->db->query($sql); + $org_master= $query->result(); + + if(count($org_master)>0){ + $org_ID='Org. ID: '.$org_master[0]->case_id_code.'
'; + $org_ID.='Org.Name :'.$org_master[0]->short_name.'
'; + } + } + + $ipd_id=''; + + if(count($ipd_master)>0) + { + $ipd_id='IPD No. : '. $ipd_master[0]->ipd_code.'
'; + } + + //$print_datetime=$data_lab_request[0]->Request_Date; + + $print_datetime=date('d-m-Y h:i:s A'); + + + if($lab_invoice_request[0]->collected_time<>'') + { + $Collection_data='
+ Collected : '.$lab_invoice_request[0]->str_collected_time.'
+ Reported : '.$lab_invoice_request[0]->str_reported_time; + } + + $Header=' + + + + + + '; + + $Header.=' +
+ Inovice ID : '.$invoice_master[0]->invoice_code.' '.$data_lab_request_edit_str.'
+ Patient Name : '.$data_patient_master[0]->title.' '.$data_patient_master[0]->p_fname.'
+ '.$data_patient_master[0]->p_relative.' '.$data_patient_master[0]->p_rname.'
+ Age/Sex : '.$data_patient_master[0]->str_age.'/'.$data_patient_master[0]->xgender.'
+ UHID : '.$data_patient_master[0]->p_code.'
+
'.$ipd_id.$org_ID.' + Print Date : '.$print_datetime.'
+ '.$Collection_data.' + Reffered By : '.$rdoc_name.'
+
'.$note_edit_str.' +
'; + + $RawData=""; + $group_name=''; + $first_header=1; + + for($i=0;$iRepoGrp==$group_name) + { + $groupHead=''; + }else{ + if($first_header==0) + { + //$groupHead='
'; + $groupHead=''; + }else{ + $groupHead=''; + } + + $groupHead.=' +

'.$data_lab_request[$i]->RepoGrp.'

'; + + $first_header=0; + } + + $RawData=$RawData.$groupHead; + $RawData=$RawData.$data_lab_request[$i]->Report_Data; + + $group_name=$data_lab_request[$i]->RepoGrp; + + } + + $complete_report=$RawData; + + $inv_req_id=0; + if(count($lab_invoice_request)>0) + { + $inv_req_id=$lab_invoice_request[0]->id; + } + + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name.'['.$user_id.']['.date('d-m-Y h:m:s').']'; + + $udata = array( + 'report_data'=> $complete_report, + 'report_compile'=> $user_name, + 'report_header'=> $Header, + ); + + $sortorder_insert_id=$this->PathLab_M->update_invoice_report($udata,$inv_req_id); + echo 'Data Compile'; + + $filename = $inv_id.'-'.$lab_type.'-'.time() . '.pdf'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $lab_file_name=$folder_name.'/'.$filename; + + } + + public function report_compile($inv_id,$lab_type) + { + $sql="select l.*,g.RepoGrp, + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + FROM (lab_request l join lab_repo r on l.lab_repo_id=r.mstRepoKey) + left join lab_rgroups g on r.GrpKey=g.mstRGrpKey + where l.print_combine=1 and status=2 and l.charge_id=".$inv_id." and l.lab_type=".$lab_type." order by g.sort_order"; + + $query = $this->db->query($sql); + $data_lab_request= $query->result(); + + $sql="Select max(report_edit_req_no) as no + from lab_request where charge_id=".$inv_id." and lab_type=".$lab_type." "; + $query = $this->db->query($sql); + $data_lab_request_edit= $query->result(); + + if($data_lab_request_edit[0]->no>0) + { + $sql="SELECT GROUP_CONCAT(CONCAT_WS('/',l.log_type,l.log_Faults,l.comments,'Report:',r.report_name)) AS report_log + from lab_log l JOIN lab_request r ON l.lab_repo_id=r.id + WHERE r.charge_id=$inv_id AND r.lab_type=$lab_type"; + + $query = $this->db->query($sql); + $data_lab_edit_error= $query->result(); + + $report_log=''; + + if(count($data_lab_edit_error)>0){ + $report_log=$data_lab_edit_error[0]->report_log; + } + + $data_lab_request_edit_str='/'.$data_lab_request_edit[0]->no; + $note_edit_str='Caution : The previous report has been corrected. Please ignore the previous report.
Error Type : '.$report_log; + //$note_edit_str=''; + }else{ + $data_lab_request_edit_str=''; + $note_edit_str=''; + } + + + $sql="select * , + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + from lab_invoice_request l + where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + if(count($data_lab_request)==0) + { + exit( 'No Record Ready for print Report'); + } + + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * + from patient_master_exten p where id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $data_patient_master= $query->result(); + + + if($invoice_master[0]->refer_by_id>0) + { + $sql="select * from doctor_master where id=".$invoice_master[0]->refer_by_id; + $query = $this->db->query($sql); + $doc_master= $query->result(); + $rdoc_name='Dr.'.$doc_master[0]->p_fname; + }else{ + $rdoc_name=$invoice_master[0]->refer_by_other; + } + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + + + $insurance_case_id=$invoice_master[0]->insurance_case_id; + + $org_ID=''; + + if($insurance_case_id>1) + { + $sql="select o.* ,i.short_name + from organization_case_master o join hc_insurance i on o.insurance_id=i.id + where o.id=".$insurance_case_id; + $query = $this->db->query($sql); + $org_master= $query->result(); + + if(count($org_master)>0){ + $org_ID='Org. ID: '.$org_master[0]->case_id_code.'
'; + $org_ID.='Org.Name :'.$org_master[0]->short_name.'
'; + } + } + + $ipd_id=''; + + if(count($ipd_master)>0) + { + $ipd_id='IPD No. : '. $ipd_master[0]->ipd_code.''; + } + + //$print_datetime=$data_lab_request[0]->Request_Date; + + $print_datetime=date('d-m-Y h:i:s A'); + + + if($lab_invoice_request[0]->collected_time<>'') + { + $Collection_data='
+ Collected : '.$lab_invoice_request[0]->str_collected_time.'
+ Reported : '.$lab_invoice_request[0]->str_reported_time; + } + + $Header=' + + + + + + + '; + + $Header.=' +
+ Inovice ID : '.$invoice_master[0]->invoice_code.' '.$data_lab_request_edit_str.'
+ Patient Name : '.$data_patient_master[0]->title.' '.$data_patient_master[0]->p_fname.'
+ '.$data_patient_master[0]->p_relative.' '.$data_patient_master[0]->p_rname.'
+ Age/Sex : '.$data_patient_master[0]->str_age.'/'.$data_patient_master[0]->xgender.'
+ UHID : '.$data_patient_master[0]->p_code.'
+
'.$ipd_id.' + '.$Collection_data.' +
Reffered By : '.$rdoc_name.'
+ Page No. : {PAGENO} / {nbpg} +
+ +
'.$note_edit_str.' +
'; + + $RawData=""; + $group_name=''; + $first_header=1; + + for($i=0;$iRepoGrp==$group_name) + { + $groupHead=''; + }else{ + if($first_header==0) + { + //$groupHead='
'; + $groupHead=''; + }else{ + $groupHead=''; + } + + $groupHead.=' +

'.$data_lab_request[$i]->RepoGrp.'

'; + + $first_header=0; + } + + $RawData=$RawData.$groupHead; + $RawData=$RawData.$data_lab_request[$i]->Report_Data; + + $group_name=$data_lab_request[$i]->RepoGrp; + + } + + $complete_report=$RawData; + + $inv_req_id=0; + if(count($lab_invoice_request)>0) + { + $inv_req_id=$lab_invoice_request[0]->id; + } + + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name.'['.$user_id.']['.date('d-m-Y h:m:s').']'; + + $udata = array( + 'report_data'=> $complete_report, + 'report_compile'=> $user_name, + 'report_header'=> $Header, + ); + + $sortorder_insert_id=$this->PathLab_M->update_invoice_report($udata,$inv_req_id); + echo 'Data Compile'; + + $filename = $inv_id.'-'.$lab_type.'-'.time() . '.pdf'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $lab_file_name=$folder_name.'/'.$filename; + + } + + public function report_compile_single($inv_id,$lab_type,$req_id,$print=1) + { + $sql="select l.*,g.RepoGrp, + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + from lab_request l left join (lab_repo r join lab_rgroups g on r.GrpKey=g.mstRGrpKey) + on l.lab_repo_id=r.mstRepoKey + where l.id=".$req_id." and l.charge_id=".$inv_id." and l.lab_type=".$lab_type." order by g.sort_order"; + $query = $this->db->query($sql); + $data['lab_request']=$query->result(); + + $data_lab_request=$data['lab_request']; + + $sql="select * , + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + from lab_invoice_request l + where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + $sql="SELECT max(r.report_edit_req_no) as no + from lab_request r JOIN lab_log l ON r.id=l.lab_repo_id + Where r.id=$req_id"; + $query = $this->db->query($sql); + $data_lab_request_edit= $query->result(); + + if($data_lab_request_edit[0]->no>0) + { + $sql="SELECT GROUP_CONCAT(CONCAT_WS('/',l.log_type,l.log_Faults,l.comments,'Report:',r.report_name)) AS report_log + from lab_log l JOIN lab_request r ON l.lab_repo_id=r.id + WHERE r.charge_id=$inv_id AND r.lab_type=$lab_type and l.lab_repo_id=$req_id"; + + $query = $this->db->query($sql); + $data_lab_edit_error= $query->result(); + + $report_log=''; + + if(count($data_lab_edit_error)>0){ + $report_log=$data_lab_edit_error[0]->report_log; + } + + $data_lab_request_edit_str='/'.$data_lab_request_edit[0]->no; + $note_edit_str='Caution : The previous report has been corrected. Please ignore the previous report.
Error Type : '.$report_log; + //$note_edit_str=''; + }else{ + $data_lab_request_edit_str=''; + $note_edit_str=''; + } + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * + from patient_master_exten p where id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $data_patient_master= $query->result(); + + if($invoice_master[0]->refer_by_id>0) + { + $sql="select * from doctor_master where id=".$invoice_master[0]->refer_by_id; + $query = $this->db->query($sql); + $doc_master= $query->result(); + $rdoc_name='Dr.'.$doc_master[0]->p_fname; + }else{ + $rdoc_name=$invoice_master[0]->refer_by_other; + } + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $ipd_id=''; + + if(count($ipd_master)>0) + { + $ipd_id='IPD No. : '. $ipd_master[0]->ipd_code.'
'; + } + + $insurance_case_id=$invoice_master[0]->insurance_case_id; + + $org_ID=''; + + if($insurance_case_id>1) + { + $sql="select o.* ,i.short_name + from organization_case_master o join hc_insurance i on o.insurance_id=i.id + where o.id=".$insurance_case_id; + $query = $this->db->query($sql); + $org_master= $query->result(); + + if(count($org_master)>0){ + $org_ID='Org. ID: '.$org_master[0]->case_id_code.'
'; + $org_ID.='Org.Name :'.$org_master[0]->short_name.'
'; + } + } + + $print_datetime=$data_lab_request[0]->Request_Date; + + $print_datetime=date('d-m-Y h:i:sa'); + + if($lab_invoice_request[0]->collected_time<>'') + { + $Collection_data=' + Collected : '.$lab_invoice_request[0]->str_collected_time.'
+ Reported : '.$lab_invoice_request[0]->str_reported_time; + } + + + $Header=' + + + + + + '; + + $Header.=' +
+ Inovice ID : '.$invoice_master[0]->invoice_code.'
+ Patient Name : '.$data_patient_master[0]->title.' '.$data_patient_master[0]->p_fname.'
+ '.$data_patient_master[0]->p_relative.' '.$data_patient_master[0]->p_rname.'
+ Age/Sex : '.$data_patient_master[0]->str_age.'/'.$data_patient_master[0]->xgender.'
+ UHID : '.$data_patient_master[0]->p_code.'
+ Reffered By : '.$rdoc_name.'
+
'.$ipd_id.$org_ID.' + + '.$Collection_data.' +
'.$note_edit_str.' +
'; + $RawData=""; + $group_name=''; + $first_header=1; + + for($i=0;$iRepoGrp==$group_name) + { + $groupHead=''; + }else{ + if($first_header==0) + { + //$groupHead='
'; + $groupHead=''; + }else{ + $groupHead=''; + } + + $groupHead.=' +

'.$data_lab_request[$i]->RepoGrp.'

'; + + $first_header=0; + } + + $RawData=$RawData.$groupHead; + $RawData=$RawData.$data_lab_request[$i]->Report_Data; + $group_name=$data_lab_request[$i]->RepoGrp; + } + + $complete_report=$RawData; + + + $inv_req_id=0; + + $sql="select * from diagnosis_head_name where d_type=".$lab_type; + $query = $this->db->query($sql); + $data['lab_head_name']= $query->result(); + + //Report Show in PDF + + $inv_req_id=$lab_invoice_request[0]->id; + //$complete_report=$data['lab_invoice_request'][0]->report_data; + + $sql="select * from hc_item_type where itype_id=".$lab_invoice_request[0]->lab_type; + $query = $this->db->query($sql); + $report_head_row= $query->result(); + + $report_head=$report_head_row[0]->group_desc.' / Invoice ID :'.$invoice_master[0]->invoice_code.' / Person Name :'.$data_patient_master[0]->p_fname; + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + if($print>0) + { + if(count($data['lab_head_name'])>0) + { + $data['docname']=$data['lab_head_name'][0]->doc_name; + $data['docedu']=$data['lab_head_name'][0]->doc_edu; + $data['tech_name']=$data['lab_head_name'][0]->tech_name; + }else{ + $data['docname']=''; + $data['docedu']=''; + $data['tech_name']=''; + } + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name='Report'.$inv_id."-".$lab_type."-".date('dmYhis').".pdf"; + + $filepath=$folder_name.'/'.$file_name; + + $data['complete_report']=$complete_report; + $data['report_head']=$report_head; + + $data['report_header']=$Header; + + + $data['print_on_type']="0"; + $data['bar_content']=$inv_id.'-'.$lab_type; + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Lab_Panel/patient_lab_report',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + + }else{ + $this->load->view('Lab_Panel/lab_single_report',$data); + } + } + + public function report_compile_xray_single($inv_id,$lab_type,$req_id,$print=1,$print_on_type=0) + { + $sql="select l.*,g.RepoGrp, + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + from lab_request l left join (lab_repo r join lab_rgroups g on r.GrpKey=g.mstRGrpKey) + on l.lab_repo_id=r.mstRepoKey + where l.id=".$req_id." and l.charge_id=".$inv_id." and l.lab_type=".$lab_type." order by g.sort_order"; + $query = $this->db->query($sql); + $data['lab_request']=$query->result(); + + $data_lab_request=$data['lab_request']; + + $sql="select * , + date_format(l.collected_time,'%d-%m-%Y %h:%i %p') as str_collected_time, + date_format(l.reported_time,'%d-%m-%Y %h:%i %p') as str_reported_time + from lab_invoice_request l + where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * + from patient_master_exten p where id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $data_patient_master= $query->result(); + + if($invoice_master[0]->refer_by_id>0) + { + $sql="select * from doctor_master where id=".$invoice_master[0]->refer_by_id; + $query = $this->db->query($sql); + $doc_master= $query->result(); + $rdoc_name='Dr.'.$doc_master[0]->p_fname; + }else{ + $rdoc_name=$invoice_master[0]->refer_by_other; + } + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $ipd_id=''; + + if(count($ipd_master)>0) + { + $ipd_id='IPD No. : '. $ipd_master[0]->ipd_code.'
'; + } + + $insurance_case_id=$invoice_master[0]->insurance_case_id; + + $org_ID=''; + + if($insurance_case_id>1) + { + $sql="select o.* ,i.short_name + from organization_case_master o join hc_insurance i on o.insurance_id=i.id + where o.id=".$insurance_case_id; + $query = $this->db->query($sql); + $org_master= $query->result(); + + if(count($org_master)>0){ + $org_ID='Org. ID: '.$org_master[0]->case_id_code.'
'; + $org_ID.='Org.Name :'.$org_master[0]->short_name.'
'; + } + } + + $print_datetime=$data_lab_request[0]->Request_Date; + $print_datetime=date('d-m-Y h:i:sa'); + + if($lab_invoice_request[0]->collected_time<>'') + { + $Collection_data=' + Report Time : '.$lab_invoice_request[0]->str_reported_time; + } + + $Header=' + + + + + + '; + + $Header.=' +
+ Patient Name : '.$data_patient_master[0]->title.' '.$data_patient_master[0]->p_fname.'
+ '.$data_patient_master[0]->p_relative.' '.$data_patient_master[0]->p_rname.'
+ Age/Sex : '.$data_patient_master[0]->str_age.'/'.$data_patient_master[0]->xgender.'
+ Reffered By : '.$rdoc_name.'
+
+ Inovice ID : '.$invoice_master[0]->invoice_code.'
+ UHID : '.$data_patient_master[0]->p_code.'
+ '.$ipd_id.$org_ID.' + '.$Collection_data.' +
+
'; + $RawData=""; + + if(count($data_lab_request)>0) + { + $groupHead='

'.$data_lab_request[0]->report_name.'

'; + + $RawData=$RawData.$groupHead; + $RawData=trim($RawData.$data_lab_request[0]->Report_Data); + $report_data_Impression="

Impression : ".nl2br($data_lab_request[0]->report_data_Impression).'

'; + $RawData=$RawData.$report_data_Impression; + } + + $complete_report=$RawData; + + $sql="select * from diagnosis_head_name where d_type=".$lab_type; + $query = $this->db->query($sql); + $data['lab_head_name']= $query->result(); + + //Report Show in PDF + + $inv_req_id=$lab_invoice_request[0]->id; + //$complete_report=$data['lab_invoice_request'][0]->report_data; + + $sql="select * from hc_item_type where itype_id=".$lab_invoice_request[0]->lab_type; + $query = $this->db->query($sql); + $report_head_row= $query->result(); + + $report_head=$report_head_row[0]->group_desc.' / Invoice ID :'.$invoice_master[0]->invoice_code.' / Person Name :'.$data_patient_master[0]->p_fname; + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + if($print>0) + { + if(count($data['lab_head_name'])>0) + { + $data['docname']=$data['lab_head_name'][0]->doc_name; + $data['docedu']=$data['lab_head_name'][0]->doc_edu; + $data['tech_name']=$data['lab_head_name'][0]->tech_name; + $data['print_format_head_page']=$data['lab_head_name'][0]->print_format_head_page; + $data['print_page_direct']=$data['lab_head_name'][0]->print_format_head_page; + }else{ + $data['docname']=''; + $data['docedu']=''; + $data['tech_name']=''; + $data['print_format_head_page']='patient_lab_xray_report'; + $data['print_page_direct']='patient_lab_xray_report'; + } + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name='Report'.$inv_id."-".$lab_type."-".date('dmYhis').".pdf"; + + $filepath=$folder_name.'/'.$file_name; + + $data['complete_report']=$complete_report; + $data['report_head']=$report_head; + $data['report_header']=$Header; + + + $data['print_on_type']=$print_on_type; + $data['bar_content']=$inv_id.'-'.$lab_type; + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + $this->m_pdf->pdf->setAutoBottomMargin='pad'; + + $filepath=$file_name; + + if($print_on_type=0){ + $content=$this->load->view('Lab_Panel/'.$data['print_format_head_page'],$data,TRUE); + }else{ + $content=$this->load->view('Lab_Panel/'.$data['print_page_direct'],$data,TRUE); + } + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + $this->load->view('Lab_Panel/lab_single_report',$data); + } + } + + public function report_compile_edit($inv_id,$lab_type,$req_id,$print=1) + { + $sql="select l.*,g.RepoGrp + from lab_request l left join (lab_repo r join lab_rgroups g on r.GrpKey=g.mstRGrpKey) + on l.lab_repo_id=r.mstRepoKey + where l.id=".$req_id." and l.charge_id=".$inv_id." and l.lab_type=".$lab_type." order by g.sort_order"; + //echo $sql; + $query = $this->db->query($sql); + $data_lab_request= $query->result(); + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * + from patient_master_exten p where id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $data_patient_master= $query->result(); + + + + + if($invoice_master[0]->refer_by_id>0) + { + $sql="select * from doctor_master where id=".$invoice_master[0]->refer_by_id; + $query = $this->db->query($sql); + $doc_master= $query->result(); + $rdoc_name='Dr.'.$doc_master[0]->p_fname; + }else{ + $rdoc_name=$invoice_master[0]->refer_by_other; + } + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$invoice_master[0]->attach_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $ipd_id=''; + + if(count($ipd_master)>0) + { + $ipd_id='IPD No. : '. $ipd_master[0]->ipd_code.'
'; + } + $print_datetime=$data_lab_request[0]->Request_Date; + + $print_datetime=date('d-m-Y h:i:sa'); + + if($data_lab_request[0]->collected_time<>'') + { + $Collection_data=' + Collected : '.$data_lab_request[0]->collected_time.'
+ Reported : '.$data_lab_request[0]->reported_time; + + } + + $Header=' + + + + + + '; + + $Header.=' +
+ Inovice ID : '.$invoice_master[0]->invoice_code.'
+ Patient Name : '.$data_patient_master[0]->p_fname.'
+ Age/Sex : '.$data_patient_master[0]->str_age.'/'.$data_patient_master[0]->xgender.'
+ UHID : '.$data_patient_master[0]->p_code.'
+ Reffered By : '.$rdoc_name.'
+
'.$ipd_id.'
+ Print Date : '.$print_datetime.'
+ '.$Collection_data.' +
+
'; + $RawData=""; + $group_name=''; + $first_header=1; + + for($i=0;$iRepoGrp==$group_name) + { + $groupHead=''; + }else{ + if($first_header==0) + { + //$groupHead='
'; + $groupHead=''; + }else{ + $groupHead=''; + } + + $groupHead.=' +

'.$data_lab_request[$i]->RepoGrp.'

'; + + $first_header=0; + } + + $RawData=$RawData.$groupHead; + $RawData=$RawData.$data_lab_request[$i]->Report_Data; + + $group_name=$data_lab_request[$i]->RepoGrp; + + } + + $complete_report=$Header.'
'.$RawData; + + $sql="select * from lab_invoice_request where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $data['lab_invoice_request']= $query->result(); + + $inv_req_id=0; + + $sql="select * from diagnosis_head_name where d_type=".$lab_type; + $query = $this->db->query($sql); + $data['lab_head_name']= $query->result(); + + //Report Show in PDF + + $inv_req_id=$data['lab_invoice_request'][0]->id; + //$complete_report=$data['lab_invoice_request'][0]->report_data; + + $sql="select * from hc_item_type where itype_id=".$data['lab_invoice_request'][0]->lab_type; + $query = $this->db->query($sql); + $report_head_row= $query->result(); + + $report_head=$report_head_row[0]->group_desc.' / Invoice ID :'.$invoice_master[0]->invoice_code.' / Person Name :'.$data_patient_master[0]->p_fname; + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + if($print>0) + { + if(count($data['lab_head_name'])>0) + { + $docname=$data['lab_head_name'][0]->doc_name; + $docedu=$data['lab_head_name'][0]->doc_edu; + $tech_name=$data['lab_head_name'][0]->tech_name; + }else{ + $docname=''; + $docedu=''; + $tech_name=''; + } + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name='Report'.$inv_id."-".$lab_type."-".date('dmYhis').".pdf"; + + $filepath=$folder_name.'/'.$file_name; + + $udata = array( + 'file_name'=>$file_name, + 'file_type'=>'pdf', + 'file_path'=>$folder_name, + 'full_path'=>$filepath, + 'orig_name'=>$file_name, + 'client_name'=>'system_genrate', + 'file_ext'=>'.pdf', + 'upload_by'=> $user_name, + 'pid'=>$invoice_master[0]->attach_id, + 'ipd_id'=>$invoice_master[0]->ipd_id, + 'case_id'=>$invoice_master[0]->insurance_case_id, + 'file_desc'=>$report_head, + 'charge_id'=>$invoice_master[0]->id, + 'charge_type' => $lab_type + ); + + $this->load->model('File_M'); + + $sql="select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='".$file_name."'"; + $query = $this->db->query($sql); + $check_file_exist= $query->result(); + + if(count($check_file_exist)<1){ + $this->File_M->insert($udata); + }else + { + $this->File_M->update($udata,$check_file_exist[0]->id); + } + + create_lab_report_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu,$tech_name); + + }else{ + $this->load->view('PathLab_Report/lab_final_print',$data); + } + } + + public function report_remove($inv_id,$lab_type,$item_id) + { + $this->load->model('PathLab_M'); + $this->PathLab_M->delete_request_entry($item_id); + + echo 'Item Removed'; + + } + + public function Update_CombineReport() + { + $this->load->model('PathLab_M'); + + $item_id=$this->input->post('item_id'); + $checked=$this->input->post('checked'); + + $udata = array( + 'print_combine'=> $checked + ); + + $this->PathLab_M->update_test_request($udata,$item_id); + + echo "Saved"; + + } + + public function Update_Report_time() + { + $this->load->model('PathLab_M'); + + $datetimepicker1=$this->input->post('datetimepicker1'); + $datetimepicker2=$this->input->post('datetimepicker2'); + $inv_id=$this->input->post('inv_id'); + $lab_type=$this->input->post('lab_type'); + + $sql="select * from lab_invoice_request where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + if(count($lab_invoice_request)>0) + { + $rec_id=$lab_invoice_request[0]->id; + + $udata = array( + 'collected_time'=> $datetimepicker1, + 'reported_time'=> $datetimepicker2 + ); + + $this->PathLab_M->update_invoice_report($udata,$rec_id); + } + + echo "Saved"; + } + + public function show_print_final_edit($inv_id,$lab_type,$print=0) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from lab_invoice_request where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $data['lab_invoice_request']= $query->result(); + + $sql="select * from invoice_master where id='".$inv_id."'"; + $query = $this->db->query($sql); + $data_invoice_master= $query->result(); + + $sql="select * from patient_master_exten where id='".$data_invoice_master[0]->attach_id."'"; + $query = $this->db->query($sql); + $data_person_master= $query->result(); + + $sql="select * from diagnosis_head_name where d_type=".$lab_type; + $query = $this->db->query($sql); + $data['lab_head_name']= $query->result(); + + $inv_req_id=0; + if(count($data['lab_invoice_request'])>0) + { + $inv_req_id=$data['lab_invoice_request'][0]->id; + $complete_report=$data['lab_invoice_request'][0]->report_data; + + $sql="select * from hc_item_type where itype_id=".$data['lab_invoice_request'][0]->lab_type; + $query = $this->db->query($sql); + $report_head_row= $query->result(); + + $report_head=$report_head_row[0]->group_desc.' / Invoice ID :'.$data_invoice_master[0]->invoice_code.' / Person Name :'.$data_person_master[0]->p_fname; + + $sql="select * from invoice_master where id=".$data['lab_invoice_request'][0]->invoice_id; + $query = $this->db->query($sql); + $report_invoice_info= $query->result(); + + if($print>0) + { + if(count($data['lab_head_name'])>0) + { + $docname=$data['lab_head_name'][0]->doc_name; + $docedu=$data['lab_head_name'][0]->doc_edu; + $tech_name=$data['lab_head_name'][0]->tech_name; + }else{ + $docname=''; + $docedu=''; + $tech_name=''; + } + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name='Report'.$inv_id."-".$lab_type."-".date('Ymdhis').".pdf"; + + $filepath=$folder_name.'/'.$file_name; + + $udata = array( + 'file_name'=>$file_name, + 'file_type'=>'pdf', + 'file_path'=>$folder_name, + 'full_path'=>$filepath, + 'orig_name'=>$file_name, + 'client_name'=>'system_genrate', + 'file_ext'=>'.pdf', + 'upload_by'=> $user_name, + 'pid'=>$data_invoice_master[0]->attach_id, + 'ipd_id'=>$data_invoice_master[0]->ipd_id, + 'case_id'=>$data_invoice_master[0]->insurance_case_id, + 'file_desc'=>$report_head, + 'charge_id'=>$data_invoice_master[0]->id + ); + + $this->load->model('File_M'); + + $sql="select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='".$file_name."'"; + $query = $this->db->query($sql); + $check_file_exist= $query->result(); + + if(count($check_file_exist)<1){ + $this->File_M->insert($udata); + }else + { + $this->File_M->update($udata,$check_file_exist[0]->id); + } + + $this->load->model('PathLab_M'); + + $rec_id=$data['lab_invoice_request'][0]->id; + + $udata = array( + 'report_print_status'=> '1', + 'report_print_time'=> date('Y-m-d h:i:s'), + ); + + $this->PathLab_M->update_invoice_report($udata,$rec_id); + + //create_lab_report_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu,$tech_name); + create_Document_logo_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu,$tech_name); + + //load mPDF library + + }else{ + $this->load->view('PathLab_Report/lab_final_print',$data); + } + }else{ + echo 'Error : Record not Exist in lab_invoice_request'; + } + + } + + public function final_edit_single_report($inv_id,$lab_type,$print=0) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from lab_invoice_request where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $data['lab_invoice_request']= $query->result(); + + $sql="select * from invoice_master where id='".$inv_id."'"; + $query = $this->db->query($sql); + $data_invoice_master= $query->result(); + + $sql="select * from patient_master_exten where id='".$data_invoice_master[0]->attach_id."'"; + $query = $this->db->query($sql); + $data_person_master= $query->result(); + + $sql="select * from diagnosis_head_name where d_type=".$lab_type; + $query = $this->db->query($sql); + $data['lab_head_name']= $query->result(); + + $inv_req_id=0; + if(count($data['lab_invoice_request'])>0) + { + $inv_req_id=$data['lab_invoice_request'][0]->id; + $complete_report=$data['lab_invoice_request'][0]->report_data; + + $sql="select * from hc_item_type where itype_id=".$data['lab_invoice_request'][0]->lab_type; + $query = $this->db->query($sql); + $report_head_row= $query->result(); + + $report_head=$report_head_row[0]->group_desc.' / Invoice ID :'.$data_invoice_master[0]->invoice_code.' / Person Name :'.$data_person_master[0]->p_fname; + + $sql="select * from invoice_master where id=".$data['lab_invoice_request'][0]->invoice_id; + $query = $this->db->query($sql); + $report_invoice_info= $query->result(); + + if($print>0) + { + if(count($data['lab_head_name'])>0) + { + $docname=$data['lab_head_name'][0]->doc_name; + $docedu=$data['lab_head_name'][0]->doc_edu; + $tech_name=$data['lab_head_name'][0]->tech_name; + }else{ + $docname=''; + $docedu=''; + $tech_name=''; + } + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name='Report'.$inv_id."-".$lab_type."-".date('Ymdhis').".pdf"; + + $filepath=$folder_name.'/'.$file_name; + + $udata = array( + 'file_name'=>$file_name, + 'file_type'=>'pdf', + 'file_path'=>$folder_name, + 'full_path'=>$filepath, + 'orig_name'=>$file_name, + 'client_name'=>'system_genrate', + 'file_ext'=>'.pdf', + 'upload_by'=> $user_name, + 'pid'=>$data_invoice_master[0]->attach_id, + 'ipd_id'=>$data_invoice_master[0]->ipd_id, + 'case_id'=>$data_invoice_master[0]->insurance_case_id, + 'file_desc'=>$report_head, + 'charge_id'=>$data_invoice_master[0]->id + ); + + $this->load->model('File_M'); + + $sql="select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='".$file_name."'"; + $query = $this->db->query($sql); + $check_file_exist= $query->result(); + + if(count($check_file_exist)<1){ + $this->File_M->insert($udata); + }else + { + $this->File_M->update($udata,$check_file_exist[0]->id); + } + + //create_lab_report_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu,$tech_name); + create_Document_logo_pdf($complete_report,$filepath,'',$report_head,$docname,$docedu,$tech_name); + + //load mPDF library + + }else{ + $this->load->view('PathLab_Report/lab_final_print',$data); + } + }else{ + echo 'Error : Record not Exist in lab_invoice_request'; + } + + } + + + + public function print_pdf_create($inv_id,$lab_type,$print=0,$print_on_type=0) + { + + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from lab_invoice_request where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $data['lab_invoice_request']= $query->result(); + + $sql="Select max(report_edit_req_no) as no + from lab_request where charge_id=".$inv_id." and lab_type=".$lab_type." "; + $query = $this->db->query($sql); + $data_lab_request_edit= $query->result(); + + if($data_lab_request_edit[0]->no>0) + { + $data_lab_request_edit_str='/'.$data_lab_request_edit[0]->no; + $note_edit_str='Caution : Please ignore the earlier report.'; + }else{ + $data_lab_request_edit_str=''; + $note_edit_str=''; + } + + $sql="select * from invoice_master where id='".$inv_id."'"; + $query = $this->db->query($sql); + $data_invoice_master= $query->result(); + + $sql="select * from patient_master_exten where id='".$data_invoice_master[0]->attach_id."'"; + $query = $this->db->query($sql); + $data_person_master= $query->result(); + + $sql="select * from diagnosis_head_name where d_type=".$lab_type; + $query = $this->db->query($sql); + $data['lab_head_name']= $query->result(); + + $inv_req_id=0; + if(count($data['lab_invoice_request'])>0) + { + $inv_req_id=$data['lab_invoice_request'][0]->id; + $data['complete_report']=$data['lab_invoice_request'][0]->report_data; + $data['report_header']=$data['lab_invoice_request'][0]->report_header; + + $sql="select * from hc_item_type where itype_id=".$data['lab_invoice_request'][0]->lab_type; + $query = $this->db->query($sql); + $report_head_row= $query->result(); + + $report_head=$report_head_row[0]->group_desc.' / Invoice ID :'.$data_invoice_master[0]->invoice_code.$data_lab_request_edit_str.' / Person Name :'.$data_person_master[0]->p_fname; + + $sql="select * from invoice_master where id=".$data['lab_invoice_request'][0]->invoice_id; + $query = $this->db->query($sql); + $report_invoice_info= $query->result(); + + if($print>0) + { + $page_format='patient_lab_report'; + $page_format_head='patient_lab_report'; + + if(count($data['lab_head_name'])>0) + { + $docname=$data['lab_head_name'][0]->doc_name; + $docedu=$data['lab_head_name'][0]->doc_edu; + $tech_name=$data['lab_head_name'][0]->tech_name; + $page_format=$data['lab_head_name'][0]->print_format_head_page; + $page_format_head=$data['lab_head_name'][0]->print_page_direct; + }else{ + $docname=''; + $docedu=''; + $tech_name=''; + } + + $data['docname']=$docname; + $data['docedu']=$docedu; + $data['tech_name']=$tech_name; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $file_name='Report-'.$inv_id."-".$lab_type."-".date('Ymd-his').".pdf"; + + $filepath=$folder_name.'/'.$file_name; + + $udata = array( + 'file_name'=>$file_name, + 'file_type'=>'pdf', + 'file_path'=>$folder_name, + 'full_path'=>$filepath, + 'orig_name'=>$file_name, + 'client_name'=>'system_genrate', + 'file_ext'=>'.pdf', + 'upload_by'=> $user_name, + 'pid'=>$data_invoice_master[0]->attach_id, + 'ipd_id'=>$data_invoice_master[0]->ipd_id, + 'case_id'=>$data_invoice_master[0]->insurance_case_id, + 'file_desc'=>$report_head, + 'charge_id'=>$data_invoice_master[0]->id + ); + + $this->load->model('File_M'); + + $sql="select * from file_upload_data where Date(insert_date)=Date(sysdate()) and file_name='".$file_name."'"; + $query = $this->db->query($sql); + $check_file_exist= $query->result(); + + $file_ID=0; + + if(count($check_file_exist)<1){ + $file_ID=$this->File_M->insert($udata); + + }else + { + $this->File_M->update($udata,$check_file_exist[0]->id); + $file_ID=$check_file_exist[0]->id; + } + + $Lab_reg_data = array( + 'file_id'=>$file_ID, + ); + + $this->PathLab_M->update_invoice_report($Lab_reg_data,$data['lab_invoice_request'][0]->id); + + $data['report_head']=$report_head; + + //load mPDF library + $this->load->library('m_pdf'); + + + $data['bar_content']=$inv_id.'-'.$lab_type; + $data["print_on_type"]=$print_on_type; + $data["data_lab_request_edit_str"]=$data_lab_request_edit_str; + $data['note_edit_str']=$note_edit_str; + + if($print_on_type==1) + { + $content=$this->load->view('Lab_Panel/'.$page_format_head,$data,TRUE); + }else{ + $content=$this->load->view('Lab_Panel/'.$page_format,$data,TRUE); + } + + + //$this->m_pdf->pdf->curlAllowUnsafeSslRequests = true; + + $this->m_pdf->pdf->shrink_tables_to_fit = 1; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath,"I"); + + //echo $content; + }else{ + $this->load->view('PathLab_Report/lab_final_print',$data); + } + }else{ + echo 'Error : Record not Exist in lab_invoice_request'; + } + + } + + + public function add_test_repo($repo_id,$test_id) + { + $sql="select * from lab_repotests where mstRepoKey=".$repo_id." and mstTestKey=".$test_id; + $query = $this->db->query($sql); + $data['lab_repotests_chk']= $query->result(); + + if(count($data['lab_repotests_chk'])<1) + { + $this->load->model('PathLab_M'); + + $sql="select Max(EOrder) as MEOrder from lab_repotests where mstRepoKey=".$repo_id; + $query = $this->db->query($sql); + $data['lab_repotests']= $query->result(); + + $MEOrder=0; + if(count($data['lab_repotests'])>0) + { + $MEOrder=$data['lab_repotests'][0]->MEOrder; + } + + if($MEOrder === NULL) + { + $MEOrder=1; + }else{ + $MEOrder=$MEOrder+1; + } + + $udata = array( + 'mstRepoKey'=> $repo_id, + 'mstTestKey'=> $test_id, + 'EOrder'=> $MEOrder + ); + + $sortorder_insert_id=$this->PathLab_M->insert_item_sortorder($udata); + + $showcontent=Show_Alert('success','Saved','Add successfully'); + + }else{ + $sortorder_insert_id=0; + $showcontent=Show_Alert('error','Already....','Already Added'); + } + + $rvar=array( + 'insertid' => $sortorder_insert_id, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function remove_test_item($repo_id,$test_id) + { + $this->db->delete("lab_repotests", "mstRepoKey=".$repo_id." and mstTestKey=".$test_id); + + } + + public function test_item_search() + { + $Test_Name=$this->input->post('input_Test_name'); + $repo_id=$this->input->post('repo_id'); + + $sql="select * from lab_tests where Test like '%".$Test_Name."%'"; + $query = $this->db->query($sql); + $search_result= $query->result(); + + echo ''; + for($i=0;$i'; + } + + echo '
'.$search_result[$i]->Test.'[ '.$search_result[$i]->TestID.' ]
'; + + } + + public function lab_file_scan($repo_id,$test_id) + { + $data['repo_id']=$repo_id; + $data['test_id']=$test_id; + + $this->load->view('PathLab_Report/lab_file_scan',$data); + } + + public function lab_file_scan_complete($repo_id,$lab_type) + { + $data['repo_id']=$repo_id; + $data['lab_type']=$lab_type; + + $this->load->view('PathLab_Report/lab_file_scan_whole',$data); + } + + public function lab_file_upload($repo_id,$test_id) + { + $data['repo_id']=$repo_id; + $data['test_id']=$test_id; + + $this->load->view('PathLab_Report/lab_file_upload',$data); + } + + public function lab_file_upload_complete($inv_id,$lab_type) + { + $data['inv_id']=$inv_id; + $data['lab_type']=$lab_type; + + $this->load->view('PathLab_Report/lab_file_upload_complete',$data); + } + + public function save_image($repo_id,$test_id) + { + $filename = $repo_id.'-'.$test_id.'-'.time() . '.jpg'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg|dcm'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('webcam')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + + $this->load->model('File_M'); + + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from lab_request where id=".$repo_id; + $query = $this->db->query($sql); + $lab_request_result= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($lab_request_result)>0) + { + $pid=$lab_request_result[0]->patient_id; + $ipd_id=$lab_request_result[0]->ipd_id; + $org_id=$lab_request_result[0]->org_id; + $charge_type=$lab_request_result[0]->lab_type; + $inv_id=$lab_request_result[0]->charge_id; + } + + $udata = array( + 'repo_id'=> $repo_id, + 'repo_test_id'=> $test_id, + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id, + 'charge_type'=> $charge_type, + 'charge_id'=>$inv_id, + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + + echo $filename; + } + } + + public function save_image_complete($inv_id,$lab_type) + { + $filename = $inv_id.'-'.$lab_type.'-'.time() . '.jpg'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('webcam')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + + $this->load->model('File_M'); + + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from lab_request where charge_id=$inv_id and lab_type=$lab_type" ; + $query = $this->db->query($sql); + $lab_request_result= $query->result(); + + + $pid=0; + $ipd_id=0; + $org_id=0; + + + if(count($lab_request_result)>0) + { + $pid=$lab_request_result[0]->patient_id; + $ipd_id=$lab_request_result[0]->ipd_id; + $org_id=$lab_request_result[0]->org_id; + $charge_type=$lab_request_result[0]->lab_type; + $repo_id=$lab_request_result[0]->id; + } + + $udata = array( + 'repo_id'=> $repo_id, + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id, + 'charge_type'=> $lab_type, + 'charge_id'=>$inv_id, + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + + echo $filename; + } + } + + public function process_ajax() + { + $output_dir = "uploads/"; + + if(isset($_FILES["myfile"])) + { + $ret = array(); + + $error = $_FILES["myfile"]["error"]; + + // upload single file + if(!is_array($_FILES["myfile"]["name"])) //single file + { + $fileName = $_FILES["myfile"]["name"]; + move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName); + $ret[]= $fileName; + } + else + { + // Handle Multiple files + $fileCount = count($_FILES["myfile"]["name"]); + for($i=0; $i<$fileCount; $i++) + { + $fileName = $_FILES["myfile"]["name"][$i]; + move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName); + $ret[]= $fileName; + } + } + // output file names as comma seperated strings to display status + echo json_encode($ret); + } + } + + public function lab_file_list($repo_id,$lab_type) + { + $sql="select * from file_upload_data + where repo_id=".$repo_id." and repo_test_id=".$lab_type; + $query = $this->db->query($sql); + $data['lab_file_list']= $query->result(); + + $this->load->view('PathLab_Report/lab_report_file_show',$data); + + } + + public function lab_file_list_all($inv_id,$lab_type) + { + $sql="select * from file_upload_data + where charge_id=$inv_id and charge_type=$lab_type"; + $query = $this->db->query($sql); + $data['lab_file_list']= $query->result(); + + + + $this->load->view('PathLab_Report/lab_report_file_show',$data); + + } + + public function render_file($file_id) + { + $sql="select * from file_upload_data where id=".$file_id; + $query = $this->db->query($sql); + $data['lab_file_details']= $query->result(); + + $this->load->view('PathLab_Report/lab_file_show',$data); + } + + public function lab_files_upload($repo_id,$test_id) + { + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $output_dir = $folder_name; + + if(isset($_FILES["myfile"])) + { + $ret = array(); + + $error = $_FILES["myfile"]["error"]; + + // upload single file + if(!is_array($_FILES["myfile"]["name"])) //single file + { + $filename = $repo_id.'-'.$test_id.'-'.time() .$_FILES["myfile"]["name"]; + $config['upload_path'] = $folder_name; + $config['file_name'] = $filename; + $config['allowed_types'] = 'gif|jpg|png|jpeg|pdf|doc'; + + $this->load->library('upload', $config); + echo $filename; + //move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName); + + if (!$this->upload->do_upload('myfile')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + $this->load->model('File_M'); + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from lab_request where id=".$repo_id; + $query = $this->db->query($sql); + $lab_request_result= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($lab_request_result)>0) + { + $pid=$lab_request_result[0]->patient_id; + $ipd_id=$lab_request_result[0]->ipd_id; + $org_id=$lab_request_result[0]->org_id; + $charge_type=$lab_request_result[0]->lab_type; + $inv_id=$lab_request_result[0]->charge_id; + } + + $udata = array( + 'repo_id'=> $repo_id, + 'repo_test_id'=> $test_id, + 'charge_type'=> $charge_type, + 'charge_id'=>$inv_id, + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + + } + + $ret[]= $_FILES["myfile"]["name"]; + } + else + { + // Handle Multiple files + $fileCount = count($_FILES["myfile"]["name"]); + for($i=0; $i<$fileCount; $i++) + { + $filename = $repo_id.'-'.$test_id.'-'.time() .$_FILES["myfile"]["name"][$i]; + + //$fileName = $_FILES["myfile"]["name"][$i]; + //move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName); + + if (!$this->upload->do_upload($_FILES["myfile"]["tmp_name"][$i])) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + $this->load->model('File_M'); + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from lab_request where id=".$repo_id; + $query = $this->db->query($sql); + $lab_request_result= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($lab_request_result)>0) + { + $pid=$lab_request_result[0]->patient_id; + $ipd_id=$lab_request_result[0]->ipd_id; + $org_id=$lab_request_result[0]->org_id; + $charge_type=$lab_request_result[0]->lab_type; + $inv_id=$lab_request_result[0]->charge_id; + } + + $udata = array( + 'repo_id'=> $repo_id, + 'repo_test_id'=> $test_id, + 'charge_type'=> $charge_type, + 'charge_id'=>$inv_id, + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + } + + $ret[]= $_FILES["myfile"]["name"][$i]; + } + } + // output file names as comma seperated strings to display status + echo json_encode($ret); + } + } + + public function lab_files_upload_complete($inv_id,$lab_type) + { + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + chmod($folder_name, 0777); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $output_dir = $folder_name; + + if(isset($_FILES["myfile"])) + { + $ret = array(); + + $error = $_FILES["myfile"]["error"]; + + // upload single file + if(!is_array($_FILES["myfile"]["name"])) //single file + { + $filename = $inv_id.'-'.$lab_type.'-'.time() .$_FILES["myfile"]["name"]; + $config['upload_path'] = $folder_name; + $config['file_name'] = $filename; + $config['allowed_types'] = 'gif|jpg|png|jpeg|pdf|doc'; + + $this->load->library('upload', $config); + echo $filename; + //move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName); + + if (!$this->upload->do_upload('myfile')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + $this->load->model('File_M'); + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from lab_request where charge_id=$inv_id and lab_type=$lab_type" ; + $query = $this->db->query($sql); + $lab_request_result= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($lab_request_result)>0) + { + $pid=$lab_request_result[0]->patient_id; + $ipd_id=$lab_request_result[0]->ipd_id; + $org_id=$lab_request_result[0]->org_id; + $repo_id=$lab_request_result[0]->id; + + + } + + $udata = array( + 'repo_id'=> $repo_id, + 'charge_type'=> $lab_type, + 'charge_id'=>$inv_id, + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + + } + + $ret[]= $_FILES["myfile"]["name"]; + } + else + { + // Handle Multiple files + $fileCount = count($_FILES["myfile"]["name"]); + for($i=0; $i<$fileCount; $i++) + { + $filename = $inv_id.'-'.$lab_type.'-'.time() .$_FILES["myfile"]["name"][$i]; + + //$fileName = $_FILES["myfile"]["name"][$i]; + //move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName); + + if (!$this->upload->do_upload($_FILES["myfile"]["tmp_name"][$i])) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + $this->load->model('File_M'); + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from lab_request where id=".$inv_id; + $query = $this->db->query($sql); + $lab_request_result= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($lab_request_result)>0) + { + $pid=$lab_request_result[0]->patient_id; + $ipd_id=$lab_request_result[0]->ipd_id; + $org_id=$lab_request_result[0]->org_id; + } + + $udata = array( + 'repo_id'=> $repo_id, + 'charge_type'=> $lab_type, + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + } + + $ret[]= $_FILES["myfile"]["name"][$i]; + } + } + // output file names as comma seperated strings to display status + echo json_encode($ret); + } + } + + + public function send_sms_lab_report($inv_id,$lab_type) + { + $sql="select * from lab_invoice_request where invoice_id='".$inv_id."' and lab_type='".$lab_type."'"; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + $file_id=0; + + if(count($lab_invoice_request)>0) + { + $file_id=$lab_invoice_request[0]->file_id; + + $file_id_en=encode_dst($file_id); + + $message="Your Report is ready. click on ".base_url()."PhoneSMS/show_lab_report/".$file_id_en.' From Apollo Diag.&Path. Lab'; + $message = urlencode($message);// urlencode your message + + //echo $message; + + $tomobile=$this->input->post('sms_number'); + + //Send SMS + $url="https://www.way2sms.com/api/v1/sendCampaign"; + + $curl = curl_init(); + curl_setopt($curl, CURLOPT_POST, 1);// set post data to true + curl_setopt($curl, CURLOPT_POSTFIELDS, "apikey=B7DYP7GU8K92YJ8ZQGE6DWCUM1DXGOBS&secret=JG534P9WPHQ0Z9H7&usetype=prod&phone=$tomobile&senderid=DSTECH&message=$message");// post data + // query parameter values must be given without squarebrackets. + // Optional Authentication: + curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + $result = curl_exec($curl); + curl_close($curl); + + echo 'Message Send.'; + }else{ + echo 'Report Not Ready'; + } + + } + + + public function lab_tab_2_process($req_id) + { + $sql="select * from lab_request where id=".$req_id; + $query = $this->db->query($sql); + $labreport_entry= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $insert_id=0; + + $this->load->model('PathLab_M'); + + if(count($labreport_entry)>0) + { + + $sql="select r.mstRepoKey,t.mstTestKey,j.EOrder,t.Result + from lab_repo r join lab_repotests j join lab_tests t + on r.mstRepoKey=j.mstRepoKey and j.mstTestKey=t.mstTestKey + where r.mstRepoKey=".$labreport_entry[0]->lab_repo_id." order by j.EOrder"; + + $query = $this->db->query($sql); + $chkdata= $query->result(); + + for ($i = 0; $i < count($chkdata); ++$i) + { + + $sql="select * from lab_request_item + where lab_request_id='".$req_id."' and lab_repo_id='".$chkdata[$i]->mstRepoKey."' + and lab_test_id='".$chkdata[$i]->mstTestKey."'"; + + + $query = $this->db->query($sql); + $chktestlist= $query->result(); + + if(count($chktestlist)<1) + { + $udata = array( + 'lab_request_id'=> $req_id, + 'lab_repo_id'=> $chkdata[$i]->mstRepoKey, + 'lab_test_id'=> $chkdata[$i]->mstTestKey, + ); + + $insert_id=$this->PathLab_M->insert_test_entry($udata); + } + } + } + + $sql= "select d.mstTestKey,d.Test,d.TestID,d.Result,d.Formula,d.VRule,d.VMsg,d.Unit, d.FixedNormals, + i.lab_test_value,i.lab_test_remark,i.id ,s.EOrder, + group_concat(concat(o.id,':',o.option_text,':',o.option_value) ORDER BY o.sort_id) as option_value, + d.Formula + from (lab_request_item i join lab_tests d join lab_repotests s + on i.lab_test_id=d.mstTestKey and d.mstTestKey=s.mstTestKey and i.lab_repo_id=s.mstRepoKey) + left join lab_tests_option o on d.mstTestKey=o.mstTestKey + where i.lab_request_id=".$req_id." group by d.mstTestKey order by s.EOrder"; + + $query = $this->db->query($sql); + $data['lab_request_item_entry']= $query->result(); + + $sql="select * from lab_request where id=".$req_id; + $query = $this->db->query($sql); + $data['lab_request_master']= $query->result(); + + $this->load->view('PathLab_Report/lab_test_entry',$data); + + } + + + public function report_edit_request_show($repo_id) + { + $sql="select * from lab_request where id=".$repo_id; + $query = $this->db->query($sql); + $data['lab_request']= $query->result(); + + $sql="SELECT s.id,m.analytical_id, + Concat(s.analytical_faults,'[',m.analytical_name,']' ) AS log_type + from lab_log_analytical_type m JOIN lab_log_type_master s + ON m.analytical_id=s.analytical_faults_type"; + $query = $this->db->query($sql); + $data['lab_log_type_master']= $query->result_array(); + + $data['Faults_id']=1; + + $data['repo_id']=$repo_id; + + $this->load->view('PathLab_Report/lab_report_edit_request',$data); + + } + + + public function report_edit_request() + { + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name.'['.$user_id.']['.date('d-m-Y h:i:s').']'; + + $sql="select * from lab_log_type_master where id=".$this->input->post('cbo_sub_Analytical'); + $query = $this->db->query($sql); + $lab_log_type_master= $query->result(); + + $Analytical_text=""; + $sub_Analytical_text=""; + $log_type_id="0"; + + if(count($lab_log_type_master)>0) + { + $log_type_id=$lab_log_type_master[0]->analytical_faults_type; + $sub_Analytical_text=$lab_log_type_master[0]->analytical_faults; + + + $sql="select * from lab_log_analytical_type where analytical_id=".$lab_log_type_master[0]->analytical_faults_type; + $query = $this->db->query($sql); + $lab_log_analytical_type= $query->result(); + + $Analytical_text=$lab_log_analytical_type[0]->analytical_name; + } + + $udata = array( + 'log_by_id'=> $user_id, + 'log_by'=> $user_name, + 'log_type_id'=> $log_type_id, + 'log_type'=> $Analytical_text, + 'log_Faults_id'=> $this->input->post('cbo_sub_Analytical'), + 'log_Faults'=> $sub_Analytical_text, + 'comments'=> $this->input->post('other_reason'), + 'lab_repo_id'=>$this->input->post('repo_id'), + ); + + $insert_id=$this->PathLab_M->insert_lab_log($udata); + if($insert_id>0) + { + $showcontent="Request to OPEN Report Done"; + $id_key=$this->input->post('repo_id'); + + $sql="select * from lab_request where id=".$id_key; + $query = $this->db->query($sql); + $lab_request= $query->result(); + + $report_edit_req_no=$lab_request[0]->report_edit_req_no; + + $report_edit_req_no =$report_edit_req_no+1; + + $data = array( + 'status'=> '1', + 'report_edit_req_no'=>$report_edit_req_no, + ); + + $this->PathLab_M->update_test_request($data,$id_key); + + }else{ + $showcontent="Some Error, Please Contact to Admin"; + } + + $rvar=array( + 'insertid' => $insert_id, + 'showcontent'=> $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function update_lab_no() + { + $this->load->model('PathLab_M'); + + $lab_req_id=$this->input->post('lab_req_id'); + $inputLabNo=$this->input->post('inputLabNo'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.' '. $user->last_name.'['.$user_id.']['.date('d-m-Y h:i:s').']'; + + $sql="select * from lab_invoice_request where id=$lab_req_id "; + $query = $this->db->query($sql); + $lab_invoice_request= $query->result(); + + if(count($lab_invoice_request)>0) + { + $udata = array( + 'lab_test_no'=> $inputLabNo, + ); + + $this->PathLab_M->update_invoice_report($udata,$lab_req_id); + } + + echo "Saved"; + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Lab_Report.php b/old_code_ci3/controllers/Lab_Report.php new file mode 100644 index 0000000..736cbf9 --- /dev/null +++ b/old_code_ci3/controllers/Lab_Report.php @@ -0,0 +1,564 @@ +load->view('Lab_Panel/lab_main'); + } + + public function lab_path($lab_type) + { + $data['lab_type'] = $lab_type; + $this->load->view('Lab_Panel/pathlab_request_list', $data); + } + + public function search_lab_4($lab_type) + { + $sdata = $this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if (trim($sdata) == '') { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date, + Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + group_concat(concat_ws(';',t.item_name,t.item_name,t.id,check_item_request(m.id,t.id)) SEPARATOR '#') as data_array, + r.daily_sr_no,r.lab_test_no + from ( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + Left JOIN lab_invoice_request r ON m.id=r.invoice_id + + where m.payment_status=1 and y.itype_id=" . $lab_type . " + + group by m.id order by m.id desc limit 200"; + } else { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date,Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + group_concat(concat_ws(';',t.item_name,t.id,m.id,check_item_request(m.id,t.id)) SEPARATOR '#') as data_array, + r.daily_sr_no,r.lab_test_no + from ( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + Left JOIN lab_invoice_request r ON m.id=r.invoice_id + + where m.payment_status=1 and y.itype_id= " . $lab_type . " AND (m.invoice_code LIKE '%" . $sdata . "' + OR p.p_fname LIKE '%" . $sdata . "%' + OR p.p_code LIKE '%" . $sdata . "' ) + + group by m.id order by m.id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['labreport_preprocess'] = $query->result(); + + if ($lab_type == 5 or $lab_type == 6) // Pathology or Biopsy + { + $this->load->view('Lab_Panel/lab_report_tab_path', $data); + } else { + $this->load->view('Lab_Panel/lab_report_tab_1', $data); + } + } + + public function search_lab_4_labno($lab_type) + { + $sdata = $this->input->post('txtsearch_labno'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if (trim($sdata) == '') { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date, + Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + group_concat(concat_ws(';',t.item_name,t.item_name,t.id,check_item_request(m.id,t.id)) SEPARATOR '#') as data_array, + r.daily_sr_no,r.lab_test_no + from ( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + JOIN lab_invoice_request r ON m.id=r.invoice_id And r.lab_test_no>0 + where m.payment_status=1 and y.itype_id=$lab_type and m.inv_date >=date_add(curdate(),interval -3 day) + group by m.id order by m.id desc limit 50"; + } else { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date, + Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + group_concat(concat_ws(';',t.item_name,t.item_name,t.id,check_item_request(m.id,t.id)) SEPARATOR '#') as data_array, + r.daily_sr_no,r.lab_test_no + from ( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + JOIN lab_invoice_request r ON m.id=r.invoice_id And r.lab_test_no>0 + + where m.payment_status=1 and y.itype_id=$lab_type AND r.lab_test_no=$sdata + + group by m.id order by m.id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['labreport_preprocess'] = $query->result(); + + $this->load->view('Lab_Panel/lab_report_tab_1', $data); + } + + + public function search_lab_4_srno($lab_type) + { + $sdata = $this->input->post('txtsearch_srno'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if (trim($sdata) == '') { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date, + Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + group_concat(concat_ws(';',t.item_name,t.item_name,t.id,check_item_request(m.id,t.id)) SEPARATOR '#') as data_array, + r.daily_sr_no,r.lab_test_no + from ( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + JOIN lab_invoice_request r ON m.id=r.invoice_id And r.daily_sr_no>0 + where m.payment_status=1 and y.itype_id=$lab_type and m.inv_date >=date_add(curdate(),interval -3 day) + group by m.id order by m.id desc limit 50"; + } else { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date, + Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + group_concat(concat_ws(';',t.item_name,t.item_name,t.id,check_item_request(m.id,t.id)) SEPARATOR '#') as data_array, + r.daily_sr_no,r.lab_test_no + from ( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + JOIN lab_invoice_request r ON m.id=r.invoice_id And r.daily_sr_no>0 + + where m.payment_status=1 and y.itype_id=$lab_type AND r.daily_sr_no=$sdata + + group by m.id order by m.id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['labreport_preprocess'] = $query->result(); + + $this->load->view('Lab_Panel/lab_report_tab_1', $data); + } + + public function lab_tab_1_process($test_id, $lab_type) + { + $sql = "select m.invoice_code,p.p_fname as inv_name,t.item_name,t.id as test_id, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age, + if(l.mstRepoKey is null,0,l.mstRepoKey) as mstRepoKey,if(l.mstRepoKey is null,item_name,l.Title) as Title,m.inv_date, + r.lab_repo_id,y.group_desc as item_type_desc,y.itype_id,m.insurance_case_id,m.ipd_id, + m.id as inv_id,m.attach_id,m.insurance_case_id,m.net_amount + from (( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + left join lab_request r on t.id=r.charge_item_id) + left join lab_repo l on t.item_id=l.charge_id + where m.payment_status=1 and y.itype_id=" . $lab_type . " and r.id is null and t.id=" . $test_id; + + $query = $this->db->query($sql); + $data['labreport_preprocess'] = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $print_allowed = 0; + $insert_id = 0; + + if (count($data['labreport_preprocess']) > 0) { + if ($data['labreport_preprocess'][0]->insurance_case_id > 0 || $data['labreport_preprocess'][0]->ipd_id > 0) { + $print_allowed = 1; + } else { + $sql = "select sum(if(credit_debit=0,amount,amount*-1)) as paid_amount from payment_history where payof_type=2 and payof_id=" . $data['labreport_preprocess'][0]->inv_id; + $query = $this->db->query($sql); + $data['inv_amount'] = $query->result(); + + if (count($data['inv_amount']) < 1) { + $paid_Amount = 0; + } else { + $paid_Amount = $data['inv_amount'][0]->paid_amount; + $inv_amount = $data['labreport_preprocess'][0]->net_amount; + + if ($inv_amount <= $paid_Amount) { + $print_allowed = 1; + } + } + } + + $this->load->model('PathLab_M'); + + $udata = array( + 'lab_repo_id' => $data['labreport_preprocess'][0]->mstRepoKey, + 'charge_id' => $data['labreport_preprocess'][0]->inv_id, + 'lab_type' => $data['labreport_preprocess'][0]->itype_id, + 'charge_item_id' => $data['labreport_preprocess'][0]->test_id, + 'invoice_code' => $data['labreport_preprocess'][0]->invoice_code, + 'patient_name' => $data['labreport_preprocess'][0]->inv_name, + 'patient_id' => $data['labreport_preprocess'][0]->attach_id, + 'ipd_id' => $data['labreport_preprocess'][0]->ipd_id, + 'org_id' => $data['labreport_preprocess'][0]->insurance_case_id, + 'Request_Date' => $data['labreport_preprocess'][0]->inv_date, + 'report_name' => $data['labreport_preprocess'][0]->Title, + 'insert_by' => $user_name, + 'print_allowed' => $print_allowed, + 'collected_time' => date('Y-m-d H:i:s') + ); + + //print_r ($udata); + $insert_id = $this->PathLab_M->insert_test_request($udata); + + $sql = "select id from lab_invoice_request + where lab_type=$lab_type and invoice_id=" . $data['labreport_preprocess'][0]->inv_id; + $query = $this->db->query($sql); + $lab_invoice_request = $query->result(); + + if (count($lab_invoice_request) < 1) { + $sql = "select count(*) as no_rec from lab_invoice_request + where lab_type=$lab_type and date(report_insert)=curdate()"; + $query = $this->db->query($sql); + $lab_invoice_count = $query->result(); + + $count_rec = $lab_invoice_count[0]->no_rec; + + $count_rec = $count_rec + 1; + + $udata = array( + 'invoice_id' => $data['labreport_preprocess'][0]->inv_id, + 'invoice_code' => $data['labreport_preprocess'][0]->invoice_code, + 'lab_type' => $data['labreport_preprocess'][0]->itype_id, + 'print_allowed' => $print_allowed, + 'collected_time' => date('Y-m-d H:i:s'), + 'daily_sr_no' => $count_rec + ); + $insert_invoice_request = $this->PathLab_M->insert_invoice_report($udata); + } else { + $udata = array( + 'print_allowed' => $print_allowed, + 'collected_time' => date('Y-m-d H:i:s') + ); + $insert_invoice_request = $this->PathLab_M->update_invoice_report($udata, $lab_invoice_request[0]->id); + } + } + + //Add Second Step + + + echo $insert_id; + } + + public function create_report_xray($req_id) + { + + $this->load->model('PathLab_M'); + + $sql = "select * from lab_request where id=" . $req_id; + $query = $this->db->query($sql); + $data_lab_request = $query->result(); + + $p_id = $data_lab_request[0]->patient_id; + + $sql = "select * from patient_master_exten where id=$p_id"; + $query = $this->db->query($sql); + $data_patient_data = $query->result(); + + + $sql = "select mstRepoKey,Title,HTMLData,GrpKey,charge_id,RepoGrp + from lab_repo join lab_rgroups on lab_repo.GrpKey=lab_rgroups.mstRGrpKey + where mstRepoKey=" . $data_lab_request[0]->lab_repo_id; + + $query = $this->db->query($sql); + $data_report_format = $query->result(); + + $sql = "select * from invoice_master where attach_type=0 and id=" . $data_lab_request[0]->charge_id; + $query = $this->db->query($sql); + $data_invoice_master = $query->result(); + + $sql = "select id from lab_invoice_request where invoice_id=" . $data_lab_request[0]->charge_id . " and lab_type=" . $data_lab_request[0]->lab_type; + $query = $this->db->query($sql); + $lab_invoice_request = $query->result(); + + $sql = "select * from invoice_item where id=" . $data_lab_request[0]->charge_item_id;; + $query = $this->db->query($sql); + $invoice_item = $query->result(); + + + + + + if (count($data_report_format) > 0) { + + $Report_Head_H3 = '

' . $data_report_format[0]->Title . '

'; + $Report_string = $data_report_format[0]->HTMLData; + } else { + + $Report_Head_H3 = '

' . $data_lab_request[0]->report_name . '

'; + $Report_string = ""; + } + + $Report_Header = ' + + + + + +
' . $Report_Head_H3 . '
+ '; + + $Report_Footer = $data_lab_request[0]->Remark; + + //update report_string with test parameter + + $complete_report = $Report_Header . $Report_string . $Report_Footer; + + $udata = array( + 'Report_Data' => $complete_report, + 'status' => 1, + 'reported_time' => date('Y-m-d H:i:s') + ); + + $this->PathLab_M->update_test_request($udata, $req_id); + + $udata = array( + 'reported_time' => date('Y-m-d H:i:s') + ); + $this->PathLab_M->update_invoice_report($udata, $lab_invoice_request[0]->id); + + $sql = "select * from lab_request where id=" . $req_id; + $query = $this->db->query($sql); + $data['report_format'] = $query->result(); + + $sql = "select * from radiology_ultrasound_template where charge_id=" . $invoice_item[0]->item_id; + $sql = "select * from radiology_ultrasound_template order by Template_Name"; + $query = $this->db->query($sql); + $data['radiology_ultrasound_template'] = $query->result(); + + + $this->load->view('PathLab_Report/lab_final_report_show_xray', $data); + + //redirect('Lab_Admin/show_report_final/'.$req_id); + } + + public function show_report_final($req_id) + { + $sql = "select * from lab_request where id=" . $req_id; + $query = $this->db->query($sql); + $data['report_format'] = $query->result(); + + $sql = "select * from invoice_item where id=" . $data['report_format'][0]->charge_item_id; + $query = $this->db->query($sql); + $data['invoice_item'] = $query->result(); + + $sql = "select * from radiology_ultrasound_template where charge_id=" . $data['invoice_item'][0]->item_id; + $sql = "select * from radiology_ultrasound_template order by Template_Name"; + $query = $this->db->query($sql); + $data['radiology_ultrasound_template'] = $query->result(); + + $this->load->view('PathLab_Report/lab_final_report_show_xray', $data); + } + + public function get_template_xray($req_id) + { + $sql = "select * from radiology_ultrasound_template where id=$req_id"; + $query = $this->db->query($sql); + $radiology_ultrasound_template = $query->result(); + + $Findings = ""; + $Impression = ""; + + if (count($radiology_ultrasound_template) > 0) { + $Findings = $radiology_ultrasound_template[0]->Findings; + $Impression = $radiology_ultrasound_template[0]->Impression; + } + + $rvar = array( + 'Findings' => $Findings, + 'Impression' => $Impression, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + public function Final_Update_xray($req_id) + { + $this->load->model('PathLab_M'); + + $udata = array( + 'Report_Data' => $this->input->post('HTMLData'), + 'report_data_Impression' => $this->input->post('report_data_Impression') + ); + + $this->PathLab_M->update_test_request($udata, $req_id); + + echo "Saved"; + } + + public function confirm_report_xray($req_id) + { + $this->load->model('PathLab_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $udata = array( + 'confirm_by' => $user_name, + 'status' => 2 + ); + + $this->PathLab_M->update_test_request($udata, $req_id); + + echo "Verified and Ready for Print"; + } + + + + public function select_lab_invoice_path($inv_id, $lab_type) + { + $sql = "select * from invoice_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_master'] = $query->result(); + + $pno = $data['inv_master'][0]->attach_id; + + $sql = "select *,GET_AGE_1(dob,age,age_in_month,estimate_dob) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate, + if(gender=1,'Male','Female') as xgender ,if(date_add(insert_date,interval 12 hour)>sysdate(),1,0) as p_edit + from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $sql = "select * from lab_invoice_request + where invoice_id='" . $inv_id . "' and lab_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_invoice_request'] = $query->result(); + + $data['inv_id'] = $inv_id; + $data['lab_type'] = $lab_type; + $data['inv_code'] = $data['inv_master'][0]->invoice_code;; + + $this->load->view('Lab_Panel/lab_invoice_main', $data); + } + + //Other then XRay + + public function select_lab_invoice($inv_id, $lab_type) + { + $sql = "select * from invoice_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_master'] = $query->result(); + + $pno = $data['inv_master'][0]->attach_id; + + $sql = "select *,GET_AGE_1(dob,age,age_in_month,estimate_dob) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate, + if(gender=1,'Male','Female') as xgender ,if(date_add(insert_date,interval 12 hour)>sysdate(),1,0) as p_edit + from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $sql = "select * from lab_invoice_request + where invoice_id='" . $inv_id . "' and lab_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_invoice_request'] = $query->result(); + + $data['inv_id'] = $inv_id; + $data['lab_type'] = $lab_type; + $data['inv_code'] = $data['inv_master'][0]->invoice_code;; + + $this->load->view('Lab_Panel/lab_invoice_xray', $data); + } + + public function lab_date_show($inv_id, $lab_type) + { + $sql = "select * from lab_invoice_request where invoice_id='" . $inv_id . "' and lab_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_invoice_request'] = $query->result(); + + $this->load->view('Lab_Panel/lab_date_show', $data); + } + + public function test_list($inv_id, $lab_type) + { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date,Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + t.item_name,t.item_name,t.id as test_id,check_item_request(m.id,t.id) as check_sample, + r.lab_repo_id,y.group_desc as item_type_desc,r.`status`, + r.id as req_id,r.charge_item_id,r.print_combine + from (( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + left join lab_request r on t.id=r.charge_item_id) + left join lab_repo l on t.item_id=l.charge_id + where y.itype_id=" . $lab_type . " and m.id=" . $inv_id . " + order by t.item_name"; + $query = $this->db->query($sql); + $data['testlist'] = $query->result(); + + $sql = "select * from lab_invoice_request where invoice_id='" . $inv_id . "' and lab_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_invoice_request'] = $query->result(); + + $this->load->view('Lab_Panel/lab_invoice_main_test_list', $data); + } + + // Report Test List + public function xray_test_list($inv_id, $lab_type) + { + $sql = "select m.id as inv_id,m.invoice_code,m.inv_date,Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_rname) as inv_name, + t.item_name,t.item_name,t.id as test_id,check_item_request(m.id,t.id) as check_sample, + r.lab_repo_id,y.group_desc as item_type_desc,r.`status`, + r.id as req_id,r.charge_item_id,r.print_combine + from (( invoice_item t join invoice_master m join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id) + left join lab_request r on t.id=r.charge_item_id) + left join lab_repo l on t.item_id=l.charge_id + where y.itype_id=" . $lab_type . " and m.id=" . $inv_id . " + order by t.item_name"; + $query = $this->db->query($sql); + $data['testlist'] = $query->result(); + + $sql = "select * from lab_invoice_request where invoice_id='" . $inv_id . "' and lab_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_invoice_request'] = $query->result(); + + $this->load->view('Lab_Panel/lab_invoice_main_xray_test_list', $data); + } + + public function report_file_list($inv_id, $lab_type, $delete = 0) + { + $sql = "select * from file_upload_data where isdelete=" . $delete . " and charge_id='" . $inv_id . "' and charge_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_file_list'] = $query->result(); + + $this->load->view('Lab_Panel/lab_report_file_list', $data); + } + + // Other Then Pathology like Xray , MRI , Ultra sound + + public function select_lab_radiology($inv_id, $lab_type) + { + $sql = "select * from invoice_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_master'] = $query->result(); + + $pno = $data['inv_master'][0]->attach_id; + + $sql = "select *,GET_AGE_1(dob,age,age_in_month,estimate_dob) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate, + if(gender=1,'Male','Female') as xgender ,if(date_add(insert_date,interval 12 hour)>sysdate(),1,0) as p_edit + from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $sql = "select * from lab_invoice_request + where invoice_id='" . $inv_id . "' and lab_type='" . $lab_type . "'"; + $query = $this->db->query($sql); + $data['lab_invoice_request'] = $query->result(); + + $data['inv_id'] = $inv_id; + $data['lab_type'] = $lab_type; + $data['inv_code'] = $data['inv_master'][0]->invoice_code;; + + $this->load->view('Lab_Panel/lab_invoice_XRay', $data); + } +} diff --git a/old_code_ci3/controllers/Master_data.php b/old_code_ci3/controllers/Master_data.php new file mode 100644 index 0000000..8459763 --- /dev/null +++ b/old_code_ci3/controllers/Master_data.php @@ -0,0 +1,107 @@ +load->model('Master_M'); + } + + function tag_index() + { + $sql="select * from tag_master order by tag_name "; + $query = $this->db->query($sql); + $data['tag_master']= $query->result(); + + $this->load->view('MasterData/tag_master_index',$data); + } + + function tag_add() + { + $this->load->view('MasterData/tag_master_add'); + } + + function tag_save() + { + $input_tag_name = $this->input->post('input_tag_name'); + $input_tag_desc = $this->input->post('input_tag_desc'); + $hid_tag_id = $this->input->post('hid_tag_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $insert_data=array( + 'tag_name'=>$input_tag_name, + 'tag_type_id'=>'0', + 'tag_desc'=>$input_tag_desc, + 'insert_dateimte'=>date('Y-m-d H:i:s'), + 'insert_by'=>$user_name, + ); + + if($hid_tag_id==0){ + $inser_id=$this->Master_M->insert_tag_master($insert_data); + }else{ + $inser_id=$this->Master_M->update_tag_master($insert_data,$hid_tag_id); + } + + echo $inser_id; + } + + // Employee Master + public function Employee_master_list() + { + $sql="select * from employee_master order by emp_name "; + $query = $this->db->query($sql); + $data['employee_master']= $query->result(); + + $this->load->view('MasterData/employee_master_list',$data); + } + + function Employee_add() + { + $this->load->view('MasterData/emp_master_add'); + } + + function Employee_edit($emp_id) + { + $sql="select * from employee_master where emp_id= $emp_id"; + $query = $this->db->query($sql); + $data['employee_master']= $query->result(); + + $this->load->view('MasterData/emp_master_edit',$data); + } + + function Employee_save() + { + $input_emp_code = $this->input->post('input_emp_code'); + $input_emp_name = $this->input->post('input_emp_name'); + $input_emp_dob = $this->input->post('input_emp_dob'); + $input_emp_joinning_date = $this->input->post('input_emp_joinning_date'); + $input_emp_phone_no = $this->input->post('input_emp_phone_no'); + $hid_emp_id = $this->input->post('hid_emp_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' ['.$user_id.']'; + + $insert_data=array( + 'emp_code'=>$input_emp_code, + 'emp_name'=>$input_emp_name, + 'emp_dob'=>$input_emp_dob, + 'emp_joinning_date'=>$input_emp_joinning_date, + 'emp_phone_no'=>$input_emp_phone_no, + + 'add_by'=>$user_name.' : '.date('Y-m-d H:i:s'), + ); + + if($hid_emp_id==0){ + $inser_id=$this->Master_M->insert_employee_master($insert_data); + }else{ + $inser_id=$this->Master_M->update_employee_master($insert_data,$hid_emp_id); + } + + echo $inser_id; + } +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Medical.php b/old_code_ci3/controllers/Medical.php new file mode 100644 index 0000000..dbd9066 --- /dev/null +++ b/old_code_ci3/controllers/Medical.php @@ -0,0 +1,5230 @@ +load->view('Medical/Dashboard'); + } + + public function select_store($store_id) + { + $sql = "select * from store_master where store_id=" . $store_id; + $query = $this->db->query($sql); + $data['store_master'] = $query->result(); + + $this->load->view('Medical/Store_Dashboard', $data); + } + + public function main_store() + { + $this->load->view('Medical/Stock/main_store_dashboard'); + } + + + public function DrugList() + { + $this->load->view('Medical/Drug_Details'); + + //$sql="select item_id,itemname,dosage from drug_temp_25072017"; + //$query = $this->db->query($sql); + //$data['drug_data']= $query->result(); + + //$this->load->view('Medical/Drug_Details_all',$data); + } + + public function Purchase() + { + $this->load->view('Medical/Purchase/supplier_list'); + } + + public function PurchaseMasterEdit($inv_id) + { + $sql = "select * from med_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $sql = "select p.*,s.name_supplier from purchase_invoice p join med_supplier s on p.sid=s.sid where p.id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_master_data'] = $query->result(); + + $sql = "select * from purchase_invoice_item where purchase_id='" . $inv_id . "' "; + $query = $this->db->query($sql); + $data['purchase_item'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_invoice_master_edit', $data); + } + + public function UpdatePurchase() + { + $rec_id = $this->input->post('hid_purchaseid'); + $sid = $this->input->post('input_supplier'); + $invoice_code = $this->input->post('input_invoicecode'); + $d_invoice = $this->input->post('datepicker_invoice'); + $ischallan = $this->input->post('cbo_billtype'); + + $Udata = array( + 'sid' => $sid, + 'date_of_invoice' => str_to_MysqlDate($d_invoice), + 'Invoice_no' => $invoice_code, + 'ischallan' => $ischallan + ); + + $this->load->model('Medical_M'); + + $update_id = $this->Medical_M->update_purchase($Udata, $rec_id); + + $rvar = array( + 'insertid' => 1, + 'show_text' => 'Data Update' + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function UpdatePurchaseInvoiceStatus($purchase_inv_id, $inv_status) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name . '' . $user->last_name . '[' . $user_id . ']' . date('d-m-Y H:i:s'); + + $Udata = array( + 'inv_status' => $inv_status, + 'inv_status_update_by' => $user_name_info, + ); + + $this->load->model('Medical_M'); + + $update_id = $this->Medical_M->update_purchase($Udata, $purchase_inv_id); + + redirect('Medical/PurchaseMasterEdit/' . $purchase_inv_id); + } + + public function purchase_scan_doc($purchase_inv_id) + { + $data['purchase_inv_id'] = $purchase_inv_id; + + $sql = "select * from purchase_invoice where id='" . $purchase_inv_id . "' "; + $query = $this->db->query($sql); + $data['purchase_invoice'] = $query->result(); + + $sql = "select * from purchase_invoice_scan_file where purchase_id='" . $purchase_inv_id . "' "; + $query = $this->db->query($sql); + $data['purchase_invoice_scan_file'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_invoice_scan', $data); + } + + public function purchase_file_list($inv_id) + { + $sql = "select * from purchase_invoice_scan_file where purchase_id=$inv_id"; + $query = $this->db->query($sql); + $data['purchase_file_rec'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_file_show', $data); + } + + public function save_image($purchase_id) + { + $filename = 'purchase-' . $purchase_id . '-' . time() . '.jpg'; + + $folder_name = 'medical_uploads/purchase_invoice/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('webcam')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + } else { + $data = array('upload_data' => $this->upload->data()); + + $this->load->model('FileMedical_M'); + + $file_insert_id = $this->FileMedical_M->insert_purchase_scan($data['upload_data']); + + $udata = array( + 'upload_by' => $user_name, + 'purchase_id' => $purchase_id, + 'upload_by_id' => $user_id + ); + + if ($file_insert_id > 0) { + $this->FileMedical_M->update_purchase_scan($udata, $file_insert_id); + } + + echo $filename; + } + } + + public function purchase_file_last_list($purchase_id = '') + { + + $sql = "select * from purchase_invoice_scan_file where purchase_id=$purchase_id order by id desc limit 5"; + $query = $this->db->query($sql); + $data['purchase_invoice_scan_file'] = $query->result(); + + $this->load->view('Medical/Purchase/scan_purchase_list', $data); + } + + public function purchase_file_hide($file_id, $purchase_id = '') + { + $user = $this->ion_auth->user()->row(); + $upload_by_id = $user->id; + + $udata = array( + 'show_type' => '1', + 'upload_by_id' => $upload_by_id + ); + $this->load->model('FileMedical_M'); + + $this->FileMedical_M->delete_purchase_scan_fileupload( $file_id); + + redirect('/Medical/purchase_file_last_list/' . $purchase_id); + } + + + public function PurchaseNew() + { + $sql = "select * from med_supplier where active=1 order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Purchase/new_purchase_invoice', $data); + } + + public function SupplierList() + { + $sql = "select * from med_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Purchase/supplier_master', $data); + } + + public function PurchaseInvoice() + { + $sdata = trim($this->input->post('txtsearch')); + + //$sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if (trim($sdata) == '') { + $sql = "select p.id,p.Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice,p.sid,s.name_supplier, + s.short_name,s.gst_no, + p.T_Net_Amount as tamount,p.ischallan + from (purchase_invoice p join med_supplier s on p.sid=s.sid) + + group by p.id + order by p.id desc limit 50"; + } else { + + $numric_condition = ""; + + if (is_numeric($sdata)) { + $numric_condition = " OR p.Invoice_no=" . $sdata; + } + + $sql = "select p.id,p.Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice, + p.sid,s.name_supplier,s.short_name,s.gst_no, + p.T_Net_Amount as tamount,p.ischallan + from (purchase_invoice p join med_supplier s on p.sid=s.sid) + where (p.Invoice_no LIKE '%" . $sdata . "%' " . $numric_condition . " ) + group by p.id order by p.id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['purchase_list'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_supp_list', $data); + } + + public function PurchaseInvoiceEdit($inv_id) + { + $sql = "select p.id,p.Invoice_no,p.date_of_invoice,date_format(p.date_of_invoice,'%d/%m/%Y') as str_date_of_invoice, + p.sid,s.name_supplier,s.short_name,s.gst_no,p.inv_status,p.ischallan + from purchase_invoice p join med_supplier s on p.sid=s.sid + where p.id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_invoice'] = $query->result(); + + $sql = "select * from purchase_invoice_item where purchase_id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_invoice_item'] = $query->result(); + + $sql = "select * from med_gst_per "; + $query = $this->db->query($sql); + $data['med_gst_per'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_invoice_edit', $data); + } + + public function challan_invoice($supplier_id) + { + $sql = "SELECT p.id,t.id AS ss_no,p.Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice,p.sid,s.name_supplier, + s.short_name,s.gst_no, + p.T_Net_Amount as tamount,p.ischallan, + t.Item_name,t.qty,t.qty_free,t.mrp + FROM (purchase_invoice p join med_supplier s on p.sid=s.sid) + JOIN purchase_invoice_item t ON p.id=t.purchase_id + where p.sid=$supplier_id and p.ischallan=1 + group by p.id,t.id "; + + $query = $this->db->query($sql); + $data['purchase_challan_item'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_challan_list', $data); + } + + public function challan_item_to_purchase($ss_no, $purchase_id) + { + $sql = "select * from purchase_invoice_item where id=$ss_no"; + $query = $this->db->query($sql); + $purchase_invoice_item = $query->result(); + + if (count($purchase_invoice_item) > 0) { + $old_purchase_id = $purchase_invoice_item[0]->purchase_id; + + $Pdata = array( + 'purchase_id' => $purchase_id, + 'old_purchase_id' => $old_purchase_id, + ); + + $this->load->model('Medical_M'); + $is_update_stock = $this->Medical_M->update_purchase_item($Pdata, $ss_no); + $this->db->query("CALL p_purchase_invoice(" . $old_purchase_id . ")"); + + $rvar = array( + 'is_transfer' => $is_update_stock, + 'show_text' => "Item Addedd Successfully", + ); + } else { + $rvar = array( + 'is_transfer' => 0, + 'show_text' => "Item Not Found ", + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function challan_item_return($ss_no) + { + $sql = "select * from purchase_invoice_item where old_purchase_id>0 and id=$ss_no"; + $query = $this->db->query($sql); + $purchase_invoice_item = $query->result(); + + if (count($purchase_invoice_item) > 0) { + $old_challan_id = $purchase_invoice_item[0]->old_purchase_id; + $current_pur_id = $purchase_invoice_item[0]->purchase_id; + + $sql = "select * from purchase_invoice where id=$old_challan_id"; + $query = $this->db->query($sql); + $challan_invoice = $query->result(); + + if (count($challan_invoice) > 0) { + $Pdata = array( + 'purchase_id' => $old_challan_id, + 'old_purchase_id' => 0, + ); + + $this->load->model('Medical_M'); + $is_update_stock = $this->Medical_M->update_purchase_item($Pdata, $ss_no); + $this->db->query("CALL p_purchase_invoice(" . $current_pur_id . ")"); + + $rvar = array( + 'is_transfer' => $is_update_stock, + 'show_text' => "Item Addedd Successfully", + ); + } else { + + $Pdata = array( + 'purchase_id' => $old_challan_id, + 'old_purchase_id' => 0, + ); + + $this->load->model('Medical_M'); + $is_update_stock = $this->Medical_M->update_purchase_item($Pdata, $ss_no); + + + $rvar = array( + 'is_transfer' => 0, + 'show_text' => "Challan Not Found ", + ); + } + } else { + $rvar = array( + 'is_transfer' => 0, + 'show_text' => "Item Not Found ", + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function purchase_invoice_delete($inv_id) + { + + $sql = "select * from purchase_invoice_item where purchase_id=$inv_id"; + $query = $this->db->query($sql); + $purchase_invoice_item = $query->result(); + + if (count($purchase_invoice_item) > 0) { + $rvar = array( + 'is_delete' => 0, + 'show_text' => "Invoice has Items, Empty the item list", + ); + } else { + $this->load->model('Medical_M'); + $is_delete = $this->Medical_M->delete_purchase($inv_id); + $rvar = array( + 'is_delete' => 1, + 'show_text' => "Invoice has been deleted", + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function SupplierListSub() + { + $sql = "select * from med_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Purchase/supplier_master_sub', $data); + } + + public function SupplierEdit($sid = 0) + { + $sql = "select * from med_supplier where sid=" . $sid; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $sql = "select * from india_state "; + $query = $this->db->query($sql); + $data['india_state'] = $query->result(); + + $this->load->view('Medical/Purchase/supplier_Edit', $data); + } + + public function CreatePurchase() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_invoicecode', + 'label' => 'Invoice No', + 'rules' => 'required|min_length[3]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $sid = $this->input->post('input_supplier'); + $invoice_code = $this->input->post('input_invoicecode'); + $d_invoice = $this->input->post('datepicker_invoice'); + $ischallan = $this->input->post('cbo_billtype'); + + $where = " where sid=$sid"; + + if (is_numeric($invoice_code)) + $where .= " and Invoice_no=" . $invoice_code; + else + $where .= " and Invoice_no='" . $invoice_code . "'"; + + $sql = "select count(*) as no_rec from purchase_invoice " . $where; + $query = $this->db->query($sql); + $chk_rec = $query->result(); + + if ($chk_rec[0]->no_rec == 0) { + $Udata = array( + 'sid' => $sid, + 'date_of_invoice' => str_to_MysqlDate($d_invoice), + 'Invoice_no' => $invoice_code, + 'ischallan' => $ischallan + ); + + $this->load->model('Medical_M'); + + $inser_id = $this->Medical_M->insert_purchase($Udata); + $send_msg = "Added Successfully"; + + if ($inser_id > 0) { + $show_text = $send_msg; + } else { + $show_text = $send_msg; + } + } else { + $show_text = 'Record Already Exist'; + $inser_id = 0; + } + + $rvar = array( + 'insertid' => $inser_id, + 'show_text' => $show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_msg = validation_errors(); + $rvar = array( + 'insertid' => 0, + 'show_text' => $send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + public function SupplierUpdate($sid = 0) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_name_supplier', + 'label' => 'Supplier Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_short_name', + 'label' => 'Short Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_gst_no', + 'label' => 'GST No.', + 'rules' => 'required|min_length[5]|max_length[15]' + ), + array( + 'field' => 'input_state', + 'label' => 'State', + 'rules' => 'required|min_length[1]|max_length[20]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $sid = $this->input->post('hid_sid'); + $name_supplier = $this->input->post('input_name_supplier'); + $short_name = $this->input->post('input_short_name'); + $contact_no = $this->input->post('input_contact_no'); + $gst_no = $this->input->post('input_gst_no'); + $city = $this->input->post('input_city'); + $state = $this->input->post('input_state'); + $active = ($this->input->post('chk_active') == 'on' ? 1 : 0); + + $Udata = array( + 'name_supplier' => $name_supplier, + 'short_name' => $short_name, + 'contact_no' => $contact_no, + 'gst_no' => $gst_no, + 'city' => $city, + 'state' => $state, + 'active' => $active + ); + + $this->load->model('Medical_M'); + + if ($sid > 0) { + $inser_id = $this->Medical_M->update_supplier($Udata, $sid); + $send_msg = "Saved Successfully"; + } else { + $inser_id = $this->Medical_M->insert_supplier($Udata); + $send_msg = "Added Successfully"; + } + + if ($inser_id > 0) { + $show_text = Show_Alert('success', 'Success', $send_msg); + } else { + $show_text = Show_Alert('danger', 'Error', $send_msg); + } + + $rvar = array( + 'insertid' => $inser_id, + 'show_text' => $show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_msg = validation_errors(); + $rvar = array( + 'insertid' => 0, + 'show_text' => Show_Alert('danger', 'Error', $send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function StockDrugList() + { + $this->load->view('Medical/Medical_stock_drug'); + } + + public function add_stock() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_product_code', + 'label' => 'Product Code', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + array( + 'field' => 'input_product_name', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_product_mrp', + 'label' => 'Product MRP', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_selling_price', + 'label' => 'Selling Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_qty', + 'label' => 'Product Qty', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_package', + 'label' => 'Package', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_HSNCODE', + 'label' => 'HSNCODE', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_SGST', + 'label' => 'SGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $item_code = $this->input->post('input_product_code'); + + if ($item_code == 'IC0000000') { + $item_code = 'MC' . date('ymdhis'); + } + + $selling_price = $this->input->post('input_selling_price'); + + $package = $this->input->post('input_package'); + $qty = $this->input->post('input_qty'); + $total_unit = $package * $qty; + $unit_rate = $selling_price / $qty; + + $datepicker_doe_month = $this->input->post('datepicker_doe_month'); + $datepicker_doe_year = $this->input->post('datepicker_doe_year'); + + $datepicker_doe = "20" . $datepicker_doe_year . "-" . $datepicker_doe_month . "-01"; + + $this->load->model('Medical_M'); + $data = array( + 'item_code' => $item_code, + 'item_name' => $this->input->post('input_product_name'), + 'rack_no' => $this->input->post('input_rack_no'), + 'shelf_no' => $this->input->post('input_shelf_no'), + 'cold_storage' => $this->input->post('input_storage'), + 'batch_no' => $this->input->post('input_batch_code'), + 'qty' => $this->input->post('input_qty'), + 'packing' => $this->input->post('input_package'), + 'expiry_date' => $datepicker_doe, + 'mrp' => $this->input->post('input_product_mrp'), + 'purchase_price' => $this->input->post('input_purchase_price'), + 'selling_price' => $this->input->post('input_selling_price'), + 'total_unit' => $total_unit, + 'unit_rate' => $unit_rate, + 'margin' => $this->input->post('input_margin'), + 'formulation' => $this->input->post('input_formulation'), + 'stock_date' => str_to_MysqlDate($this->input->post('datepicker_stock')), + 'min_qty' => $this->input->post('input_minqty'), + 'HSNCODE' => $this->input->post('input_HSNCODE'), + 'CGST' => $this->input->post('input_CGST'), + 'SGST' => $this->input->post('input_SGST'), + 'IGST' => $this->input->post('input_IGST'), + 'dosage' => $this->input->post('input_dosage'), + 'supplier_id' => $this->input->post('input_supplier') + ); + + $data_drug = array( + 'item_id' => $item_code, + 'itemname' => $this->input->post('input_product_name'), + 'mrp' => $this->input->post('input_product_mrp'), + 'formulation' => $this->input->post('input_formulation'), + 'HSNCODE' => $this->input->post('input_HSNCODE'), + 'CGST' => $this->input->post('input_CGST'), + 'SGST' => $this->input->post('input_SGST'), + 'IGST' => $this->input->post('input_IGST'), + 'dosage' => $this->input->post('input_dosage') + ); + $show_text = ''; + + $sql = "select * from drug_temp where item_id='" . $item_code . "'"; + $query = $this->db->query($sql); + $drug_item = $query->result(); + + if (count($drug_item) > 0) { + $inser_id = $this->Medical_M->update_drug($data_drug, $item_code); + } else { + $inser_id = $this->Medical_M->insert_drug_add($data_drug); + } + + if ($inser_id > 0) { + $inser_id = 0; + $inser_id = $this->Medical_M->insert_stock_add($data); + if ($inser_id > 0) { + $send_msg = "Added"; + } else { + $send_msg = "Error : Add in Stock Table"; + } + } else { + $send_msg = "Error : Addition data in Master Drug Table"; + } + + if ($inser_id > 0) { + $show_text = Show_Alert('success', 'Success', $send_msg); + } else { + $show_text = Show_Alert('danger', 'Error', $send_msg); + } + + $rvar = array( + 'insertid' => $inser_id, + 'product_code' => $item_code, + 'show_text' => $show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_msg = validation_errors(); + $rvar = array( + 'insertid' => 0, + 'show_text' => Show_Alert('danger', 'Error', $send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function update_master() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_product_code', + 'label' => 'Product Code', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + array( + 'field' => 'input_product_name', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_product_mrp', + 'label' => 'Product MRP', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_selling_price', + 'label' => 'Selling Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_HSNCODE', + 'label' => 'HSNCODE', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_SGST', + 'label' => 'SGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $item_code = $this->input->post('input_product_code'); + + $this->load->model('Medical_M'); + + $data_drug = array( + 'item_id' => $item_code, + 'itemname' => $this->input->post('input_product_name'), + 'mrp' => $this->input->post('input_product_mrp'), + 'formulation' => $this->input->post('input_formulation'), + 'HSNCODE' => $this->input->post('input_HSNCODE'), + 'CGST' => $this->input->post('input_CGST'), + 'SGST' => $this->input->post('input_SGST'), + 'IGST' => $this->input->post('input_IGST'), + 'dosage' => $this->input->post('input_dosage') + ); + $show_text = ''; + + $sql = "select * from drug_temp where item_id='" . $item_code . "'"; + $query = $this->db->query($sql); + $drug_item = $query->result(); + + if (count($drug_item) > 0) { + $inser_id = $this->Medical_M->update_drug($data_drug, $item_code); + } else { + $inser_id = $this->Medical_M->insert_drug_add($data_drug); + } + + if ($inser_id > 0) { + $inser_id = 0; + $inser_id = $this->Medical_M->insert_stock_add($data); + if ($inser_id > 0) { + $send_msg = "Update"; + } else { + $send_msg = "Error : Edit in Drug Master"; + } + } else { + $send_msg = "Error : Addition data in Master Drug Table"; + } + + if ($inser_id > 0) { + $show_text = Show_Alert('success', 'Success', $send_msg); + } else { + $show_text = Show_Alert('danger', 'Error', $send_msg); + } + + $rvar = array( + 'insertid' => $inser_id, + 'product_code' => $item_code, + 'show_text' => $show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_msg = validation_errors(); + $rvar = array( + 'insertid' => 0, + 'show_text' => Show_Alert('danger', 'Error', $send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function update_stock($ss_no) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_product_code', + 'label' => 'Product Code', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + array( + 'field' => 'input_product_name', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_product_mrp', + 'label' => 'Product MRP', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_selling_price', + 'label' => 'Selling Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_qty', + 'label' => 'Product Qty', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_package', + 'label' => 'Package', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_HSNCODE', + 'label' => 'HSNCODE', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_SGST', + 'label' => 'SGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $item_code = $this->input->post('input_product_code'); + + $selling_price = $this->input->post('input_selling_price'); + + $package = $this->input->post('input_package'); + $qty = $this->input->post('input_qty'); + $total_unit = $package * $qty; + $unit_rate = $selling_price / $qty; + + $datepicker_doe_month = $this->input->post('datepicker_doe_month'); + $datepicker_doe_year = $this->input->post('datepicker_doe_year'); + + $datepicker_doe = "20" . $datepicker_doe_year . "-" . $datepicker_doe_month . "-01"; + + $this->load->model('Medical_M'); + $data = array( + 'item_code' => $item_code, + 'item_name' => $this->input->post('input_product_name'), + 'rack_no' => $this->input->post('input_rack_no'), + 'shelf_no' => $this->input->post('input_shelf_no'), + 'cold_storage' => $this->input->post('input_storage'), + 'batch_no' => $this->input->post('input_batch_code'), + 'qty' => $this->input->post('input_qty'), + 'packing' => $this->input->post('input_package'), + 'expiry_date' => $datepicker_doe, + 'mrp' => $this->input->post('input_product_mrp'), + 'purchase_price' => $this->input->post('input_purchase_price'), + 'selling_price' => $this->input->post('input_selling_price'), + 'total_unit' => $total_unit, + 'unit_rate' => $unit_rate, + 'margin' => $this->input->post('input_margin'), + 'formulation' => $this->input->post('input_formulation'), + 'stock_date' => str_to_MysqlDate($this->input->post('datepicker_stock')), + 'min_qty' => $this->input->post('input_minqty'), + 'HSNCODE' => $this->input->post('input_HSNCODE'), + 'CGST' => $this->input->post('input_CGST'), + 'SGST' => $this->input->post('input_SGST'), + 'IGST' => $this->input->post('input_IGST'), + 'supplier_id' => $this->input->post('input_supplier') + ); + + $show_text = ''; + + $is_update_stock = 0; + + $is_update_stock = $this->Medical_M->update_stock_upd($data, $ss_no); + + if ($is_update_stock > 0) { + $send_msg = "Updated"; + } else { + $send_msg = "Error : Update in Stock Table"; + } + + if ($is_update_stock > 0) { + $show_text = Show_Alert('success', 'Updated', $send_msg); + } else { + $show_text = Show_Alert('danger', 'Error', $send_msg); + } + + $rvar = array( + 'is_update_stock' => $is_update_stock, + 'product_code' => $item_code, + 'show_text' => $show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_msg = validation_errors(); + $rvar = array( + 'is_update_stock' => 0, + 'show_text' => Show_Alert('danger', 'Error', $send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function purchase_update_stock($inv_id, $return_stock = 0) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from purchase_invoice where id=" . $inv_id; + $query = $this->db->query($sql); + $purchase_invoice = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name . '' . $user->last_name . '[' . $user_id . ']' . date('d-m-Y H:i:s'); + + $FormRules = array( + array( + 'field' => 'input_product_code', + 'label' => 'Not Found in Database', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_drug_hid', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_product_mrp', + 'label' => 'Product MRP', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_selling_price', + 'label' => 'Selling Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_Qty', + 'label' => 'Product Qty', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_package', + 'label' => 'Package', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_HSNCODE', + 'label' => 'HSNCODE', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_SGST', + 'label' => 'SGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_purchase_price', + 'label' => 'Purchase Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $item_code = $this->input->post('input_product_code'); + $item_id = $this->input->post('invoice_item_id'); + + $datepicker_doe_month = $this->input->post('datepicker_doe_month'); + $datepicker_doe_year = $this->input->post('datepicker_doe_year'); + + $datepicker_doe = "20" . $datepicker_doe_year . "-" . $datepicker_doe_month . "-01"; + + $this->load->model('Medical_M'); + + $Pdata = array( + 'purchase_id' => $inv_id, + 'item_code' => $item_code, + 'item_name' => $this->input->post('input_drug_hid'), + 'packing' => $this->input->post('input_package'), + 'batch_no' => $this->input->post('input_batch_code'), + 'purchase_price' => $this->input->post('input_purchase_price'), + 'expiry_date' => $datepicker_doe, + 'mrp' => $this->input->post('input_product_mrp'), + + 'qty' => $this->input->post('input_Qty'), + 'qty_free' => $this->input->post('input_Qty_Free'), + + 'discount' => $this->input->post('input_disc_price'), + + 'CGST_per' => $this->input->post('input_CGST'), + 'SGST_per' => $this->input->post('input_SGST'), + + 'HSNCODE' => $this->input->post('input_HSNCODE'), + + 'cold_storage' => $this->input->post('input_storage'), + 'shelf_no' => $this->input->post('input_shelf_no'), + 'rack_no' => $this->input->post('input_rack_no'), + 'stock_date' => $purchase_invoice[0]->date_of_invoice, + + 'selling_price' => $this->input->post('input_selling_price'), + + 'sch_disc_amt' => $this->input->post('input_sch_amount'), + 'sch_disc_per' => $this->input->post('input_sch_disc'), + + 'insert_by' => $user_name_info, + + 'item_return' => $return_stock + ); + + $show_text = ''; + + $is_update_stock = 0; + + $send_msg = ""; + + if ($item_id < 1) { + $is_update_stock = $this->Medical_M->insert_purchase_item($Pdata); + $send_msg = "Added"; + } else { + $sql = "select * from purchase_invoice_item where id='$item_id' "; + $query = $this->db->query($sql); + $drug_item = $query->result(); + + if (count($drug_item) > 0) { + $tot_sale_qty = $drug_item[0]->total_sale_unit; + + $qty = $this->input->post('input_Qty'); + $qty_free = $this->input->post('input_Qty_Free'); + + $packing = $this->input->post('input_package'); + + $tot_qty = ($qty + $qty_free) * $packing; + + if ($tot_sale_qty <= $tot_qty) { + $is_update_stock = $this->Medical_M->update_purchase_item($Pdata, $item_id); + if ($is_update_stock > 0) { + $send_msg = "Updated"; + } else { + $send_msg = "Error : Update in Stock Table"; + } + } else { + $send_msg = "Error : Update Qty is Less then saled Qty :" . $tot_qty . " / Saled :" . $tot_sale_qty; + + //Update While Qty in Minus + + //$is_update_stock=$this->Medical_M->update_purchase_item($Pdata,$item_id); + /* + if($is_update_stock>0) + { + $send_msg="Updated : But Error : Update Qty is Less then saled Qty :".$tot_qty." / Saled :".$tot_sale_qty; + }else{ + $send_msg="Error : Update in Stock Table"; + } + */ + } + } else { + $send_msg = "Error : Record Not Found in Stock Table"; + } + } + + $rvar = array( + 'is_update_stock' => $is_update_stock, + 'product_code' => $item_code, + 'show_text' => $send_msg + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_msg = validation_errors(); + $rvar = array( + 'is_update_stock' => 0, + 'show_text' => $send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + function purchase_invoice_item_edit($inv_id, $inv_item_id) + { + $sql = "select *, + date_format(expiry_date,'%m') as str_expiry_month , + date_format(expiry_date,'%y') as str_expiry_year + from purchase_invoice_item where id=" . $inv_item_id . " and purchase_id=" . $inv_id; + $query = $this->db->query($sql); + $purchase_invoice_item = $query->result(); + + if (count($purchase_invoice_item) > 0) { + $rvar = array( + 'is_update_stock' => '1', + 'item_id' => $purchase_invoice_item[0]->id, + 'product_code' => $purchase_invoice_item[0]->item_code, + 'product_mrp' => $purchase_invoice_item[0]->mrp, + 'selling_price' => $purchase_invoice_item[0]->selling_price, + 'batch_code' => $purchase_invoice_item[0]->batch_no, + 'disc_price' => $purchase_invoice_item[0]->discount, + 'qty' => $purchase_invoice_item[0]->qty, + 'qty_free' => $purchase_invoice_item[0]->qty_free, + 'package' => $purchase_invoice_item[0]->packing, + 'purchase_price' => $purchase_invoice_item[0]->purchase_price, + 'datepicker_doe_month' => $purchase_invoice_item[0]->str_expiry_month, + 'datepicker_doe_year' => $purchase_invoice_item[0]->str_expiry_year, + 'drug' => $purchase_invoice_item[0]->Item_name, + + 'sch_disc_amt' => $purchase_invoice_item[0]->sch_disc_amt, + 'sch_disc_per' => $purchase_invoice_item[0]->sch_disc_per, + + 'HSNCODE' => $purchase_invoice_item[0]->HSNCODE, + 'CGST_per' => $purchase_invoice_item[0]->CGST_per, + 'SGST_per' => $purchase_invoice_item[0]->SGST_per, + + 'cold_storage' => $purchase_invoice_item[0]->cold_storage, + 'shelf_no' => $purchase_invoice_item[0]->shelf_no, + 'rack_no' => $purchase_invoice_item[0]->rack_no, + + ); + } else { + $rvar = array( + 'is_update_stock' => '0', + 'show_text' => $sql + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function purchase_invoice_item_list($inv_id) + { + $sql = "select *,date_format(expiry_date,'%m/%y') as exp_date_str from purchase_invoice_item where purchase_id='" . $inv_id . "' "; + $query = $this->db->query($sql); + $data['purchase_item'] = $query->result(); + + $sql = "select * from purchase_invoice where id='" . $inv_id . "' "; + $query = $this->db->query($sql); + $data['purchase_invoice'] = $query->result(); + + + + $this->load->view('Medical/Purchase/purchase_invoice_item', $data); + } + + public function purchase_invoice_item_list_old($item_code) + { + $sql = "SELECT s.name_supplier, date_format(p.date_of_invoice,'%d-%m-%Y') as date_of_invoice_str, + i.Item_name,i.packing,i.purchase_price,i.qty,i.qty_free,i.mrp,i.discount,i.sch_disc_per,i.purchase_unit_rate,p.Invoice_no + FROM (purchase_invoice p JOIN purchase_invoice_item i ON p.id=i.purchase_id) + JOIN med_supplier s ON p.sid=s.sid + WHERE i.item_code=$item_code ORDER BY i.id DESC LIMIT 5 "; + $query = $this->db->query($sql); + $data['purchase_item_old'] = $query->result(); + + $this->load->view('Medical/Purchase/purchase_item_old', $data); + } + + public function purchase_invoice_item_delete($inv_id, $inv_item_del) + { + $this->load->model('Medical_M'); + + $sql = "select * from purchase_invoice_item where id='$inv_item_del' "; + $query = $this->db->query($sql); + $drug_item = $query->result(); + + if (count($drug_item) > 0) { + $sale_qty = $drug_item[0]->total_sale_unit; + + if ($sale_qty > 0) { + $rvar = array( + 'is_update_stock' => 0, + 'show_text' => 'Sold some Quantity of this Item', + ); + } else { + $is_update_stock = $this->Medical_M->delete_purchase_item($inv_id, $inv_item_del); + $rvar = array( + 'is_update_stock' => 1, + 'show_text' => 'Removed Successfully', + ); + } + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function AddDrugStock($drug_item_code) + { + $sql = "select * from drug_temp where item_id='" . $drug_item_code . "' "; + $query = $this->db->query($sql); + $data['drug_item'] = $query->result(); + + $sql = "select * from stock_addition where item_code='" . $drug_item_code . "' "; + $query = $this->db->query($sql); + $data['drug_stock_item'] = $query->result(); + + $sql = "select * from med_supplier "; + $query = $this->db->query($sql); + $data['med_supplier'] = $query->result(); + + $this->load->view('Medical/Drug_Stock_Add', $data); + } + + public function UpdateDrugStock($ss_no) + { + $sql = "select * from stock_addition where ss_no='" . $ss_no . "' "; + $query = $this->db->query($sql); + $data['stock_item'] = $query->result(); + + $sql = "select * from med_supplier "; + $query = $this->db->query($sql); + $data['med_supplier'] = $query->result(); + + $this->load->view('Medical/Stock_Update', $data); + } + + public function load_stock_data($item_code) + { + $sql = "select * from stock_addition where item_code='" . $item_code . "' "; + $query = $this->db->query($sql); + $data['drug_stock_item'] = $query->result(); + + echo ' + + + + + + + + + + + + + + '; + + $srno = 0; + + foreach ($data['drug_stock_item'] as $row) { + $srno = $srno + 1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + + echo ' + + + + + + + + + + + + +
Item CodeItem NameFormulationStorage/Shelf/Rack No.Batch No.Qty /Sale QtyExpiryMRPRate/Unit
' . $row->item_code . '' . $row->item_name . '' . $row->formulation . '' . $row->cold_storage . '/' . $row->shelf_no . '/' . $row->rack_no . '' . $row->batch_no . '' . $row->total_unit . '/' . $row->total_sale_unit . '' . $row->expiry_date . '' . $row->mrp . '' . $row->unit_rate . '
Item CodeItem NameFormulationStorage/Shelf/Rack No.Batch No.Qty /Sale QtyExpiryMRPRate/Unit
'; + } + + public function Invoice_counter() + { + $sql = "select * from invoice_med_master"; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "select * from inv_med_item"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select sum(amount) as Gtotal from inv_med_item"; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + if ($data['invoiceMaster'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['invoiceMaster'][0]->case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + } + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $this->load->view('Medical/Medical_Invoice_V', $data); + } + + public function Invoice_Med_Draft() + { + $this->load->view('Medical/Draft_Med_Invoice'); + } + + public function Invoice_Med_Return() + { + $this->load->view('Medical/Draft_Med_Return_Invoice'); + } + + public function Invoice_med_show($inv_id) + { + $sql = "select *,if(ipd_credit>0,'Credit to IPD','CASH') as credit_status, + if(case_credit>0,'Credit to Org','CASH') as credit_org_status from invoice_med_master + where id=$inv_id"; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $patient_id = $data['invoiceMaster'][0]->patient_id; + $inv_phone_number = $data['invoiceMaster'][0]->inv_phone_number; + + if ($patient_id == 0) { + } + + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inv_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inv_id . " Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST,sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $sql = "select *, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $data['invoiceMaster'][0]->patient_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $data['org_Name'] = ""; + $ipd_id = $data['invoiceMaster'][0]->ipd_id; + + if ($ipd_id > 0) { + $sql = "select * from ipd_master where id=" . $ipd_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $sql = "select * from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_list'] = $query->result(); + + $data['ipd_master'] = $ipd_master; + + if (count($ipd_master) > 0) { + $p_ipd_id = $ipd_master[0]->id; + $p_ipd_code = $ipd_master[0]->ipd_code; + + if ($ipd_master[0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $ipd_master[0]->case_id; + $query = $this->db->query($sql); + $org_master = $query->result(); + + if (count($org_master) > 0) { + $data['org_Name'] = $org_master[0]->insurance_company_name; + } + } + } + } + + if ($data['invoiceMaster'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['invoiceMaster'][0]->case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + } + + + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $data['content'] = $this->load->view('Medical/Med_Item_List', $data, true); + + if ($data['invoiceMaster'][0]->sale_return == 0) { + $this->load->view('Medical/Medical_Invoice_V', $data); + } else { + $this->load->view('Medical/Medical_Invoice_Return_V', $data); + } + } + + //New Invoice Edit + public function Invoice_med_datasheet($inv_id) + { + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inv_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "select *,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inv_id . " Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST,sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $sql = "select *, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $data['invoiceMaster'][0]->patient_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $data['org_Name'] = ""; + $ipd_id = $data['invoiceMaster'][0]->ipd_id; + + if ($ipd_id > 0) { + $sql = "select * from ipd_master where id=" . $ipd_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $sql = "select * from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_list'] = $query->result(); + + $data['ipd_master'] = $ipd_master; + + if (count($ipd_master) > 0) { + $p_ipd_id = $ipd_master[0]->id; + $p_ipd_code = $ipd_master[0]->ipd_code; + + if ($ipd_master[0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $ipd_master[0]->case_id; + $query = $this->db->query($sql); + $org_master = $query->result(); + + if (count($org_master) > 0) { + $data['org_Name'] = $org_master[0]->insurance_company_name; + } + } + } + } + + if ($data['invoiceMaster'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['invoiceMaster'][0]->case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + } + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $data['content'] = $this->load->view('Medical/Med_Item_List', $data, true); + + if ($data['invoiceMaster'][0]->sale_return == 0) { + $this->load->view('Medical/Medical_Invoice_V', $data); + } else { + $this->load->view('Medical/Medical_Invoice_Return_V', $data); + } + } + + + // Update Medical Invoice Master + + public function update_uhid() + { + $this->load->model('Medical_M'); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $inv_id = $this->input->post('med_invoice_id'); + $pid = $this->input->post('pid'); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $invoice_master = $query->result(); + + $sql = "select * from patient_master_exten where id='" . $pid . "' "; + $query = $this->db->query($sql); + $person_info = $query->result(); + + if (count($person_info) > 0) { + $patient_id = $person_info[0]->id; + $patient_code_u = $person_info[0]->p_code; + $custmer_Name = $person_info[0]->p_fname; + + $data = array( + 'customer_type' => 1, + 'patient_id' => $patient_id, + 'patient_code' => $patient_code_u, + 'inv_name' => $custmer_Name, + 'ipd_credit' => 0, + 'case_credit' => 0, + 'case_credit' => 0, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + $status = 1; + $remark = "Done"; + } else { + $status = 0; + $remark = "Not Done"; + } + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_ipd() + { + $this->load->model('Medical_M'); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $inv_id = $this->input->post('med_invoice_id'); + $ipd_id = $this->input->post('ipd_id'); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $invoice_master = $query->result(); + + $sql = "select * from ipd_master where id=" . $ipd_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $pid = $ipd_master[0]->p_id; + + $sql = "select * from patient_master_exten where id='" . $pid . "' "; + $query = $this->db->query($sql); + $person_info = $query->result(); + + if (count($person_info) > 0) { + $patient_id = $person_info[0]->id; + $patient_code_u = $person_info[0]->p_code; + $custmer_Name = $person_info[0]->p_fname; + + $ipd_id = $ipd_master[0]->id; + $ipd_code = $ipd_master[0]->ipd_code; + + $data = array( + 'customer_type' => 1, + 'patient_id' => $patient_id, + 'patient_code' => $patient_code_u, + 'inv_name' => $custmer_Name, + 'ipd_credit' => 0, + 'case_credit' => 0, + 'ipd_id' => $ipd_id, + 'ipd_code' => $ipd_code, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + $status = 1; + $remark = "Done"; + } else { + $status = 0; + $remark = "Not Done"; + } + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_org() + { + $this->load->model('Medical_M'); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $inv_id = $this->input->post('med_invoice_id'); + $org_id = $this->input->post('org_id'); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $invoice_master = $query->result(); + + $sql = "select * from organization_case_master where case_type=0 and id=" . $org_id; + $query = $this->db->query($sql); + $org_master = $query->result(); + + $pid = $org_master[0]->p_id; + + $sql = "select * from patient_master_exten where id='" . $pid . "' "; + $query = $this->db->query($sql); + $person_info = $query->result(); + + if (count($person_info) > 0) { + $patient_id = $person_info[0]->id; + $patient_code_u = $person_info[0]->p_code; + $custmer_Name = $person_info[0]->p_fname; + + $org_id = $org_master[0]->id; + $org_code = $org_master[0]->case_id_code; + + $data = array( + 'customer_type' => 1, + 'patient_id' => $patient_id, + 'patient_code' => $patient_code_u, + 'inv_name' => $custmer_Name, + 'ipd_credit' => 0, + 'case_credit' => 1, + 'ipd_id' => 0, + 'ipd_code' => '', + 'case_id' => $org_id, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + $status = 1; + $remark = "Done"; + } else { + $status = 0; + $remark = "Not Done"; + } + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_invdate() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('med_invoice_id'); + $inv_date = $this->input->post('inv_date'); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $invoice_master = $query->result(); + + $inv_date = str_to_MysqlDate($inv_date); + + $data = array( + 'inv_date' => $inv_date, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + + $status = 1; + $remark = "Done"; + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_name_phone() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('med_invoice_id'); + $pid = $this->input->post('pid'); + $customer_type = $this->input->post('customer_type'); + $P_Name = $this->input->post('P_Name'); + $P_Phone = $this->input->post('P_Phone'); + + $doc_id = $this->input->post('doc_id'); + $doc_name = $this->input->post('doc_name'); + + $refername = $doc_name; + + $sql = "select * from doctor_master where id='" . $doc_id . "' "; + $query = $this->db->query($sql); + $doc_info = $query->result(); + + if (count($doc_info) > 0) { + $refername = $doc_info[0]->p_fname; + } + + + $data = array( + 'customer_type' => $customer_type, + 'patient_id' => '0', + 'patient_code' => '', + 'inv_name' => $P_Name, + 'inv_phone_number' => $P_Phone, + 'ipd_credit' => 0, + 'case_credit' => 0, + 'ipd_id' => 0, + 'ipd_code' => '', + 'case_id' => '0', + 'doc_id' => $doc_id, + 'doc_name' => $refername, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + + $status = 1; + $remark = "Done"; + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_doctor() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('med_invoice_id'); + + $doc_id = $this->input->post('doc_id'); + $doc_name = $this->input->post('doc_name'); + + $refername = $doc_name; + + $sql = "select * from doctor_master where id='" . $doc_id . "' "; + $query = $this->db->query($sql); + $doc_info = $query->result(); + + if (count($doc_info) > 0) { + $refername = $doc_info[0]->p_fname; + } + + $data = array( + 'doc_id' => $doc_id, + 'doc_name' => $refername, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + + $status = 1; + $remark = "Done"; + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + public function update_cr_status_ipd() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('med_invoice_id'); + $credit_ipd = $this->input->post('credit_ipd'); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $invoice_master = $query->result(); + + $ipd_id = $invoice_master[0]->ipd_id; + + $data = array( + 'ipd_credit' => $credit_ipd, + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + + $status = 1; + $remark = "Done"; + + $this->Medical_M->update_invoice_group_gst($ipd_id, '1'); + $this->Medical_M->update_invoice_group_gst($ipd_id, '2'); + $this->Medical_M->update_invoice_group_gst($ipd_id, '3'); + + $rvar = array( + 'status' => $status, + 'remark' => $remark + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + // End Update Medical Invoice Master + + public function search_customer($sale = 0) + { + $data['sale'] = $sale; + $this->load->view('Medical/Search_Patient', $data); + } + + public function check_invoice($pno, $ipd_id, $case_id) + { + $sql = "select * + from invoice_med_master where inv_date=curdate() and patient_id='" . $pno . "' "; + + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount, + m.net_amount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.patient_id=$pno and m.inv_date=curdate() + order by m.id desc"; + + $query = $this->db->query($sql); + $data['med_inv_item_list'] = $query->result(); + + $data['pno'] = $pno; + $data['ipd_id'] = $ipd_id; + $data['case_id'] = $case_id; + + $content = ""; + + if (count($data['med_inv_item_list']) > 0) { + + $this->load->view('Medical/mini_invoice', $data); + } else { + redirect('Medical/Invoice_counter_new/' . $pno . '/' . $ipd_id . '/' . $case_id); + } + } + + public function Invoice_counter_new($pno, $ipd_id, $case_id) + { + + $select_doc = 0; + $p_fname = ''; + $p_pcode = ''; + $p_pid = $pno; + $p_ipd_id = $ipd_id; + $p_ipd_code = ''; + $customer_type = 0; + $group_invoice_id = 0; + + $select_doc = 0; + $data['org_Name'] = ""; + $data['content'] = ""; + + if ($pno > 0) { + $sql = "select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $pno . "' "; + $query = $this->db->query($sql); + $person_info = $query->result(); + + $sql = "select doc_id from opd_master where p_id='" . $pno . "' order by opd_id desc limit 1"; + $query = $this->db->query($sql); + $data['opd_master'] = $query->result(); + + $p_fname = $person_info[0]->p_fname; + $p_pcode = $person_info[0]->p_code; + + if (count($data['opd_master']) > 0) { + $select_doc = $data['opd_master'][0]->doc_id; + } else { + $select_doc = 0; + } + + $customer_type = 1; + } + + if ($ipd_id > 0) { + $sql = "select * from ipd_master where id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql = "select * from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_list'] = $query->result(); + + $p_ipd_code = $data['ipd_master'][0]->ipd_code; + + $group_invoice_id = 1; + + if ($data['ipd_master'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['ipd_master'][0]->case_id; + $query = $this->db->query($sql); + $org_master = $query->result(); + + if (count($org_master) > 0) { + $data['org_Name'] = $org_master[0]->insurance_company_name; + } + } + } + + $this->load->model('Medical_M'); + + $data['invoice_med_master'] = array( + 'patient_id' => $p_pid, + 'ipd_id' => $p_ipd_id, + 'ipd_code' => $p_ipd_code, + 'case_id' => $case_id, + 'inv_date' => str_to_MysqlDate(date('d/m/Y')), + 'inv_name' => $p_fname, + 'patient_code' => $p_pcode, + 'doc_id' => $select_doc, + 'sale_return' => 0, + 'case_credit' => 0, + 'customer_type' => $customer_type, + 'group_invoice_id' => $group_invoice_id, + ); + + if ($case_id > 0) { + $data['invoice_med_master']['case_credit'] = 1; + } + + + + $inser_id = $this->Medical_M->add_invoice($data['invoice_med_master']); + + if ($inser_id) { + $sql = "select *,if(ipd_credit>0,'Credit to IPD','CASH') as credit_status from invoice_med_master where id=" . $inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inser_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inser_id . " Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST,sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $sql = "select * from organization_case_master where id=" . $case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $data['content'] = $this->load->view('Medical/Med_Item_List', $data, true); + + $this->load->view('Medical/Medical_Invoice_V', $data); + } + } + + public function Invoice_Return_new($pno) + { + + $select_doc = 0; + $p_fname = ''; + $p_pcode = ''; + $p_pid = $pno; + $inv_phone_number = ''; + + $data['content'] = ''; + + if ($pno > 0) { + $sql = "select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $pno . "' "; + $query = $this->db->query($sql); + $person_info = $query->result(); + + $p_fname = $person_info[0]->p_fname; + $p_pcode = $person_info[0]->p_code; + $inv_phone_number = $person_info[0]->mphone1; + + $select_doc = 0; + } + + $this->load->model('Medical_M'); + + $data['invoice_med_master'] = array( + 'patient_id' => $p_pid, + 'inv_date' => str_to_MysqlDate(date('d/m/Y')), + 'inv_name' => $p_fname, + 'patient_code' => $p_pcode, + 'doc_id' => $select_doc, + 'inv_phone_number' => $inv_phone_number, + 'sale_return' => 1 + ); + + $inser_id = $this->Medical_M->add_invoice($data['invoice_med_master']); + + if ($inser_id) { + $sql = "select *,if(ipd_credit>0,'Credit to IPD','CASH') as credit_status from invoice_med_master where id=" . $inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inser_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inser_id . " Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST,sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $data['content'] = $this->load->view('Medical/Med_Item_List', $data, true); + + $this->load->view('Medical/Medical_Invoice_Return_V', $data); + } + } + + public function item_stock_list($item_code) + { + $sql = "SELECT p.item_name,t.batch_no,t.expiry_date as expiry_date_str,t.expiry_date, + (t.total_unit-t.total_sale_unit-total_lost_unit-t.total_return_unit) AS c_qty, + t.id,t.mrp,t.selling_unit_rate,p.id AS item_code + FROM med_product_master p + JOIN purchase_invoice_item t ON p.id=t.item_code + where (t.total_unit-t.total_sale_unit)>0 + and (expiry_date>date_add(sysdate(),interval 1 month) or p.exp_date_applicable=0) + and p.id =$item_code"; + + $query = $this->db->query($sql); + $data['Item_list'] = $query->result_array(); + + $this->load->view('Medical/sale_item_list_for_add', $data); + } + + public function get_drug() + { + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "SELECT p.item_name as item_name,p.formulation,t.batch_no,t.expiry_date as expiry_date_str,t.expiry_date, + DATEDIFF(LAST_DAY(t.expiry_date),curdate()) as expiry_month_pending, + (t.total_unit-t.total_sale_unit-total_lost_unit-t.total_return_unit) AS c_qty, + t.id,t.mrp,t.selling_unit_rate,p.id AS item_code,t.packing,if(t.stock_date>'2025-09-21',1,0) as new_stock + FROM med_product_master p + JOIN purchase_invoice_item t ON p.id=t.item_code + and (t.total_unit-t.total_sale_unit-t.total_lost_unit-t.total_return_unit)>0 + and t.remove_item=0 and t.item_return=0 + and (LAST_DAY(expiry_date)>date_add(sysdate(),interval -15 day) or p.exp_date_applicable=0) + where (p.item_name like '" . $q . "%' "; + + if (strlen($q) > 5) { + $sql = $sql . " or p.item_name SOUNDS LIKE '" . $q . "' or p.genericname like '%" . $q . "%'"; + } + + $sql = $sql . ") order by p.item_name,t.id limit 100"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $msg_desc = ''; + $no_exp_month = Round($row['expiry_month_pending'] / 30, 2); + + if ($no_exp_month <= 4 && $no_exp_month >= 2) { + $msg_desc .= ' Expire Within : ' . htmlentities(stripslashes($no_exp_month)) . ' Month '; + } elseif ($no_exp_month == 1) { + $msg_desc .= ' Expired : ' . htmlentities(stripslashes($no_exp_month)) . ' Month '; + } elseif ($no_exp_month < 1) { + $msg_desc .= ' Expired : ' . htmlentities(stripslashes($no_exp_month)) . ' Month '; + } + + + $new_row['label'] = htmlentities(stripslashes($row['item_name'] . ' ' . $row['formulation'])) . ' |B:' . htmlentities(stripslashes($row['batch_no'])) . ' |Pak:' . htmlentities(stripslashes($row['packing'])) . ' |Rs.' . htmlentities(stripslashes($row['mrp'])) . ' |Qty:' . htmlentities(stripslashes($row['c_qty'])); + $new_row['value'] = htmlentities(stripslashes($row['item_name'])); + $new_row['expiry_alert'] = htmlentities(stripslashes($no_exp_month)); + $new_row['desc'] = $msg_desc; + $new_row['l_item_code'] = htmlentities(stripslashes($row['item_code'])); + $new_row['l_ss_no'] = htmlentities(stripslashes($row['id'])); + $new_row['l_Batch'] = htmlentities(stripslashes($row['batch_no'])); + $new_row['l_Expiry'] = htmlentities(stripslashes($row['expiry_date_str'])); + $new_row['l_mrp'] = htmlentities(stripslashes($row['mrp'])); + $new_row['l_unit_rate'] = htmlentities(stripslashes($row['selling_unit_rate'])); + $new_row['l_c_qty'] = htmlentities(stripslashes($row['c_qty'])); + $new_row['l_packing'] = htmlentities(stripslashes($row['packing'])); + $new_row['l_new_stock'] = htmlentities(stripslashes($row['new_stock'])); + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } else { + //$new_row['sql']=$sql; + //$row_set[] = $new_row; + echo json_encode($row_set); + } + } + } + + public function get_drug_master() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from purchase_invoice_item p + where p.id in (select max(id) from purchase_invoice_item t + where t.Item_name like '" . $q . "%' group by t.Item_name ) + order by p.Item_name "; + + $sql = "SELECT m.* ,p.id as ss_no,m.packing as p_packing,p.mrp,p.purchase_price,p.discount, + p.batch_no,date_format(expiry_date,'%m') as str_expiry_month , + date_format(expiry_date,'%y') as str_expiry_year , + m.batch_applicable,m.exp_date_applicable, + if(p.id is null,m.CGST_per,p.CGST_per) as p_CGST_per, + if(p.id is null,m.SGST_per,p.SGST_per) as p_SGST_per, + if(p.id is null,m.rack_no,p.rack_no) as p_rack_no, + if(p.id is null,m.shelf_no,p.shelf_no) as p_shelf_no, + if(p.id is null,m.cold_storage,p.cold_storage) as p_cold_storage + + FROM med_product_master m + LEFT JOIN (SELECT * from purchase_invoice_item + WHERE id in (select max(id) from purchase_invoice_item + WHERE Item_name LIKE '" . $q . "%' + group BY item_code ) ) as p ON m.id=p.item_code + WHERE m.is_continue=1 and m.Item_name LIKE '" . $q . "%' + order BY m.item_name "; + + $sql = $sql . " limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['item_name'])) . ' | ' . htmlentities(stripslashes($row['p_packing'])) . ' | ' . htmlentities(stripslashes($row['mrp'])); + $new_row['value'] = htmlentities(stripslashes($row['item_name'])); + $new_row['l_item_code'] = htmlentities(stripslashes($row['id'])); + $new_row['l_mrp'] = htmlentities(stripslashes($row['mrp'])); + + $new_row['l_packing'] = htmlentities(stripslashes($row['packing'])); + $new_row['l_CGST_per'] = htmlentities(stripslashes($row['p_CGST_per'])); + $new_row['l_SGST_per'] = htmlentities(stripslashes($row['p_SGST_per'])); + $new_row['l_HSNCODE'] = htmlentities(stripslashes($row['HSNCODE'])); + + $new_row['l_batch_no'] = htmlentities(stripslashes($row['batch_no'])); + + $new_row['l_purchase_price'] = htmlentities(stripslashes($row['purchase_price'])); + + $new_row['l_package'] = htmlentities(stripslashes($row['p_packing'])); + $new_row['l_disc_price'] = htmlentities(stripslashes($row['discount'])); + + $new_row['l_rack_no'] = htmlentities(stripslashes($row['p_rack_no'])); + $new_row['l_shelf_no'] = htmlentities(stripslashes($row['p_shelf_no'])); + $new_row['l_cold_storage'] = htmlentities(stripslashes($row['p_cold_storage'])); + + $new_row['batch_applicable'] = htmlentities(stripslashes($row['batch_applicable'])); + $new_row['exp_date_applicable'] = htmlentities(stripslashes($row['exp_date_applicable'])); + + $new_row['datepicker_doe_month'] = htmlentities(stripslashes($row['str_expiry_month'])); + $new_row['datepicker_doe_year'] = htmlentities(stripslashes($row['str_expiry_year'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } else { + $row_set[] = array(); + echo json_encode($row_set); + } + } + } + + public function get_formulation_desc() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from drugs_formulation where formulation_desc like '" . $q . "%'"; + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['formulation_desc'])); + $new_row['value'] = htmlentities(stripslashes($row['formulation_desc'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function go_final() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('inv_id'); + $doc_id = $this->input->post('doc_id'); + $doc_name = $this->input->post('doc_name'); + $remark_ipd = $this->input->post('input_remark_ipd'); + $patient_code = $this->input->post('patient_code'); + $custmer_Name = $this->input->post('custmer_Name'); + $ipd_credit = $this->input->post('ipd_credit'); + + $org_credit = $this->input->post('org_credit'); + $inv_date = $this->input->post('inv_date'); + + $sql = "select * from patient_master where p_code='" . $patient_code . "' "; + $query = $this->db->query($sql); + $person_info = $query->result(); + + $sql = "select * from doctor_master where id='" . $doc_id . "' "; + $query = $this->db->query($sql); + $doc_info = $query->result(); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoice_master'] = $query->result(); + + if ($this->ion_auth->in_group('InvoiceDateChanged') || $this->ion_auth->in_group('admin')) { + $inv_date = str_to_MysqlDate($inv_date); + } else { + $inv_date = $data['invoice_master'][0]->inv_date; + } + + if (count($person_info) > 0) { + $patient_id = $person_info[0]->id; + $patient_code_u = $patient_code; + $custmer_Name = $person_info[0]->p_fname; + } else { + $patient_id = 0; + $patient_code_u = ''; + } + + $refername = $doc_name; + + if (count($doc_info) > 0) { + $refername = $doc_info[0]->p_fname; + } + + $data = array( + 'patient_id' => $patient_id, + 'patient_code' => $patient_code_u, + 'doc_id' => $doc_id, + 'doc_name' => $refername, + 'inv_name' => $custmer_Name, + 'remark_ipd' => $remark_ipd, + 'ipd_credit' => $ipd_credit, + 'case_credit' => $org_credit, + 'inv_date' => $inv_date + ); + + $inser_id = $this->Medical_M->update_in_upv_item($data, $inv_id); + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + } + + public function getDrugTable() + { + + $requestData = $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 => 'item_id', + 1 => 'itemname', + 2 => 'formulation', + 3 => 'genericname', + 5 => 'company_name_idx', + 4 => 'mrp' + ); + + // getting total number records without any search + $sql_f_all = "select * "; + + $sql_count = "Select count(*) as no_rec "; + + $sql_from = " from drug_temp "; + + $total_sql = $sql_count . $sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec'] = $query->result(); + $totalData = $data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where = " WHERE 1 = 1"; + + $sql_where_flag = 0; + + // getting records as per search parameters + if (!empty($requestData['columns'][0]['search']['value'])) { //item_id + $sql_where .= " AND item_id LIKE '" . $requestData['columns'][0]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][1]['search']['value'])) { //itemname + $sql_where .= " AND itemname LIKE '%" . $requestData['columns'][1]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][2]['search']['value'])) { //dosage + $sql_where .= " AND formulation LIKE '%" . $requestData['columns'][2]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][3]['search']['value'])) { //formulation + $sql_where .= " AND genericname LIKE '%" . $requestData['columns'][3]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][4]['search']['value'])) { //therapeutic + $sql_where .= " AND company_name_idx LIKE '%" . $requestData['columns'][4]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + $total_filer_sql = $sql_count . $sql_from . $sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter'] = $query->result(); // when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered = $data['total_rec_filter'][0]->no_rec; + + + $sql_order = " ORDER BY " . $columns[$requestData['order'][0]['column']] . " " . $requestData['order'][0]['dir'] . " LIMIT " . $requestData['start'] . " ," . $requestData['length'] . " "; // adding length + + $Result_sql = $sql_f_all . $sql_from . $sql_where . $sql_order; + + $query = $this->db->query($Result_sql); + $rdata = $query->result_array(); + + $output = array( + "draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval($totalData), // total number of records + "recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach ($rdata as $aRow) { + $row = array(); + + foreach ($columns as $col) { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + } + + public function getInvoiceTable() + { + //Single Store Remove Store ID feild + + $requestData = $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 => 'inv_med_code', + 1 => 'inv_name', + 2 => 'patient_code', + 3 => 'IPD_CODE', + 4 => 'inv_date_str', + 5 => 'net_amount', + 6 => 'payment_received', + 7 => 'payment_balance', + 8 => 'id', + ); + + // getting total number records without any search + $sql_f_all = "select m.inv_med_code,m.inv_name, + m.inv_phone_number, m.patient_code, + if(m.ipd_id>0,Concat('',m.ipd_code,'
'),'') AS IPD_CODE, + if(m.case_id>0,Concat(o.case_id_code,'
'),'') as ORG_CODE , + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + m.net_amount,m.id,m.payment_received,m.payment_balance "; + + $sql_count = "Select count(*) as no_rec "; + + $sql_from = " from (invoice_med_master m left join ipd_master i on m.ipd_id=i.id ) + left join organization_case_master o on m.case_id=o.id + left join inv_med_group g on i.id=g.ipd_id AND g.med_group_id=m.med_group_id"; + + //$total_sql=$sql_count.$sql_from; + $total_sql = "Select count(*) as no_rec from invoice_med_master"; + + $query = $this->db->query($total_sql); + $data['total_rec'] = $query->result(); + $totalData = $data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + if ($this->ion_auth->in_group('MedicalStoreAdmin')) { + $sql_where = " WHERE sale_return=0 "; + } else { + $sql_where = " WHERE sale_return=0 and inv_date >= date_add(sysdate(),interval -50 day) "; + } + + $sql_where_flag = 0; + + // getting records as per search parameters + if (!empty($requestData['columns'][0]['search']['value'])) { //inv_med_code + $sql_where .= " AND inv_med_code LIKE '%" . $requestData['columns'][0]['search']['value'] . "' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][1]['search']['value'])) { //inv_name + $stext = $requestData['columns'][1]['search']['value']; + if (!is_numeric($stext) && strlen($stext) > 3) { + $sql_where .= " AND inv_name LIKE '%" . $requestData['columns'][1]['search']['value'] . "%' "; + } + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][2]['search']['value'])) { //patient_code + $stext = $requestData['columns'][2]['search']['value']; + $sql_where .= " AND (patient_code LIKE '%" . $stext . "' )"; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][3]['search']['value'])) { //patient_code + $stext = $requestData['columns'][3]['search']['value']; + $sql_where .= " AND (m.ipd_code LIKE '%" . $stext . "' AND m.ipd_id>0 ) "; + $sql_where_flag = 1; + } + + + + $total_filer_sql = $sql_count . $sql_from . $sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter'] = $query->result(); // when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered = $data['total_rec_filter'][0]->no_rec; + + $sql_order = " ORDER BY id desc," . $columns[$requestData['order'][0]['column']] . " " . $requestData['order'][0]['dir'] . " LIMIT " . $requestData['start'] . " ," . $requestData['length'] . " "; // adding length + + $Result_sql = $sql_f_all . $sql_from . $sql_where . $sql_order; + + $query = $this->db->query($Result_sql); + $rdata = $query->result_array(); + + //$totalFiltered=count($rdata); + + $output = array( + "draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval($totalData), // total number of records + "recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach ($rdata as $aRow) { + $row = array(); + + foreach ($columns as $col) { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function getReturnInvoiceTable() + { + //Single Store Remove Store ID feild + + $requestData = $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 => 'inv_med_code', + 1 => 'inv_name', + 2 => 'Code', + 3 => 'inv_date_str', + 4 => 'net_amount', + 5 => 'payment_received', + 6 => 'payment_balance', + 7 => 'id', + 8 => 'ipd_status', + 9 => 'org_status', + 10 => 'ipd_credit_type', + 11 => 'org_credit_type' + ); + + // getting total number records without any search + $sql_f_all = "select m.inv_med_code,m.inv_name, + Concat(if(m.patient_code<>'',Concat(m.patient_code,'
'),''), + if(m.ipd_code<>'',Concat('',m.ipd_code,'
'),''), + if(m.case_id>0,Concat(o.case_id_code,'
'),'')) as Code , + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + m.doc_name,m.net_amount,m.payment_received,m.payment_balance,m.id,i.ipd_status, + o.status as org_status, + m.ipd_credit as ipd_credit_type,m.case_credit as org_credit_type "; + + $sql_count = "Select count(*) as no_rec "; + + $sql_from = " from (invoice_med_master m left join ipd_master i on m.ipd_id=i.id ) + left join organization_case_master o on m.case_id=o.id "; + + $total_sql = $sql_count . $sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec'] = $query->result(); + $totalData = $data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + if ($this->ion_auth->in_group('MedicalStoreAdmin')) { + $sql_where = " WHERE sale_return=1 "; + } else { + $sql_where = " WHERE sale_return=1 and inv_date >= date_add(sysdate(),interval -50 day) "; + } + + + $sql_where_flag = 0; + + // getting records as per search parameters + if (!empty($requestData['columns'][0]['search']['value'])) { //inv_med_code + $sql_where .= " AND inv_med_code LIKE '%" . $requestData['columns'][0]['search']['value'] . "' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][1]['search']['value'])) { //inv_name + $stext = $requestData['columns'][1]['search']['value']; + if (is_numeric($stext) && strlen($stext) > 3) { + $sql_where .= " AND inv_phone_number LIKE '" . $stext . "%' "; + } else { + $sql_where .= " AND inv_name LIKE '%" . $requestData['columns'][1]['search']['value'] . "%' "; + } + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][2]['search']['value'])) { //patient_code + $sql_where .= " AND (patient_code LIKE '%" . $requestData['columns'][2]['search']['value'] . "' OR + m.ipd_code LIKE '%" . $requestData['columns'][2]['search']['value'] . "' OR + o.case_id_code LIKE '%" . $requestData['columns'][2]['search']['value'] . "' )"; + $sql_where_flag = 1; + } + + $total_filer_sql = $sql_count . $sql_from . $sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter'] = $query->result(); // when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered = $data['total_rec_filter'][0]->no_rec; + + $sql_order = " ORDER BY id desc," . $columns[$requestData['order'][0]['column']] . " " . $requestData['order'][0]['dir'] . " LIMIT " . $requestData['start'] . " ," . $requestData['length'] . " "; // adding length + + $Result_sql = $sql_f_all . $sql_from . $sql_where . $sql_order; + + $query = $this->db->query($Result_sql); + $rdata = $query->result_array(); + + $output = array( + "draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval($totalData), // total number of records + "recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach ($rdata as $aRow) { + $row = array(); + + foreach ($columns as $col) { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + + public function getStockDrugTable() + { + + $requestData = $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 => 'ss_no', + 1 => 'item_code', + 2 => 'item_name', + 3 => 'formulation', + 4 => 'rack_no', + 5 => 'shelf_no', + 6 => 'batch_no', + 7 => 'total_unit', + 8 => 'expiry_date', + 9 => 'mrp', + 10 => 'update_stock_qty' + ); + + // getting total number records without any search + $sql_f_all = "select * "; + + $sql_count = "Select count(*) as no_rec "; + + $sql_from = " from stock_addition "; + + $total_sql = $sql_count . $sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec'] = $query->result(); + $totalData = $data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where = " WHERE 1 = 1 "; + + $sql_where_flag = 0; + + // getting records as per search parameters + if (!empty($requestData['columns'][0]['search']['value'])) { //item_id + $sql_where .= " AND item_code LIKE '" . $requestData['columns'][0]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][1]['search']['value'])) { //itemname + $sql_where .= " AND item_name LIKE '%" . $requestData['columns'][1]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][2]['search']['value'])) { //dosage + $sql_where .= " AND formulation LIKE '%" . $requestData['columns'][2]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][3]['search']['value'])) { //dosage + $sql_where .= " AND rack_no LIKE '%" . $requestData['columns'][3]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][4]['search']['value'])) { //dosage + $sql_where .= " AND shelf_no LIKE '%" . $requestData['columns'][4]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][5]['search']['value'])) { //dosage + $sql_where .= " AND batch_no LIKE '%" . $requestData['columns'][5]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + $total_filer_sql = $sql_count . $sql_from . $sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter'] = $query->result(); // when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered = $data['total_rec_filter'][0]->no_rec; + + $sql_order = " ORDER BY " . $columns[$requestData['order'][0]['column']] . " " . $requestData['order'][0]['dir'] . " LIMIT " . $requestData['start'] . " ," . $requestData['length'] . " "; // adding length + + $Result_sql = $sql_f_all . $sql_from . $sql_where . $sql_order; + + $query = $this->db->query($Result_sql); + $rdata = $query->result_array(); + + $output = array( + "draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval($totalData), // total number of records + "recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach ($rdata as $aRow) { + $row = array(); + + foreach ($columns as $col) { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function confirm_payment() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Medical_M'); + + $invoice_id = $this->input->post('med_invoice_id'); + $input_amount_paid = $this->input->post('input_amount_paid'); + + $sql = "select * from invoice_med_master where id='" . $invoice_id . "'"; + $query = $this->db->query($sql); + $inv_master = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $showcontent1 = '
+
+ Print +
+
+ Payment Method by : '; + + $showcontent2 = '
'; + + $pay_remark = ''; + + if ($inv_master[0]->patient_id > 0) { + $Customerof_type = 1; + } else { + $Customerof_type = 3; + } + + if ($this->input->post('mode') == 1) { + $paydata = array( + 'payment_mode' => '1', + 'Customerof_type' => $Customerof_type, + 'Customerof_id' => $inv_master[0]->patient_id, + 'Customerof_code' => $inv_master[0]->patient_code, + 'Medical_invoice_id' => $inv_master[0]->id, + 'Medical_invoice_code' => $inv_master[0]->inv_med_code, + 'credit_debit' => '0', + 'amount' => $input_amount_paid, + 'payment_date' => date('Y-m-d H:i:s'), + 'remark' => $pay_remark, + 'update_by' => $user_name . '[' . $user_id . ']', + 'update_by_id' => $user_id + ); + + $insert_id = $this->Medical_M->insert_payment($paydata); + + $data = array( + + 'payment_mode' => '1', + 'payment_status' => '1', + 'invoice_status' => '1', + 'payment_id' => $insert_id, + 'payment_mode_desc' => 'Cash', + 'confirm_invoice' => date('Y-m-d H:i:s'), + 'prepared_by' => $user_name . '[' . $user_id . ']' + ); + + $this->Medical_M->update_in_upv_item($data, $invoice_id); + + + + $status = 'CASH'; + $showcontent = $showcontent1 . $status . $showcontent2; + + $rvar = array( + 'update' => 1, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if ($this->input->post('mode') == 2) { + $FormRules = array( + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[3]|max_length[15]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $paydata = array( + 'payment_mode' => '2', + 'Customerof_type' => $Customerof_type, + 'Customerof_id' => $inv_master[0]->patient_id, + 'Customerof_code' => $inv_master[0]->patient_code, + 'Medical_invoice_id' => $inv_master[0]->id, + 'Medical_invoice_code' => $inv_master[0]->inv_med_code, + 'credit_debit' => '0', + 'amount' => $input_amount_paid, + 'payment_date' => date('Y-m-d H:i:s'), + 'remark' => $pay_remark, + 'update_by' => $user_name . '[' . $user_id . ']', + 'update_by_id' => $user_id, + 'pay_bank_id' => $this->input->post('cbo_pay_type'), + 'card_tran_id' => $this->input->post('input_card_tran') + ); + + $insert_id = $this->Medical_M->insert_payment($paydata); + + $data = array( + 'payment_mode' => '2', + 'payment_status' => '1', + 'invoice_status' => '1', + 'payment_mode_desc' => 'Bank Card', + 'confirm_invoice' => date('Y-m-d H:i:s'), + 'payment_id' => $insert_id, + 'card_tran_id' => $this->input->post('input_card_tran'), + 'prepared_by' => $user_name . '[' . $user_id . ']', + 'prepared_by_id' => $user_id + ); + + $this->Medical_M->update_in_upv_item($data, $invoice_id); + + $status = 'Bank Card'; + $showcontent = $showcontent1 . $status . $showcontent2; + + $rvar = array( + 'update' => 1, + 'showcontent' => $showcontent + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'update' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + if ($this->input->post('mode') == 3) { + $data = array( + + 'payment_mode' => '3', + 'payment_status' => '1', + 'invoice_status' => '1', + 'confirm_invoice' => date('d/m/Y H:m:s'), + 'payment_mode_desc' => 'IPD Credit', + 'ipd_id' => $this->input->post('ipd_id'), + 'prepared_by' => $user_name . '[' . $user_id . ']' + ); + + $this->Medical_M->update_in_upv_item($data, $invoice_id); + + $status = 'IPD Credit'; + $showcontent = $showcontent1 . $status . $showcontent2; + + $rvar = array( + 'update' => 1, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if ($this->input->post('mode') == 4) { + $data = array( + 'payment_mode' => '4', + 'payment_status' => '1', + 'invoice_status' => '1', + 'confirm_invoice' => date('d/m/Y H:m:s'), + 'payment_mode_desc' => 'Org Credit', + 'case_id' => $this->input->post('ipd_id'), + 'prepared_by' => $user_name . '[' . $user_id . ']' + ); + + $this->Medical_M->update_in_upv_item($data, $invoice_id); + + $status = 'Org Credit'; + $showcontent = $showcontent1 . $status . $showcontent2; + + $rvar = array( + 'update' => 1, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if ($this->input->post('mode') == 5) { + if ($input_amount_paid < 0) { + $input_amount_paid = $input_amount_paid * -1; + } + + $paydata = array( + 'payment_mode' => '1', + 'Customerof_type' => $Customerof_type, + 'Customerof_id' => $inv_master[0]->patient_id, + 'Customerof_code' => $inv_master[0]->patient_code, + 'Medical_invoice_id' => $inv_master[0]->id, + 'Medical_invoice_code' => $inv_master[0]->inv_med_code, + 'credit_debit' => '1', + 'amount' => $input_amount_paid, + 'payment_date' => date('Y-m-d H:i:s'), + 'remark' => $pay_remark, + 'update_by' => $user_name . '[' . $user_id . ']', + 'update_by_id' => $user_id + ); + + $insert_id = $this->Medical_M->insert_payment($paydata); + + $data = array( + + 'payment_mode' => '1', + 'payment_status' => '1', + 'invoice_status' => '1', + 'payment_id' => $insert_id, + 'payment_mode_desc' => 'Cash Return', + 'confirm_invoice' => date('Y-m-d H:i:s'), + 'prepared_by' => $user_name . '[' . $user_id . ']' + ); + + $this->Medical_M->update_in_upv_item($data, $invoice_id); + + $status = 'CASH'; + $showcontent = $showcontent1 . $status . $showcontent2; + + $rvar = array( + 'update' => 1, + 'showcontent' => $showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + $this->Medical_M->update_invoice_final($invoice_id); + } + + public function Adjust_Payment() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Medical_M'); + + $invoice_id = $this->input->post('med_invoice_id'); + $input_amount_paid = $this->input->post('input_amount_paid'); + + $sql = "select * from invoice_med_master where id='" . $invoice_id . "'"; + $query = $this->db->query($sql); + $inv_master = $query->result(); + + if (count($inv_master) > 0) { + if ($inv_master[0]->ipd_id == 0) { + + $discount = $inv_master[0]->discount_amount; + $discount = $discount + $input_amount_paid; + + $log = $inv_master[0]->log; + + $update_str = "Adjust Balance Amt:" . $input_amount_paid; + + $log = $log . PHP_EOL . PHP_EOL . $update_str; + + $dataupdate = array( + 'discount_amount' => $discount, + 'log' => $log, + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_in_upv_item($dataupdate, $invoice_id); + + $this->Medical_M->update_invoice_final($invoice_id); + } + } + } + + public function invoice_print($inv_id, $print_format = 0) + { + $this->load->model('Medical_M'); + $this->Medical_M->update_invoice_final($inv_id); + + $sql = "select *,(discount_amount+item_discount_amount) as inv_disc_total,(CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoice_master'] = $query->result(); + + $sql = "select *,(disc_amount+disc_whole) as d_amt,(CGST+SGST) as gst,(CGST_per+SGST_per) as gst_per from inv_med_item + where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select * from ipd_master where id=" . $data['invoice_master'][0]->ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql = "select * from organization_case_master where id=" . $data['invoice_master'][0]->case_id; + $query = $this->db->query($sql); + $data['orgcase'] = $query->result(); + + $sql = "select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history_medical where Medical_invoice_id=" . $inv_id; + $query = $this->db->query($sql); + $data['payment_history_medical'] = $query->result(); + + $sql = "select *,if(credit_debit>0,amount*-1,amount) as paid_amount, + (case payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' when 5 then 'Cash Return' else 'Other' end) as Payment_type_str + from payment_history_medical where Medical_invoice_id=" . $inv_id; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + if ($print_format == 0) { + $this->load->view('Medical/Medical_invoice_print_2', $data); + } else { + $this->load->view('Medical/Medical_invoice_print', $data); + } + } + + + public function invoice_print_all($ipd_id, $cash = 0) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $cash_where = " "; + + if ($cash == 0) { + $cash_where .= " and ipd_credit=0 "; + $med_type = 1; + } elseif ($cash == 1) { + $cash_where .= " and ipd_credit=1 and ipd_credit_type=1 "; + $med_type = 2; + } elseif ($cash == 2) { + $cash_where .= " and ipd_credit=1 and ipd_credit_type=0 "; + $med_type = 3; + } + + $this->Medical_M->update_invoice_group_gst($ipd_id, $med_type); + + + $sql = "select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,sum(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + sum(twdisc_amount) as twdisc_amount, + sum(i.disc_amount+i.disc_whole) as d_amt, + sum(i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.group_invoice_id>0 and m.ipd_id=" . $ipd_id . $cash_where . " group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where group_invoice_id>0 and ipd_id=" . $ipd_id . $cash_where . " group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master'] = $query->result(); + + $sql = "select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql = "select * from organization_case_master where id='" . $data['ipd_master'][0]->org_id . "'"; + $query = $this->db->query($sql); + $data['orgcase'] = $query->result(); + + $sql = "select sum(if(p.credit_debit>0,p.amount*-1,p.amount)) as paid_amount + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=" . $ipd_id . " and m.med_type=" . $med_type; + $query = $this->db->query($sql); + $data['payment_Total'] = $query->result(); + + $sql = "select p.*,if(p.credit_debit>0,p.amount*-1,p.amount) as paid_amount, + (case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' when 5 then 'Cash Return' else 'Other' end) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=" . $ipd_id . " and m.med_type=" . $med_type; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + $sql = "select * from inv_med_group + where ipd_id='" . $ipd_id . "' and med_type='" . $med_type . "'"; + $query = $this->db->query($sql); + $data['inv_med_group'] = $query->result(); + + if ($cash == 0) { + if ($data['inv_med_group'][0]->bill_final == 1) { + $this->load->view('Medical/Medical_invoice_print_all', $data); + } else { + $this->load->view('Medical/Medical_invoice_print_all_provisional', $data); + } + } else { + $this->load->view('Medical/Medical_invoice_print_all', $data); + } + } + + + public function final_invoice($inv_id) + { + $this->load->model('Medical_M'); + + /* $sql="select * from invoice_med_master where id=".$inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); */ + + //$this->Medical_M->update_invoice_group($inv_id); + //$this->Medical_M->opd_reset( $inv_id); + $this->Medical_M->update_invoice_final($inv_id); + + $sql = "select *,(discount_amount+item_discount_amount) as inv_disc_total,(CGST_Tamount+SGST_Tamount) as TGST ,date_add(ifnull(confirm_invoice,inv_insert_datetime) ,interval 240 minute) as bill_open_date, + if( date_add(ifnull(confirm_invoice,inv_insert_datetime) ,interval 48 hour)>sysdate(),0,1) as bill_opd_close + from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "select * from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age + from patient_master where id='" . $data['invoiceMaster'][0]->patient_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $sql = "select * from ipd_master where ipd_status=0 and id=" . $data['invoiceMaster'][0]->ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + if ($data['invoiceMaster'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['invoiceMaster'][0]->case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + } + + $sql = "select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history_medical where Medical_invoice_id=" . $inv_id; + $query = $this->db->query($sql); + $data['payment_history_medical'] = $query->result(); + + $sql = "select s.id,s.pay_type,m.bank_name + From medical_bank m join medical_bank_payment_source s on m.id=s.bank_id"; + $query = $this->db->query($sql); + $data['bank_data'] = $query->result(); + + $sql = "select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p + where Medical_invoice_id=$inv_id"; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + if (count($data['invoiceMaster']) > 0) { + if ($data['invoiceMaster'][0]->ipd_id > 0) { + redirect('Medical/list_med_inv/' . $data['invoiceMaster'][0]->ipd_id); + } else if ($data['invoiceMaster'][0]->case_id > 0 && $data['invoiceMaster'][0]->case_credit > 0) { + redirect('Medical/list_med_orginv/' . $data['invoiceMaster'][0]->case_id); + } else { + $this->load->view('Medical/Medical_Final_Invoice', $data); + } + } + } + + public function final_return_invoice($inv_id) + { + $this->load->model('Medical_M'); + + $sql = "select *,(discount_amount+item_discount_amount) as inv_disc_total,(CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "select *,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select *,if(gender=1,'Male','FeMale') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age + from patient_master where id='" . $data['invoiceMaster'][0]->patient_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $sql = "select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history_medical where Medical_invoice_id=" . $inv_id; + $query = $this->db->query($sql); + $data['payment_history_medical'] = $query->result(); + + $sql = "select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p + where p.Customerof_type in (1,3) and Medical_invoice_id=$inv_id"; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + if (count($data['invoiceMaster']) > 0) { + $this->load->view('Medical/Medical_Final_return_Invoice', $data); + } else { + echo 'Error In Inv. No.'; + } + } + + + public function add_item($type, $req = 0) + { + $this->load->model('Medical_M'); + + $inser_id = 1; + $Error_Show = ''; + $exist = 0; + $input_id = 0; + + $store_stock_id = $this->input->post('l_ssno'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name . '' . $user->last_name . '[' . $user_id . ']' . date('d-m-Y H:i:s'); + + if ($type == 1) { + $inv_id = $this->input->post('inv_id'); + $qty = $this->input->post('qty'); + $disc = $this->input->post('disc'); + $product_unit_rate = $this->input->post('product_unit_rate'); + + $sql = "SELECT p.item_name as item_name,t.batch_no,t.expiry_date, + (t.total_unit-t.total_sale_unit) AS S_qty, + t.mrp,t.selling_unit_rate,p.id AS master_product_id, + t.id as purchase_item_id,p.formulation, + t.HSNCODE,t.CGST_per,t.SGST_per,t.packing + FROM med_product_master p + JOIN purchase_invoice_item t ON p.id=t.item_code + where t.id= " . $store_stock_id; + $query = $this->db->query($sql); + $data['itemlist'] = $query->result(); + + $sql = "select * from inv_med_item where inv_med_id=" . $inv_id . " + and store_stock_id=" . $store_stock_id; + $query = $this->db->query($sql); + $itemExist = $query->result(); + + $CGST = $data['itemlist'][0]->CGST_per; + $SGST = $data['itemlist'][0]->SGST_per; + + //$item_rate=$data['itemlist'][0]->unit_rate; + $item_rate = $product_unit_rate; + + $amount_value = $qty * $item_rate; + + $disc_amount = $amount_value * $disc / 100; + + $Tamount_value = $amount_value - $disc_amount; + + $HSNCODE = $data['itemlist'][0]->HSNCODE; + + $stock_qty = $data['itemlist'][0]->S_qty; + + if ($qty > $stock_qty) { + $inser_id = 0; + $Error_Show = 'Stock Qty. is less than Required Qty : Current Qty :' . $stock_qty; + } elseif ($stock_qty == 0) { + $stock_qty = 0; + $inser_id = 0; + $Error_Show = 'Stock is Empty'; + } + + if ($inser_id > 0) { + $data['insert_inv_med_item'] = array( + 'inv_med_id' => $inv_id, + 'item_code' => $data['itemlist'][0]->master_product_id, + 'item_Name' => $data['itemlist'][0]->item_name, + 'formulation' => $data['itemlist'][0]->formulation, + 'qty' => $qty, + 'batch_no' => $data['itemlist'][0]->batch_no, + 'expiry' => $data['itemlist'][0]->expiry_date, + 'price' => $item_rate, + 'price2' => $item_rate, + 'mrp' => $data['itemlist'][0]->mrp, + 'disc_per' => $disc, + 'disc_amount' => $disc_amount, + 'amount' => $amount_value, + 'tamount' => $Tamount_value, + 'CGST_per' => $CGST, + 'SGST_per' => $SGST, + 'HSNCODE' => $HSNCODE, + 'store_stock_id' => $data['itemlist'][0]->purchase_item_id, + 'update_by_id' => $user_id, + 'update_by_remark' => $user_name_info, + 'packing' => $data['itemlist'][0]->packing, + ); + + if (count($itemExist) > 0) { + $Error_Show = 'Please Check Also Same Item List'; + $exist = count($itemExist); + $input_id = $itemExist[0]->id; + $input_id = 0; + } + + $inser_id = $this->Medical_M->add_invoiceitem($data['insert_inv_med_item']); + } + } else if ($type == 2) { + $update_qty = $this->input->post('u_qty'); + $itemid = $this->input->post('itemid'); + + $sql = "select * from inv_med_item where id=" . $itemid; + $query = $this->db->query($sql); + $data['inv_med_item'] = $query->result(); + + $CGST = $data['inv_med_item'][0]->CGST_per; + $SGST = $data['inv_med_item'][0]->SGST_per; + $disc = $data['inv_med_item'][0]->disc_per; + + $inv_id = $data['inv_med_item'][0]->inv_med_id; + + $store_stock_id = $data['inv_med_item'][0]->store_stock_id; + + $sql = "SELECT p.item_name,t.batch_no,t.expiry_date, + (t.total_unit-t.total_sale_unit) AS S_qty, + t.mrp,t.selling_unit_rate,p.id AS master_product_id, + t.id as purchase_item_id,p.formulation, + t.HSNCODE,t.CGST_per,t.SGST_per,t.packing + FROM med_product_master p + JOIN purchase_invoice_item t ON p.id=t.item_code + where t.id= " . $store_stock_id; + + $query = $this->db->query($sql); + $item_master = $query->result(); + + $stock_qty = 0; + + $old_qty = $data['inv_med_item'][0]->qty; + $diff_qty = $update_qty - $old_qty; + + if ($diff_qty > 0) { + if (count($item_master) > 0) { + $stock_qty = $item_master[0]->S_qty; + if ($diff_qty > $stock_qty) { + $inser_id = 0; + $Error_Show = 'Stock Qty. is less than Required Qty : Current Qty :' . $stock_qty; + } + } else { + $stock_qty = 0; + $inser_id = 0; + $Error_Show = 'Stock is Empty'; + } + } + + if ($inser_id > 0) { + $item_rate = $data['inv_med_item'][0]->price; + $amount_value = $update_qty * $item_rate; + + $disc_amount = $amount_value * $disc / 100; + + $Tamount_value = $amount_value - $disc_amount; + + $data['update_inv_med_item'] = array( + 'qty' => $update_qty, + 'disc_amount' => $disc_amount, + 'amount' => $amount_value, + 'tamount' => $Tamount_value, + 'store_stock_id' => $store_stock_id, + 'packing' => $data['inv_med_item'][0]->packing, + 'inv_med_id' => $inv_id, + ); + + $this->Medical_M->update_invoiceitem($data['update_inv_med_item'], $itemid); + $inser_id = $itemid; + } + + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + } else { + $inv_id = $this->input->post('inv_id'); + $itemid = $this->input->post('itemid'); + + $sql = "select * from inv_med_item where id=" . $itemid; + $query = $this->db->query($sql); + $inv_items = $query->row_array(); + + $this->Medical_M->delete_invoiceitem($itemid, $inv_items); + } + + $content = ''; + + if ($inser_id > 0) { + $this->Medical_M->update_invoice_final($inv_id); + + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inv_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inv_id . " Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST, + sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $content = $this->load->view('Medical/Med_Item_List', $data, true); + //$content=''; + } + + $rvar = array( + 'exist' => $exist, + 'insertid' => $inser_id, + 'content' => $content, + 'error' => $Error_Show, + 'input_id' => $input_id, + 'csrf_dst_name_value' => $this->security->get_csrf_hash() + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + function show_items($inv_id) + { + $this->load->model('Medical_M'); + + //$this->Medical_M->update_invoice_final($inv_id); + + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inv_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inv_id . " Group by item_code Having count(id)>1"; + $sql = "select item_code + from inv_med_item where 1<>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST, + sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $content = $this->load->view('Medical/Med_Item_List', $data, true); + + //$content="hello"; + echo $content; + } + + + + public function list_org_ipd() + { + $sql = "select *,(paid_amount-(charge_amount+med_amount)) as balance + from v_ipd_list where ipd_status=0 "; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $sql = "SELECT CONCAT('IPD : ',i.ipd_code,' /Name :',p.p_fname,' / Admit Dt: ',date_format(i.register_date,'%d-%m-%Y'), + ' /Balance :',m.payment_balance) AS show_content + FROM (inv_med_group m JOIN ipd_master i ON m.ipd_id=i.id) + JOIN patient_master p ON i.p_id=p.id + WHERE i.ipd_status=0 AND m.med_type=1 AND m.net_amount>0 + AND payment_balance>=50000 "; + $query = $this->db->query($sql); + $data['high_balance'] = $query->result(); + + $this->load->view('Medical/Medical_ipd_org_list', $data); + } + + public function list_high_balance() + { + $sql = "SELECT i.ipd_code,p.p_code,p.p_fname,p.mphone1,m.payment_received,m.payment_balance,m.net_amount + FROM (inv_med_group m JOIN ipd_master i ON m.ipd_id=i.id) + JOIN patient_master p ON i.p_id=p.id + WHERE i.ipd_status=0 AND m.med_type=1 AND m.net_amount>0 + AND payment_balance>=50000 "; + $query = $this->db->query($sql); + $data['high_balance'] = $query->result(); + + $this->load->view('Medical/Report/Med_high_pending', $data); + } + + + public function list_org() + { + $sql = "select p.p_fname,p.p_code,p.p_relative,p.p_rname,o.insurance_company_name,o.case_id_code,o.id as org_id,o.p_id , + o.date_registration,Date_Format(o.date_registration,'%d-%m-%Y') as str_register_date,o.insurance_id + from organization_case_master o join patient_master p on o.p_id=p.id + and o.insurance_id >1 and o.`status`=0 and o.case_type=0 "; + $query = $this->db->query($sql); + $data['organization_case_master'] = $query->result(); + + + $this->load->view('Medical/Medical_org_list', $data); + } + + public function list_med_inv($ipd_id) + { + + $sql = "select *,if(ipd_credit=0,'CASH','CREDIT') as credit, + if(ipd_credit=1 and ipd_credit_type=0,'Yes','No') as Package + from invoice_med_master where ipd_id = " . $ipd_id . " Order by inv_date,id"; + $query = $this->db->query($sql); + $data['inv_master'] = $query->result(); + + $this->load->model('Medical_M'); + //$this->Medical_M->update_invoice_group_gst($ipd_id,1); + + $sql = "select sum(if(ipd_credit=0,net_amount,0)) as cash_netAmount, + sum(if(ipd_credit=1 and ipd_credit_type=1,net_amount,0)) as IPDCrAmount , + sum(if(ipd_credit=1 and ipd_credit_type=0,net_amount,0)) as PackageCrAmount, + sum(payment_balance) as t_payment_balance ,sum(net_amount) as t_net_amount + from invoice_med_master where ipd_id = " . $ipd_id; + $query = $this->db->query($sql); + $data['inv_master_total'] = $query->result(); + + $sql = "select * from ipd_master where id = " . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql = "select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $data['ipd_master'][0]->p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $sql = "select * from v_ipd_list where id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_list'] = $query->result(); + + $sql = "select * from inv_med_group where med_type=1 and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['med_group_list'] = $query->result(); + + $sql = "select b.ipd_id,b.bed_id,b.TDate,m.room_name,m.bed_no + from ipd_bed_assign b left join hc_bed_master m on b.bed_id=m.id + where b.ipd_id=" . $ipd_id . " order by TDate desc"; + $query = $this->db->query($sql); + $data['bed_list'] = $query->result(); + + if ($data['ipd_master'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id='" . $data['ipd_master'][0]->case_id . "'"; + $query = $this->db->query($sql); + $data['orgcase'] = $query->result(); + + $ins_comp_id = $data['orgcase'][0]->insurance_id; + $inc_card_id = $data['orgcase'][0]->insurance_card_id; + + $sql = "select * from hc_insurance_card where id='" . $inc_card_id . "'"; + $query = $this->db->query($sql); + $data['hc_insurance_card'] = $query->result(); + + $sql = "select * from hc_insurance where id='" . $ins_comp_id . "'"; + $query = $this->db->query($sql); + $data['insurance'] = $query->result(); + } + + if (count($data['med_group_list']) > 0) { + if ($data['med_group_list'][0]->discount_group_2 <> 0) { + exit('Please Contact to Medical Store Admin '); + } + } + + $this->load->view('Medical/Medical_invoice_list', $data); + } + + public function list_med_orginv($org_id) + { + + $sql = "select *,if(case_credit=0,'CASH','CREDIT') as credit + from invoice_med_master where case_id = " . $org_id . " order by inv_date,id"; + $query = $this->db->query($sql); + $data['inv_master'] = $query->result(); + + $sql = "select * from organization_case_master where id = " . $org_id; + $query = $this->db->query($sql); + $data['orgcase_master'] = $query->result(); + + $sql = "select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $data['orgcase_master'][0]->p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $this->load->view('Medical/Medical_org_invoicelist', $data); + } + + public function update_discount() + { + $invoice_id = $this->input->post('med_invoice_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $dataupdate = array( + 'discount_amount' => $this->input->post('input_dis_amt'), + 'discount_remark' => $this->input->post('input_dis_desc'), + 'discount_by' => $user_name . '[' . $user_id . ']' + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_in_upv_item($dataupdate, $invoice_id); + + $this->Medical_M->update_invoice_final($invoice_id); + } + + public function BillFinal($group_id) + { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $dataupdate = array( + 'bill_final' => '1', + 'bill_final_by' => $user_name . '[' . $user_id . ']' + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_group_invoice($dataupdate, $group_id); + + $rvar = array( + 'update' => 1, + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function InvBillFinal($invoice_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $dataupdate = array( + 'bill_final' => '1', + 'bill_final_by' => $user_name . '[' . $user_id . ']' + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_in_upv_item($dataupdate, $invoice_id); + + $rvar = array( + 'update' => 1, + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + public function search() + { + $sdata = $this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9 _.@\-]/', '', trim($sdata)); + + if (strlen($sdata) == 0) { + $sql = "SELECT p.*,GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age , + Max(o.apointment_date) as Last_OPD , + date_format(if(Max(o.apointment_date) IS NULL,p.insert_date,Max(o.apointment_date)),'%d-%m-%Y') AS Last_Visit + FROM patient_master p left join opd_master o on p.id=o.p_id + group BY p.id + order BY if(Max(o.apointment_date) IS NULL,p.insert_date,Max(o.apointment_date)) DESC + LIMIT 100"; + } else { + + $sdate_array = explode(" ", $sdata); + $search_string = " 1=1 "; + + foreach ($sdate_array as $row_data) { + if (is_numeric($row_data)) { + $search_string .= " and (p.p_code like '%$row_data' + or p.mphone1 = '$row_data' + or p.udai='$row_data' )"; + } elseif (ctype_alpha($row_data)) { + $search_string .= " and (p.p_fname like '%$row_data%' + or p.email1 = '$row_data' + or SUBSTRING_INDEX(p.p_fname,' ',1) sounds like '" . $row_data . "')"; + } else { + $search_string .= " and (p.p_code like '$row_data' + or p.email1 = '$row_data' )"; + } + } + + $sql = "SELECT p.*,GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age , + Max(o.apointment_date) as Last_OPD , + date_format(if(Max(o.apointment_date) IS NULL,p.insert_date,Max(o.apointment_date)),'%d-%m-%Y') AS Last_Visit + FROM patient_master p left join opd_master o on p.id=o.p_id + WHERE $search_string + group BY p.id + order BY if(Max(o.apointment_date) IS NULL,p.insert_date,Max(o.apointment_date)) DESC "; + } + + + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $this->load->view('Medical/Patient_Search_Result', $data); + } + + public function Update_Invoice_ipd_credit_type() + { + $ipd_credit_type = $this->input->post('ipd_credit_type'); + $inv_med_id = $this->input->post('inv_med_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user_id . ']T:' . date('d-m-Y'); + + if ($inv_med_id == '1') { + $ipd_credit_type_update = 'Include by : ' . $user_name; + } else { + $ipd_credit_type_update = 'Packeage by ' . $user_name; + } + + $dataupdate = array( + 'ipd_credit_type' => $ipd_credit_type, + 'ipd_credit_type_update' => $ipd_credit_type_update, + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_in_upv_item($dataupdate, $inv_med_id); + } + + + + public function Med_Inv_Group($inv_med_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from invoice_med_master where id=" . $inv_med_id; + $query = $this->db->query($sql); + $invoice_med_master = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $old_remark = $invoice_med_master[0]->update_history; + + $new_remark = 'Group By : ' . $user_name . '[' . $user_id . ']' . ' Date:' . date('d-m-Y h:i:s') . PHP_EOL; + + $new_remark .= $old_remark; + + $dataupdate = array( + 'med_group_id' => 1, + 'update_history' => $new_remark + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_in_upv_item($dataupdate, $inv_med_id); + //$this->Medical_M->update_invoice_group($inv_med_id); + + $rvar = array( + 'update' => 1, + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function Update_Group_Discount($med_group_id) + { + $input_discount = $this->input->post('input_discount'); + $Ipd_ID = $this->input->post('ipd_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $dataupdate = array( + 'discount_group' => $input_discount, + 'discount_by_group' => $user_name . '[' . $user_id . ']' . ' Date:' . date('d-m-Y h:i:s') + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_group_invoice($dataupdate, $med_group_id); + //$this->Medical_M->update_invoice_group_gst($Ipd_ID); + + $rvar = array( + 'update' => 1, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function edit_invoice_edit($inv_id) + { + $sql = "select *,if(ipd_credit>0,'Credit to IPD','CASH') as credit_status, + if(case_credit>0,'Credit to Org','CASH') as credit_org_status from invoice_med_master + where id=$inv_id"; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST,sum(disc_amount) as t_dis_amt from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $sql = "select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $sql = "select *, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='" . $data['invoiceMaster'][0]->patient_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $data['org_Name'] = ""; + $ipd_id = $data['invoiceMaster'][0]->ipd_id; + + if ($ipd_id > 0) { + $sql = "select * from ipd_master where id=" . $ipd_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $sql = "select * from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_list'] = $query->result(); + + $data['ipd_master'] = $ipd_master; + + if (count($ipd_master) > 0) { + $p_ipd_id = $ipd_master[0]->id; + $p_ipd_code = $ipd_master[0]->ipd_code; + + if ($ipd_master[0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $ipd_master[0]->case_id; + $query = $this->db->query($sql); + $org_master = $query->result(); + + if (count($org_master) > 0) { + $data['org_Name'] = $org_master[0]->insurance_company_name; + } + } + } + } + + if ($data['invoiceMaster'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['invoiceMaster'][0]->case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + } + + + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $this->load->view('Medical/invoice_master_edit', $data); + } + + public function LockIPD($inv_med_id, $lock = 1) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $sql = "select * from ipd_master where id=" . $inv_med_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $old_remark = $ipd_master[0]->lock_remark; + + if ($lock == 1) { + $new_remark = 'Locked By : ' . $user_name . '[' . $user_id . ']' . ' Date:' . date('d-m-Y h:i:s') . PHP_EOL; + } else { + $new_remark = 'Unlocked By : ' . $user_name . '[' . $user_id . ']' . ' Date:' . date('d-m-Y h:i:s') . PHP_EOL; + } + + $new_remark .= $old_remark; + + $dataupdate = array( + 'lock_medical' => $lock, + 'lock_remark' => $new_remark + ); + + $this->load->model('Ipd_M'); + $this->Ipd_M->update($dataupdate, $inv_med_id); + + $rvar = array( + 'update' => 1, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function load_model_box($ipd_id) + { + $this->load->model('Medical_M'); + + $this->Medical_M->update_invoice_group_gst($ipd_id, 1); + + $sql = "select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date), + DATEDIFF(discharge_date,register_date)) as no_days, + if(case_type=1,'MLC','Non MLC') as case_type_s, + Date_format(register_date,'%d-%m-%Y') as str_register_date from ipd_master + where id='" . $ipd_id . "' "; + $query = $this->db->query($sql); + $data['ipd_info'] = $query->result(); + + $sql = "select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age + from patient_master where id='" . $data['ipd_info'][0]->p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $sql = "select * from inv_med_group where med_type=1 and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['med_group_list'] = $query->result(); + + $sql = "select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Date_Format(payment_date,'%d-%m-%Y') as str_payment_date, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=" . $ipd_id . " and m.med_type=1"; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + $sql = "select * from inv_med_group where med_type=1 and ipd_id=" . $ipd_id; + $query = $this->db->query($sql); + $data['inv_med_group'] = $query->result(); + + $sql = "select s.id,s.pay_type,m.bank_name + From medical_bank m join medical_bank_payment_source s on m.id=s.bank_id"; + $query = $this->db->query($sql); + $data['bank_data'] = $query->result(); + + $phone_number_list = array($data['person_info'][0]->mphone1, $data['ipd_info'][0]->P_mobile1, $data['ipd_info'][0]->P_mobile2); + + $data['phone_number_list'] = array_unique($phone_number_list); + + $this->load->view('Medical/Med_Model_Payment', $data); + } + + public function payment_receipt($ipd_id, $cash = 0) + { + $cash_where = " "; + + if ($cash == 0) { + $cash_where .= " and ipd_credit=0 "; + $med_type = 1; + } elseif ($cash == 1) { + $cash_where .= " and ipd_credit=1 and ipd_credit_type=1 "; + $med_type = 2; + } elseif ($cash == 2) { + $cash_where .= " and ipd_credit=1 and ipd_credit_type=0 "; + $med_type = 3; + } + + $sql = "select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name,m.mphone1,m.P_mobile1,m.P_mobile2,m.add1,m.add2, + m.city,m.district,m.state, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql = "select * from organization_case_master where id='" . $data['ipd_master'][0]->org_id . "'"; + $query = $this->db->query($sql); + $data['orgcase'] = $query->result(); + + $sql = "select * from inv_med_group + where ipd_id='" . $ipd_id . "' and med_type=" . $med_type; + $query = $this->db->query($sql); + $data['inv_med_group'] = $query->result(); + + $sql = "select p.*,if(p.credit_debit>0,p.amount*-1,p.amount) as paid_amount, + Date_Format(payment_date,'%d-%m-%Y') as str_payment_date, + (case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' when 5 then 'Cash Return' else 'Other' end) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=" . $ipd_id . " and m.med_type=" . $med_type; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + //$this->load->view('Medical/Med_Payment_Receipt',$data); + + //load mPDF library + $this->load->library('m_pdf'); + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name = 'Report-payment_receipt-' . $ipd_id . "-" . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $content = $this->load->view('Medical/Med_Payment_Receipt', $data, TRUE); + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } + + public function payment_receipt_sms($ipd_id, $cash = 0) + { + $inv_phone_number = $this->input->post('phone_number'); + + $cash_where = " "; + + if ($cash == 0) { + $cash_where .= " and ipd_credit=0 "; + $med_type = 1; + } elseif ($cash == 1) { + $cash_where .= " and ipd_credit=1 and ipd_credit_type=1 "; + $med_type = 2; + } elseif ($cash == 2) { + $cash_where .= " and ipd_credit=1 and ipd_credit_type=0 "; + $med_type = 3; + } + + $sql = "select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id,m.P_mobile1,m.P_mobile2 from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=" . $ipd_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $sql = "select * from inv_med_group + where ipd_id='" . $ipd_id . "' and med_type=" . $med_type; + $query = $this->db->query($sql); + $inv_med_group = $query->result(); + + $sql = "select * from invoice_med_master + where ipd_id='" . $ipd_id . "' and ipd_credit=0 order by id desc limit 1"; + $query = $this->db->query($sql); + $inv_med_master = $query->result(); + + $sql = "select p.*,if(p.credit_debit>0,p.amount*-1,p.amount) as paid_amount, + Date_Format(payment_date,'%d-%m-%Y') as str_payment_date, + (case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' when 5 then 'Cash Return' else 'Other' end) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=" . $ipd_id . " and m.med_type=" . $med_type . " order by id desc limit 1"; + $query = $this->db->query($sql); + $payment_history_last = $query->result(); + + $Last_Inv_Amt = 0; + $Last_pay_Amt = 0; + + if (count($inv_med_master) > 0) { + $Last_Inv_Amt = $inv_med_master[0]->net_amount; + } + + if (count($payment_history_last) > 0) { + $Last_pay_Amt = $payment_history_last[0]->paid_amount; + } + + $SMS_SEND = M_store_short . " STORE BILL STATUS%nIPD No.: " . $ipd_master[0]->ipd_code . "%nPName: " . Trim($ipd_master[0]->p_fname) . "%nTot. Med Amt.: " . Round($inv_med_group[0]->net_amount, 0) . "%nLast Inv. Amt.: " . Round($Last_Inv_Amt, 0) . "%nTot. Paid Amt.: " . Round($inv_med_group[0]->payment_received) . "%nLast Paid Amt.: " . Round($Last_pay_Amt, 0) . "%nBal. Amt.: " . Round($inv_med_group[0]->payment_balance, 0) . "%nFrom: DevSoftTech HMS"; + + + + //$inv_phone_number="9720958717"; + + $this->load->model('SMS_M'); + + $data = array( + 'to_number' => $inv_phone_number, + 'message' => $SMS_SEND + ); + + $insert_id = $this->SMS_M->insert_sms_outbox($data); + + + $rvar = array( + 'update' => $insert_id, + 'msg_text' => "Message Send" + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function group_confirm_payment() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Ipd_M'); + $this->load->model('Medical_M'); + + $ipd_id = $this->input->post('ipd_id'); + $amount = $this->input->post('amount'); + $Med_Group_id = $this->input->post('Med_Group_id'); + + $sql = "select * from ipd_master where id=" . $ipd_id; + $query = $this->db->query($sql); + $ipd_master = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $pay_remark = $this->input->post('cash_remark'); + $cr_dr = $this->input->post('cr_dr'); + + + $pay_datetime = str_to_MysqlDate($this->input->post('date_payment')) . ' ' . date('H:i:s'); + + if ($this->input->post('mode') == 1) { + $paydata = array( + 'payment_mode' => '1', + 'Customerof_type' => '2', + 'Customerof_id' => $ipd_master[0]->p_id, + 'group_id' => $Med_Group_id, + 'ipd_id' => $ipd_id, + 'med_type' => 0, + 'credit_debit' => $cr_dr, + 'amount' => $amount, + 'payment_date' => $pay_datetime, + 'remark' => $pay_remark, + 'update_by' => $user_name . '[' . $user_id . ']', + 'update_by_id' => $user_id + ); + + $insert_id = $this->Medical_M->insert_payment($paydata); + + + $rvar = array( + 'update' => 1, + 'ipd_id' => $ipd_id, + 'payid' => $insert_id, + 'pay_date' => $pay_datetime + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if ($this->input->post('mode') == 2) { + + $FormRules = array( + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[1]|max_length[15]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + + + $paydata = array( + 'payment_mode' => '2', + 'Customerof_type' => '2', + 'Customerof_id' => $ipd_master[0]->p_id, + 'group_id' => $Med_Group_id, + 'ipd_id' => $ipd_id, + 'med_type' => 0, + 'credit_debit' => $cr_dr, + 'amount' => $amount, + 'payment_date' => $pay_datetime, + 'remark' => $pay_remark, + 'update_by' => $user_name . '[' . $user_id . ']', + 'update_by_id' => $user_id, + 'pay_bank_id' => $this->input->post('cbo_pay_type'), + 'card_tran_id' => $this->input->post('input_card_tran'), + + ); + + $insert_id = $this->Medical_M->insert_payment($paydata); + + $this->Medical_M->update_invoice_group_gst($ipd_id); + + $rvar = array( + 'update' => 1, + 'ipd_id' => $ipd_id, + 'payid' => $insert_id, + 'pay_date' => $pay_datetime + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'update' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + if ($this->input->post('mode') == 5) { + $FormRules = array( + array( + 'field' => 'input_person_name', + 'label' => 'Name on Chq.', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_bank_tran', + 'label' => 'Chq. Number', + 'rules' => 'required|min_length[1]|max_length[15]' + ) + /*, + array( + 'field' => 'input_card_digit', + 'label' => 'Card Last 4 Digit ', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_card_bank', + 'label' => 'Bank Name ', + 'rules' => 'required|min_length[1]|max_length[50]' + ), + */ + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + $pay_remark = 'Chq Payment'; + + $paydata = array( + 'payment_mode' => '2', + 'payof_type' => '4', + 'payof_id' => $ipd_master[0]->id, + 'payof_code' => $ipd_master[0]->ipd_code, + 'credit_debit' => $cr_dr, + 'amount' => $amount, + 'payment_date' => $pay_datetime, + 'remark' => $pay_remark, + 'update_by' => $user_name . '[' . $user_id . ']', + 'card_bank' => $this->input->post('input_bank_hospital'), + 'cust_card' => $this->input->post('input_bank_name'), + 'card_remark' => $this->input->post('input_person_name'), + 'card_tran_id' => $this->input->post('input_bank_tran'), + 'update_by_id' => $user_id + ); + + $insert_id = $this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode' => '2', + 'payment_mode_desc' => 'Bank Chq.-Draft', + 'payment_id' => $insert_id, + 'pay_date' => $pay_datetime, + 'enter_pay_date' => date('Y-m-d H:i:s'), + 'ipd_id' => $ipd_id, + 'amount' => $amount, + 'card_bank' => $this->input->post('input_bank_hospital'), + 'card_remark' => $this->input->post('input_card_digit'), + 'cust_card' => $this->input->post('input_bank_name'), + 'card_tran_id' => $this->input->post('input_bank_tran'), + 'prepared_by' => $user_name . '[' . $user_id . ']', + 'prepared_by_id' => $user_id + ); + + $insert_ipdpay_id = $this->Ipd_M->insert_payment_ipd($data); + + $status = 'Bank Card'; + + + $rvar = array( + 'update' => 1, + 'ipd_id' => $ipd_id, + 'payid' => $insert_ipdpay_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'update' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + } + + public function group_cash_print($ipd_id, $payid) + { + $sql = "select *,date_format(payment_date,'%d-%m-%Y') as pay_date, + (case payment_mode when 1 then 'CASH' when 2 then 'Bank' Else 'Other' End) as payment_mode_desc + from payment_history_medical where id=" . $payid; + $query = $this->db->query($sql); + $data['med_payment'] = $query->result(); + + $sql = "select * from ipd_master where id =" . $ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $pno = $data['ipd_master'][0]->p_id; + + $sql = "select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age + from patient_master where id='" . $pno . "' "; + + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $this->load->view('Medical/Med_Payment_receipt', $data); + } + + public function Invoice_Item_Return($inv_type_id, $inv_type = 0) + { + $data['inv_type_id'] = $inv_type_id; + $data['inv_type'] = $inv_type; + + $p_id = 0; + + if ($inv_type == 0) { + $sql = "select * from ipd_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) left join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where m.ipd_id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['ipd_master'][0]->p_id; + } elseif ($inv_type == 1) { + $sql = "select * from organization_case_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['org_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) left join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where m.case_id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['org_master'][0]->p_id; + } else { + $sql = "select * from invoice_med_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['invoice_med_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) left join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where m.id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['invoice_med_master'][0]->patient_id; + } + + $sql = "select * from patient_master_exten + where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $query = $this->db->query($sql_items); + $data['inv_items'] = $query->result(); + + $this->load->view('Medical/Medical_Invoice_Return', $data); + } + + public function Invoice_Item_Return_new($inv_type_id, $inv_type = 0) + { + $data['inv_type_id'] = $inv_type_id; + $data['inv_type'] = $inv_type; + + $p_id = 0; + + $sql = "select * from ipd_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $p_id = $data['ipd_master'][0]->p_id; + + + $sql = "select * from patient_master_exten + where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $this->load->view('Medical/IPD_return_medicine', $data); + } + + public function IPD_Item_Return_temp($inv_type_id, $inv_type = 0) + { + $data['inv_type_id'] = $inv_type_id; + $data['inv_type'] = $inv_type; + + if ($inv_type == 0) { + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) + join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where m.ipd_id=" . $inv_type_id . " order by r.id desc"; + } elseif ($inv_type == 1) { + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) + join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where m.case_id=" . $inv_type_id . " order by r.id desc"; + } else { + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) + join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where l m.id=" . $inv_type_id . " order by r.id desc"; + } + + $query = $this->db->query($sql_items); + $data['inv_items'] = $query->result(); + + $this->load->view('Medical/Medical_Invoice_Return_list', $data); + } + + public function IPD_Item_list($inv_type_id) + { + $data['inv_type_id'] = $inv_type_id; + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,r.r_qty,r.id as return_id + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id ) + left join inv_med_item_return r on t.id=r.inv_item_id and return_status=0 + where r.id is null and m.ipd_id=" . $inv_type_id . " "; + + if (strlen($q) > 0) { + $sql .= " and t.item_name LIKE '" . $q . "%'"; + } else { + $sql .= " and 1<>1 "; + } + + $sql .= " order by t.item_name,t.id"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['item_Name'])) . ' |B:' . htmlentities(stripslashes($row['batch_no'])) . ' |Rs.' . htmlentities(stripslashes($row['mrp'])) . ' |Qty:' . htmlentities(stripslashes($row['qty'])); + $new_row['value'] = htmlentities(stripslashes($row['item_Name'])); + $new_row['l_item_code'] = htmlentities(stripslashes($row['item_id'])); + $new_row['l_Batch'] = htmlentities(stripslashes($row['batch_no'])); + $new_row['l_mrp'] = htmlentities(stripslashes($row['mrp'])); + $new_row['l_price'] = htmlentities(stripslashes($row['price'])); + $new_row['l_qty'] = htmlentities(stripslashes($row['qty'])); + $new_row['sql'] = $sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } else { + $new_row['sql'] = $sql; + $row_set[] = $new_row; + echo json_encode($row_set); + } + } + } + + + + public function Med_Return_invoice_search($r_inv_id) + { + $data['r_inv_id'] = $r_inv_id; + $this->load->view('Medical/Med_Return_Invoice_search', $data); + } + + public function Invoice_Item_old() + { + $search_text = trim($this->input->post('search_text')); + $search_type = $this->input->post('search_type'); + + if ($search_type == 1) { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.inv_date >=date_add(curdate(),interval -5 month) and m.inv_phone_number='$search_text' and m.ipd_id=0 and m.case_id=0 "; + $query = $this->db->query($sql); + $data['med_inv_item_list'] = $query->result(); + } + + if ($search_type == 2) { + $sql = "SELECT count(id) as no_rec,group_concat(id) as p_id_list + From patient_master where p_code like '" . $search_text . "' "; + $query = $this->db->query($sql); + $patient_master = $query->result(); + + $search_id_list = "0"; + if ($patient_master[0]->no_rec) { + $search_id_list = $patient_master[0]->p_id_list; + } + + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.inv_date >=date_add(curdate(),interval -5 month) and m.patient_id in ($search_id_list) and m.ipd_id=0 and m.case_id=0"; + $query = $this->db->query($sql); + $data['med_inv_item_list'] = $query->result(); + } + + if ($search_type == 3) { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.inv_date >=date_add(curdate(),interval -12 month) and m.inv_med_code like '%" . $search_text . "' and m.ipd_id=0 and m.case_id=0"; + $query = $this->db->query($sql); + $data['med_inv_item_list'] = $query->result(); + } + + if ($search_type == 4) { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.inv_date >=date_add(curdate(),interval -5 month) and i.item_Name like '" . $search_text . "%' "; + $query = $this->db->query($sql); + $data['med_inv_item_list'] = $query->result(); + } + + $this->load->view('Medical/Med_Item_old_list', $data); + } + + public function Invoice_old($inv_id) + { + $sql = "Select * from invoice_med_master where id=$inv_id "; + $query = $this->db->query($sql); + $invoice_med_master = $query->result(); + + $phone_no = ''; + $p_id = 0; + $ipd_id = 0; + + if (count($invoice_med_master) > 0) { + $phone_no = $invoice_med_master[0]->inv_phone_number; + $p_id = $invoice_med_master[0]->patient_id; + $ipd_id = $invoice_med_master[0]->ipd_id; + } + + if ($ipd_id > 0) { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount, + m.net_amount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.id<>$inv_id and m.ipd_id=$ipd_id and m.case_id=0 + order by m.id desc"; + } else if ($p_id > 0) { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount, + m.net_amount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.patient_id='$p_id' and m.id<>$inv_id and m.ipd_id=0 and m.case_id=0 + and m.inv_date>date_add(sysdate(),interval -6 month) + order by m.id desc"; + } else if ($phone_no != '') { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount, + m.net_amount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where m.inv_phone_number='$phone_no' and m.id<>$inv_id and m.ipd_id=0 and m.case_id=0 + and m.inv_date>date_add(sysdate(),interval -6 month) + order by m.id desc"; + } else { + $sql = "SELECT m.id AS inv_id,m.inv_med_code,m.inv_date,m.inv_name,m.inv_phone_number, + i.*,date_format(i.expiry,'%m-%Y') as exp_date,(i.disc_amount+disc_whole) as t_discount, + m.net_amount + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.sale_return=0) + Where 1<>1 and m.inv_date>date_add(sysdate(),interval -6 month)"; + } + + $query = $this->db->query($sql); + $data['med_inv_item_list'] = $query->result(); + + $this->load->view('Medical/Med_old_invoice_list', $data); + } + + public function add_remove_item() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('inv_id'); + $item_id = $this->input->post('itemid'); + $rqty = $this->input->post('rqty'); + + $this->Medical_M->opd_reset($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + + $user = $this->ion_auth->user()->row(); + $user_update_info = $user->first_name . '' . $user->last_name . '[' . $user->id . ']' . date('d-m-Y H:i:s'); + + $sql = "select * from inv_med_item where id='" . $item_id . "' "; + $query = $this->db->query($sql); + $inv_med_item_result = $query->result_array(); + + $update = 0; + $msg_box = ""; + + if (count($inv_med_item_result) > 0) { + $inv_med_item = $inv_med_item_result[0]; + + $CGST = $inv_med_item['CGST_per']; + $SGST = $inv_med_item['SGST_per']; + + $item_rate = $inv_med_item['price2']; + $amount_value = $rqty * $item_rate * -1; + + $disc_total = $inv_med_item['disc_amount'] + $inv_med_item['disc_whole']; + $amount = $inv_med_item['amount']; + $twdisc_amount = $inv_med_item['twdisc_amount']; + + $margin = $amount - $twdisc_amount; + $desc_per = $margin * 100 / $amount; + + $disc_amount = $amount_value * $desc_per / 100; + $Tamount_value = $amount_value - $disc_amount; + + unset($inv_med_item['id']); + + $inv_med_item['inv_med_id'] = $inv_id; + + //Old Qty Sale + $old_qty = $inv_med_item['qty']; + $inv_med_item['qty'] = $rqty; + + $inv_med_item['return_item_id'] = $item_id; + $inv_med_item['sale_return'] = 1; + + $inv_med_item['amount'] = $amount_value; + $inv_med_item['tamount'] = $Tamount_value; + + $inv_med_item['disc_amount'] = $disc_amount; + $inv_med_item['disc_per'] = $desc_per; + + $inv_med_item['disc_whole'] = '0'; + $inv_med_item['twdisc_amount'] = $Tamount_value; + + $inv_med_item['update_by_remark'] = $user_update_info; + $inv_med_item['update_by_id'] = $user->id; + + $sql = "select * from inv_med_item + where sale_return=1 and inv_med_id='$inv_id' and return_item_id='$item_id' "; + $query = $this->db->query($sql); + $inv_med_item_return = $query->result(); + + $sql = "select sum(qty) as t_r_qty from inv_med_item + where sale_return=1 and return_item_id='$item_id' "; + $query = $this->db->query($sql); + $med_item_return_total = $query->result(); + + $tot_qty = 0; + + if (count($med_item_return_total) > 0) { + $tot_return = $med_item_return_total[0]->t_r_qty; + $tot_qty = $old_qty - $tot_return; + } + + if ($tot_qty >= $rqty) { + if (count($inv_med_item_return) == 0) { + $update = $this->Medical_M->add_invoiceitem($inv_med_item); + $msg_box = "Added Return list"; + } else { + $update = $inv_med_item_return[0]->id; + + $this->Medical_M->update_invoiceitem($inv_med_item, $update); + $msg_box = "Update Return "; + } + } else { + $update = 0; + $msg_box = "Item Already Returned"; + } + } else { + $update = 0; + $msg_box = "No item found"; + } + + $this->Medical_M->update_invoice_final($inv_id); + + $sql = "SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_med_item i JOIN purchase_invoice_item p ON i.item_code=p.item_code AND p.remove_item=0 ) + where inv_med_id=" . $inv_id . " GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select item_code + from inv_med_item where inv_med_id=" . $inv_id . " Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple'] = $query->result(); + + $sql = "Select sum(amount) as Gtotal,sum(tamount) as tamt, + sum(CGST) as TCGST,sum(SGST) as TSGST,sum(disc_amount) as t_dis_amt + from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal'] = $query->result(); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $sql = "select * from invoice_med_master where id=" . $inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $data['sale_return'] = $data['invoiceMaster'][0]->sale_return; + + $content = $this->load->view('Medical/Med_Item_List', $data, true); + + $rvar = array( + 'update' => $update, + 'msg_text' => $msg_box, + 'content' => $content + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function Update_Return() + { + $this->load->model('Medical_M'); + + $r_qty = $this->input->post('u_qty'); + $item_id = $this->input->post('itemid'); + + $sql = "select * from inv_med_item where id='" . $item_id . "' "; + $query = $this->db->query($sql); + $inv_med_item_result = $query->result_array(); + + $user = $this->ion_auth->user()->row(); + $user_update_info = $user->first_name . '' . $user->last_name . '[' . $user->id . ']' . date('d-m-Y H:i:s'); + + $update = 0; + $msg_box = ""; + + if (count($inv_med_item_result) > 0) { + $inv_med_item = $inv_med_item_result[0]; + + $CGST = $inv_med_item['CGST_per']; + $SGST = $inv_med_item['SGST_per']; + + $item_rate = $inv_med_item['price']; + $amount_value = $r_qty * $item_rate; + + $disc = $inv_med_item['disc_per']; + $disc_amount = $amount_value * $disc / 100; + + $Tamount_value = $amount_value - $disc_amount; + + $inv_med_item['inv_item_id'] = $inv_med_item['id']; + unset($inv_med_item['id']); + $inv_med_item['r_qty'] = $r_qty; + + $inv_med_item['amount'] = $amount_value; + $inv_med_item['tamount'] = $Tamount_value; + + $inv_med_item['update_remark'] = $user_update_info; + + $sql = "select * from inv_med_item_return where return_status=0 and inv_item_id='" . $item_id . "' "; + $query = $this->db->query($sql); + $inv_med_item_return = $query->result_array(); + + if (count($inv_med_item_return) == 0) { + $update = $this->Medical_M->insert_inv_med_item_return_add($inv_med_item); + $msg_box = "Added in Pending Return list"; + } else { + $update = 1; + $this->Medical_M->delete_return_item($item_id); + $update = $this->Medical_M->insert_inv_med_item_return_add($inv_med_item); + $msg_box = "Alerady in Pending Return list, Now Update Again "; + } + } else { + $update = 0; + $msg_box = "No item found"; + } + + $rvar = array( + 'update' => $update, + 'msg_text' => $msg_box + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + public function undo_Return() + { + $this->load->model('Medical_M'); + + $item_id = $this->input->post('itemid'); + + $update = 1; + $msg_box = ""; + + $this->Medical_M->delete_return_item($item_id); + + $rvar = array( + 'update' => $update, + 'msg_text' => $msg_box + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + public function pre_reurn_item_list($inv_type_id, $inv_type = 0) + { + $data['inv_type_id'] = $inv_type_id; + $data['inv_type'] = $inv_type; + + $p_id = 0; + + if ($inv_type == 0) { + $sql = "select * from ipd_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=0) + where m.ipd_id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['ipd_master'][0]->p_id; + } elseif ($inv_type == 1) { + $sql = "select * from organization_case_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['org_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=0) + where m.case_id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['org_master'][0]->p_id; + } else { + $sql = "select * from invoice_med_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['invoice_med_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=0) + where m.id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['invoice_med_master'][0]->patient_id; + } + + $sql = "select * from patient_master_exten + where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $query = $this->db->query($sql_items); + $data['inv_items'] = $query->result(); + + $this->load->view('Medical/Medical_Invoice_Return_pre', $data); + } + + + public function Med_Return_final($inv_type_id, $inv_type = 0) + { + $this->load->model('Medical_M'); + + $data['inv_type_id'] = $inv_type_id; + $data['inv_type'] = $inv_type; + + $p_id = 0; + + if ($inv_type == 0) { + $sql = "select * from ipd_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as ritem_id,t.inv_item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_per,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=0) + where m.ipd_id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['ipd_master'][0]->p_id; + } elseif ($inv_type == 1) { + $sql = "select * from organization_case_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['org_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as ritem_id,t.inv_item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_per,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=0) + where m.case_id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['org_master'][0]->p_id; + } else { + $sql = "select * from invoice_med_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['invoice_med_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as ritem_id,t.inv_item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.amount,t.disc_per,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=0) + where m.id=" . $inv_type_id . " order by t.item_Name,t.batch_no"; + + $p_id = $data['invoice_med_master'][0]->patient_id; + } + + $sql = "select * from patient_master_exten + where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $query = $this->db->query($sql_items); + $data['inv_items'] = $query->result(); + + foreach ($data['inv_items'] as $row) { + $store_stock_id = $row->ss_no; + + $ritem_id = $row->ritem_id; + + $itemid = $row->inv_item_id; + + $item_rate = $row->price; + + $current_qty = $row->qty - $row->r_qty; + + $inv_id = $row->inv_id; + + $amount_value = $current_qty * $item_rate; + + $disc_per = $row->disc_per; + + $disc_amount = $amount_value * $disc_per / 100; + + $Tamount_value = $amount_value - $disc_amount; + + $data['update_inv_med_item'] = array( + 'qty' => $current_qty, + 'disc_amount' => $disc_amount, + 'amount' => $amount_value, + 'tamount' => $Tamount_value, + 'store_stock_id' => $store_stock_id, + 'inv_med_id' => $inv_id, + ); + + $update_return_item = array( + 'return_status' => '1', + ); + + $this->Medical_M->update_return_item($update_return_item, $ritem_id); + + $this->Medical_M->update_invoiceitem($data['update_inv_med_item'], $itemid); + + $this->Medical_M->update_invoice_final($inv_id); + } + + redirect('/Medical/pre_reurn_item_list/' . $inv_type_id . '/' . $inv_type = 0); + } + + + public function Med_Return_print($inv_type_id, $inv_type = 0) + { + $this->load->model('Medical_M'); + + $data['inv_type_id'] = $inv_type_id; + $data['inv_type'] = $inv_type; + + $p_id = 0; + + if ($inv_type == 0) { + $sql = "select * from v_ipd_list where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date, + date_format(return_date_time,'%d-%m-%Y') as str_ret_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as ritem_id,t.inv_item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price, + t.update_remark,t.return_date_time, + t.amount,t.disc_per,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=1) + where m.ipd_id=" . $inv_type_id . " order by t.return_date_time,t.item_Name,t.batch_no"; + + $p_id = $data['ipd_master'][0]->p_id; + } elseif ($inv_type == 1) { + $sql = "select * from organization_case_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['org_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date, + date_format(return_date_time,'%d-%m-%Y') as str_ret_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as ritem_id,t.inv_item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price,t.update_remark,t.return_date_time, + t.amount,t.disc_per,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=1) + where m.case_id=" . $inv_type_id . " order by t.return_date_time,t.item_Name,t.batch_no"; + + $p_id = $data['org_master'][0]->p_id; + } else { + $sql = "select * from invoice_med_master where id='" . $inv_type_id . "' "; + $query = $this->db->query($sql); + $data['invoice_med_master'] = $query->result(); + + $sql_items = "select m.id as inv_id,m.inv_med_code,date_format(inv_date,'%d-%m-%Y') as str_inv_date, + date_format(return_date_time,'%d-%m-%Y') as str_ret_date,m.ipd_id,m.patient_id,m.group_invoice_id,m.case_id, + t.id as ritem_id,t.inv_item_id,t.item_Name,t.qty,t.batch_no,t.expiry,t.store_stock_id as ss_no,t.item_code,t.mrp,t.price,t.update_remark,t.return_date_time, + t.amount,t.disc_per,t.disc_amount,t.tamount,t.r_qty,t.id as return_id + from (invoice_med_master m join inv_med_item_return t on m.id=t.inv_med_id and t.return_status=1) + where m.id=" . $inv_type_id . " order by t.return_date_time,t.item_Name,t.batch_no"; + + $p_id = $data['invoice_med_master'][0]->patient_id; + } + + $sql = "select * from patient_master_exten + where id='" . $p_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $query = $this->db->query($sql_items); + $data['inv_items'] = $query->result(); + + //load mPDF library + $this->load->library('m_pdf'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name = 'Medical_Return_' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + $content = $this->load->view('Medical/Print/Medical_return_medicine', $data, TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + + //$this->load->view('Medical/Medical_Invoice_Return_print',$data); + } + + + //Medical Notification + public function get_medical_bill_pending_higher() + { + $sql = "SELECT COUNT(i.id) AS No_IPD + FROM inv_med_group m JOIN ipd_master i ON m.ipd_id=i.id + WHERE i.ipd_status=0 AND m.med_type=1 AND m.net_amount>0 + AND payment_balance>=50000"; + $query = $this->db->query($sql); + $ipd_pending_balance = $query->result(); + + $No_IPD = $ipd_pending_balance[0]->No_IPD; + if ($No_IPD > 0) { + echo 'High Bal. :' . $No_IPD; + } else { + echo ''; + } + } +} diff --git a/old_code_ci3/controllers/Medical_Invoice_PDF.php b/old_code_ci3/controllers/Medical_Invoice_PDF.php new file mode 100644 index 0000000..57d0b4e --- /dev/null +++ b/old_code_ci3/controllers/Medical_Invoice_PDF.php @@ -0,0 +1,104 @@ +load->library("Pdf"); + + } + + //Sale Report + + public function Report_1() + { + $this->load->view('Medical/Report/Med_Report_1'); + } + + public function Invoice_PDF($sale_date_range,$output=0) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + $this->Medical_M->update_invoice_group_gst($ipd_id); + + $cash_where=" "; + + if($cash==0) + { + $cash_where.=" and ipd_credit=0 "; + $med_type=1; + }elseif($cash==1) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=1 "; + $med_type=2; + }elseif($cash==2) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=0 "; + $med_type=3; + } + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,sum(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + sum(twdisc_amount) as twdisc_amount, + sum(i.disc_amount+i.disc_whole) as d_amt, + sum(i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.group_invoice_id>0 and m.ipd_id=".$ipd_id.$cash_where." group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where group_invoice_id>0 and ipd_id=".$ipd_id.$cash_where." group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_master'][0]->org_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $sql="select sum(if(p.credit_debit>0,p.amount*-1,p.amount)) as paid_amount + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_Total']= $query->result(); + + $sql="select p.*,if(p.credit_debit>0,p.amount*-1,p.amount) as paid_amount, + (case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' when 5 then 'Cash Return' else 'Other' end) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from inv_med_group + where ipd_id='".$ipd_id."' and med_type=1"; + $query = $this->db->query($sql); + $data['inv_med_group']= $query->result(); + + + + } + + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Medical_Print.php b/old_code_ci3/controllers/Medical_Print.php new file mode 100644 index 0000000..67e3915 --- /dev/null +++ b/old_code_ci3/controllers/Medical_Print.php @@ -0,0 +1,1150 @@ +load->model('Medical_M'); + + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%y')as expiry, + i.price,i.qty,(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + (twdisc_amount) as twdisc_amount, + (i.disc_amount+i.disc_whole) as d_amt, + (i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per ,i.sale_return, + i.TaxableAmount + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.id=$inv_id order by i.sale_return,id"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select *, + date_format(inv_date,'%d-%m-%Y') as str_inv_date, + (discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST + from invoice_med_master + where id=$inv_id"; + $query = $this->db->query($sql); + $data['invoice_med_master']= $query->result(); + + $data['Doc_name']=""; + + if($data['invoice_med_master'][0]->doc_id>0) + { + $doc_id=$data['invoice_med_master'][0]->doc_id; + + $sql="select * from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + $data['Doc_name']=$doctor_master[0]->p_title.' '.$doctor_master[0]->p_fname; + }else{ + $data['Doc_name']=$data['invoice_med_master'][0]->doc_name; + } + + if($data['invoice_med_master'][0]->patient_id>0) + { + $p_id=$data['invoice_med_master'][0]->patient_id; + + $sql="select * from patient_master_exten + where id=$p_id"; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + + + + if($data['invoice_med_master'][0]->ipd_id>0) + { + $ipd_id=$data['invoice_med_master'][0]->ipd_id; + + $sql="select * from v_ipd_list + where id=$ipd_id"; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $org_id=$data['ipd_master'][0]->case_id; + + $sql="select * from organization_case_master + where id=$org_id"; + $query = $this->db->query($sql); + $data['org_master']= $query->result(); + + + }else if( $data['invoice_med_master'][0]->case_id>0) + { + + $org_id=$data['invoice_med_master'][0]->case_id; + + $sql="select * from organization_case_master + where id=$org_id"; + $query = $this->db->query($sql); + $data['org_master']= $query->result(); + } + + } + + $sql="select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p + where p.Customerof_type in (1,3) and Medical_invoice_id=$inv_id"; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Report-MedicalBill_'.$inv_id.'_'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + + if($print_format==0) + { + $content=$this->load->view('Medical/Print/medical_bill_print_format_single',$data,TRUE); + }elseif($print_format==1){ + + $content=$this->load->view('Medical/Print/medical_bill_print_a6',$data,TRUE); + $this->m_pdf->pdf->SetJS('this.print();'); + }elseif($print_format==2){ + + $content=$this->load->view('Medical/Print/medical_bill_print_a5',$data,TRUE); + $this->m_pdf->pdf->SetJS('this.print();'); + }elseif($print_format==3){ + + $content=$this->load->view('Medical/Print/medical_bill_print_a5_discount',$data,TRUE); + $this->m_pdf->pdf->SetJS('this.print();'); + } + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + + + } + + + public function invoice_print_all($ipd_id,$cash=0,$salt_name=0) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $cash_where=" "; + + if($cash==0) + { + $cash_where.=" and ipd_credit=0 "; + $med_type=1; + }elseif($cash==1) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=1 "; + $med_type=2; + }elseif($cash==2) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=0 "; + $med_type=3; + } + + $this->Medical_M->update_invoice_group_gst($ipd_id,$med_type); + + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,sum(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + sum(twdisc_amount) as twdisc_amount, + sum(i.disc_amount+i.disc_whole) as d_amt, + sum(i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per , + p.genericname + from (inv_med_item i join invoice_med_master m on i.inv_med_id=m.id) + Left join med_product_master p on i.item_code=p.id + where m.group_invoice_id>0 and i.qty>0 and m.ipd_id=".$ipd_id.$cash_where." + group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where ipd_id=".$ipd_id.$cash_where." group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name,m.p_relative,m.p_rname, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_master'][0]->org_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $sql="select sum(if(p.credit_debit>0,p.amount*-1,p.amount)) as paid_amount + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_Total']= $query->result(); + + $sql="select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from inv_med_group + where ipd_id='".$ipd_id."' and med_type='".$med_type."'"; + $query = $this->db->query($sql); + $data['inv_med_group']= $query->result(); + + + $data['salt_name']=$salt_name; + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Report-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/medical_bill_print_format',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + //$this->m_pdf->pdf->Output('uploads/'.$filepath,"F"); + + } + + public function invoice_print_salt_all($ipd_id,$cash=0,$print_size=0) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $cash_where=" "; + + if($cash==0) + { + $cash_where.=" and ipd_credit=0 "; + $med_type=1; + }elseif($cash==1) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=1 "; + $med_type=2; + }elseif($cash==2) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=0 "; + $med_type=3; + } + + $this->Medical_M->update_invoice_group_gst($ipd_id,$med_type); + + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,sum(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + sum(twdisc_amount) as twdisc_amount, + sum(i.disc_amount+i.disc_whole) as d_amt, + sum(i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per, + p.genericname + from (inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id) + join med_product_master p on i.item_code=p.id + where m.group_invoice_id>0 and i.qty>0 and m.ipd_id=".$ipd_id.$cash_where." + group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where ipd_id=".$ipd_id.$cash_where." group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_master'][0]->org_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $sql="select sum(if(p.credit_debit>0,p.amount*-1,p.amount)) as paid_amount + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_Total']= $query->result(); + + $sql="select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from inv_med_group + where ipd_id='".$ipd_id."' and med_type='".$med_type."'"; + $query = $this->db->query($sql); + $data['inv_med_group']= $query->result(); + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Report-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/medical_bill_print_format',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + //$this->m_pdf->pdf->Output('uploads/'.$filepath,"F"); + + } + + public function invoice_print_with_return_all($ipd_id,$cash=0,$print_size=0) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $cash_where=" "; + + if($cash==0) + { + $med_type=1; + }elseif($cash==1) + { + $med_type=2; + }elseif($cash==2) + { + $med_type=3; + } + + $this->Medical_M->update_invoice_group_gst($ipd_id,$med_type); + + /* $sql="SELECT *,SUM(i.amount) AS t_amount + FROM v_med_item_with_return i + where i.ipd_id=".$ipd_id.$cash_where." + group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); */ + + //$query = $this->db->query('call p_get_list_ipd_med_item('.$ipd_id.')'); + //$query->next_result(); + $sql="Select i.inv_med_id AS inv_med_id,i.id AS id,m.ipd_id AS ipd_id,i.item_Name AS item_Name, + i.formulation AS formulation,i.batch_no AS batch_no,date_format(i.expiry,'%m-%Y') AS expiry, + i.price AS price,i.qty AS Cur_qty,if(isnull(r.r_qty),i.qty,(i.qty + sum(r.r_qty))) AS qty, + (if(isnull(r.r_qty),i.qty,(i.qty + sum(r.r_qty)))*i.price) AS amount,i.HSNCODE AS HSNCODE, + m.inv_med_code AS inv_med_code,m.id AS m_id,date_format(m.inv_date,'%d-%m-%Y') AS str_inv_date, + r.id AS r_id,sum(r.r_qty) AS tot_return + from ((inv_med_item i join invoice_med_master m on((m.id = i.inv_med_id))) + left join inv_med_item_return r on((i.id = r.inv_item_id))) + WHERE m.ipd_credit=0 AND m.ipd_id=$ipd_id + group by i.inv_med_id,i.id WITH ROLLUP "; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="SELECT *,SUM(i.amount) AS t_amount + FROM v_med_item_return i + where i.ipd_id=".$ipd_id.$cash_where." + group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items_return']= $query->result(); + + $sql="select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where ipd_id=".$ipd_id.$cash_where." group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_master'][0]->org_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $sql="select sum(if(p.credit_debit>0,p.amount*-1,p.amount)) as paid_amount + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_Total']= $query->result(); + + $sql="select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from inv_med_group + where ipd_id='".$ipd_id."' and med_type='".$med_type."'"; + $query = $this->db->query($sql); + $data['inv_med_group']= $query->result(); + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Report-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/medical_bill_print_format_with_return',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + //$this->m_pdf->pdf->Output('uploads/'.$filepath,"F"); + + } + + + public function invoice_print_all_bill($ipd_id) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $cash_where=" "; + + + $this->Medical_M->update_invoice_group_gst($ipd_id,'1'); + $this->Medical_M->update_invoice_group_gst($ipd_id,'2'); + $this->Medical_M->update_invoice_group_gst($ipd_id,'3'); + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,sum(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + sum(twdisc_amount) as twdisc_amount, + sum(i.disc_amount+i.disc_whole) as d_amt, + sum(i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.group_invoice_id>0 and i.qty>0 and m.ipd_id=".$ipd_id.$cash_where." group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where group_invoice_id>0 and ipd_id=".$ipd_id.$cash_where." group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_master'][0]->org_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name='Report-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/medical_bill_print_format_newpage',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + + public function medicine_list_print_all($ipd_id,$cash=-1) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $sql="select i.item_Name,i.formulation,p.genericname, SUM(i.qty) AS i_qty_total + FROM (inv_med_item i join invoice_med_master m on i.inv_med_id=m.id) + JOIN med_product_master p ON i.item_code=p.id + where m.group_invoice_id>0 and i.qty>0 + and m.ipd_id=$ipd_id AND i.formulation <>'SUR' + group BY i.item_code order BY i.item_Name"; + + //echo $sql; + + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select i.item_Name,i.formulation,p.genericname, SUM(i.qty) AS i_qty_total + FROM (inv_med_item i join invoice_med_master m on i.inv_med_id=m.id) + JOIN med_product_master p ON i.item_code=p.id + where m.group_invoice_id>0 and i.qty>0 + and m.ipd_id=$ipd_id AND i.formulation ='SUR' + group BY i.item_code order BY i.item_Name"; + + //echo $sql; + + $query = $this->db->query($sql); + $data['inv_items_sur']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id,m.doc_list from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $data['doc_list_sign']=""; + $data['doc_list_main_sign']=""; + + if(count($data['ipd_master'])>0) + { + $doc_list=$data['ipd_master'][0]->doc_list; + + $sql="select d.id,d.p_fname,d.p_title,d.mphone1,d.mphone2, + if(d.gender=1,'Male','Female') as xgender,Get_Age(d.dob) as age, + d.dob,d.zip,d.email1,d.email2, + group_concat(distinct m.SpecName) as SpecName,d.doc_sign + from (doctor_master d left join (doc_spec s join med_spec m on s.med_spec_id=m.id) on d.id=s.doc_id) + where d.id in (".$doc_list.") group by d.id"; + $query = $this->db->query($sql); + $doc_master= $query->result(); + + $doc_list=""; + + foreach($doc_master as $row) + { + $doc_list.="Dr. ".$row->p_fname." [".$row->SpecName."]

"; + } + + $data['doc_list']=$doc_list; + + } + + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $file_name='MedicineList-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/Medicine_consolidated_List',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function medicine_list_print($ipd_id,$cash=-1) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $sql="SELECT i.inv_med_id,i.id,i.item_Name,i.formulation,p.genericname, + sum(i.qty) as tot_qty, m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date + FROM (inv_med_item i join invoice_med_master m on i.inv_med_id=m.id) + JOIN med_product_master p ON i.item_code=p.id + where m.group_invoice_id>0 and i.qty>0 + and m.ipd_id=$ipd_id AND i.formulation <>'SUR' + GROUP BY i.item_code + order by m.inv_date,i.id"; + + //echo $sql; + + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id,m.doc_list from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $data['doc_list_sign']=""; + $data['doc_list_main_sign']=""; + + if(count($data['ipd_master'])>0) + { + $doc_list=$data['ipd_master'][0]->doc_list; + + $sql="select d.id,d.p_fname,d.p_title,d.mphone1,d.mphone2, + if(d.gender=1,'Male','Female') as xgender,Get_Age(d.dob) as age, + d.dob,d.zip,d.email1,d.email2, + group_concat(distinct m.SpecName) as SpecName,d.doc_sign + from (doctor_master d left join (doc_spec s join med_spec m on s.med_spec_id=m.id) on d.id=s.doc_id) + where d.id in (".$doc_list.") group by d.id"; + $query = $this->db->query($sql); + $doc_master= $query->result(); + + $doc_list=""; + $doc_list_sign=' '; + + $doc_list_main_sign='

Treating Consultant / Authorized Team Doctor

'; + + $row_num=0; + foreach($doc_master as $row) + { + $row_num=$row_num+1; + + $doc_list.="Dr. ".$row->p_fname." [".$row->SpecName."]
"; + + $doc_list_sign.=' + + + + '; + + $mod_r=$row_num % 2; + if($mod_r>0) + { + $doc_list_main_sign.=''; + } + + $doc_list_main_sign.=' + '; + + if($mod_r==0) + { + $doc_list_main_sign.=''; + } + } + + $row_num=$row_num+1; + $mod_r=$row_num % 2; + + if($mod_r==0) + { + + $doc_list_main_sign.=' + '; + } + + $doc_list_sign.="

Treating Consultant/Department/Specialty

Dr. '.$row->p_fname.' +
'.$row->SpecName.' +
'.nl2br($row->doc_sign).' +
+
+ Signature of Consultant +




+
Dr. '.$row->p_fname.'
['.$row->SpecName.']
+ '.nl2br($row->doc_sign).' +
"; + $doc_list_main_sign.=""; + + $data['doc_list_sign']=$doc_list_sign; + $data['doc_list_main_sign']=$doc_list_main_sign; + } + + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $file_name='MedicineList-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/Medicine_List',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function medicine_list_surgical_print($ipd_id,$cash=-1) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + $this->load->model('Medical_M'); + + $cash_where=" "; + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + (twdisc_amount) as twdisc_amount, + (i.disc_amount+i.disc_whole) as d_amt, + (i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.group_invoice_id>0 and i.qty>0 + and m.ipd_id=$ipd_id and formulation ='SUR' order by m.inv_date,i.id"; + + //echo $sql; + + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id,m.doc_list from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $data['doc_list_sign']=""; + $data['doc_list_main_sign']=""; + + if(count($data['ipd_master'])>0) + { + $doc_list=$data['ipd_master'][0]->doc_list; + + $sql="select d.id,d.p_fname,d.p_title,d.mphone1,d.mphone2, + if(d.gender=1,'Male','Female') as xgender,Get_Age(d.dob) as age, + d.dob,d.zip,d.email1,d.email2, + group_concat(distinct m.SpecName) as SpecName,d.doc_sign + from (doctor_master d left join (doc_spec s join med_spec m on s.med_spec_id=m.id) on d.id=s.doc_id) + where d.id in (".$doc_list.") group by d.id"; + $query = $this->db->query($sql); + $doc_master= $query->result(); + + $doc_list=""; + $doc_list_sign=' '; + + $doc_list_main_sign='

Treating Consultant / Authorized Team Doctor

'; + + $row_num=0; + foreach($doc_master as $row) + { + $row_num=$row_num+1; + + $doc_list.="Dr. ".$row->p_fname." [".$row->SpecName."]
"; + + $doc_list_sign.=' + + + + '; + + $mod_r=$row_num % 2; + if($mod_r>0) + { + $doc_list_main_sign.=''; + } + + $doc_list_main_sign.=' + '; + + if($mod_r==0) + { + $doc_list_main_sign.=''; + } + } + + $row_num=$row_num+1; + $mod_r=$row_num % 2; + + if($mod_r==0) + { + + $doc_list_main_sign.=' + '; + } + + $doc_list_sign.="

Treating Consultant/Department/Specialty

Dr. '.$row->p_fname.' +
'.$row->SpecName.' +
'.nl2br($row->doc_sign).' +
+
+ Signature of Consultant +




+
Dr. '.$row->p_fname.'
['.$row->SpecName.']
+ '.nl2br($row->doc_sign).' +
"; + $doc_list_main_sign.=""; + + $data['doc_list_sign']=$doc_list_sign; + $data['doc_list_main_sign']=$doc_list_main_sign; + } + + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $file_name='MedicineList-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/Medicine_List',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function ipd_cash_print_pdf($ipd_id,$payid) + { + $sql="select *,date_format(payment_date,'%d-%m-%Y %h:%i %p') as payment_date_str , + if(credit_debit=0,'','Return') as Amount_str + from payment_history_medical where Customerof_type=2 and ipd_id=$ipd_id and id=$payid"; + $query = $this->db->query($sql); + $data['ipd_payment']= $query->result(); + + $sql="select * from ipd_master where id =".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $pno=$data['ipd_master'][0]->p_id; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $data['ipd_id']=$ipd_id; + $data['payid']=$payid; + + //load mPDF library + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Charge_Invoice-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $content=$this->load->view('Medical/Print//medical_cash_received_bill',$data,TRUE); + + //echo $content; + + //$this->m_pdf->pdf->debug = true; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output("TEST.pdf","I"); + } + + public function Print_bill_on_uhid() + { + + } + + public function Print_bill_on_uhid_print($uhis_id,$cash=0,$print_size=0) + { + //$cash 0 for Cash Only,1 for OPD Cridit + $this->load->model('Medical_M'); + + $cash_where=" "; + + if($cash==0) + { + $cash_where.=" and ipd_credit=0 "; + $med_type=1; + }elseif($cash==1) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=1 "; + $med_type=2; + }elseif($cash==2) + { + $cash_where.=" and ipd_credit=1 and ipd_credit_type=0 "; + $med_type=3; + } + + $this->Medical_M->update_invoice_group_gst($ipd_id,$med_type); + + + $sql="select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%Y')as expiry, + i.price,i.qty,sum(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + sum(twdisc_amount) as twdisc_amount, + sum(i.disc_amount+i.disc_whole) as d_amt, + sum(i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.group_invoice_id>0 and i.qty>0 and m.ipd_id=".$ipd_id.$cash_where." + group by i.inv_med_id,i.id WITH ROLLUP"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(CGST_Tamount) as CGST_Tamount, + sum(SGST_Tamount) as SGST_Tamount, + sum(TaxableAmount) as TaxableAmount, + sum(net_amount) as net_amount, + sum(payment_received) as payment_received, + sum(payment_balance) as payment_balance, + sum(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_med_master + where ipd_id=".$ipd_id.$cash_where." group by ipd_id"; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select m.p_id,p.p_fname,m.ipd_code,p.p_code, m.doc_name, + m.org_id from v_ipd_list m join patient_master p on m.p_id=p.id + where m.id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where id='".$data['ipd_master'][0]->org_id."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $sql="select sum(if(p.credit_debit>0,p.amount*-1,p.amount)) as paid_amount + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_Total']= $query->result(); + + $sql="select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p join inv_med_group m + on p.group_id=m.med_group_id + where m.ipd_id=".$ipd_id." and m.med_type=".$med_type; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from inv_med_group + where ipd_id='".$ipd_id."' and med_type='".$med_type."'"; + $query = $this->db->query($sql); + $data['inv_med_group']= $query->result(); + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Report-MedicalBill-'.$ipd_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + $content=$this->load->view('Medical/Print/medical_bill_print_format',$data,TRUE); + + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + //$this->m_pdf->pdf->Output('uploads/'.$filepath,"F"); + + } + + + public function print_purchase_return($inv_id) + { + $sql = "select p.id,p.p_r_invoice_no as Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d/%m/%Y') as str_date_of_invoice, + p.sid,s.name_supplier,s.short_name,s.gst_no,p.status as inv_status + from purchase_return_invoice p join med_supplier s on p.sid=s.sid + where p.id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice'] = $query->result(); + + $sql = "select p.*,r.purchase_inv_id,r.qty as r_qty,Round(r.qty/p.packing,2) AS qty_pak,r.id as r_id, + if(r.batch_no_r='',p.batch_no,r.batch_no_r) as batch_no_r_s, + date_format(p.expiry_date,'%m/%y') as exp_date_str ,p.purchase_unit_rate*r.qty AS r_amount,p.purchase_unit_rate + from purchase_return_invoice_item r join purchase_invoice_item p on r.purchase_item_id=p.id + where purchase_inv_id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice_item'] = $query->result(); + + $content = $this->load->view('Medical/Stock/purchase_return_invoice_item_print', $data, true); + + //load mPDF library + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Return_Invoice-'.$inv_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //echo $content; + + $this->m_pdf->pdf->debug = true; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + } + + public function print_purchase($inv_id) + { + $sql="select * from med_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $sql="select p.*,s.name_supplier from purchase_invoice p join med_supplier s on p.sid=s.sid where p.id=".$inv_id; + $query = $this->db->query($sql); + $data['inv_master_data']= $query->result(); + + $sql="select * from purchase_invoice_item where purchase_id='".$inv_id."' "; + $query = $this->db->query($sql); + $data['purchase_item']= $query->result(); + + $content = $this->load->view('Medical/Stock/purchase_invoice_item_print', $data, true); + + //load mPDF library + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Return_Invoice-'.$inv_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //echo $content; + + $this->m_pdf->pdf->debug = true; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output("TEST.pdf","I"); + } + +} + diff --git a/old_code_ci3/controllers/Medical_Report.php b/old_code_ci3/controllers/Medical_Report.php new file mode 100644 index 0000000..1eb3b52 --- /dev/null +++ b/old_code_ci3/controllers/Medical_Report.php @@ -0,0 +1,3012 @@ +load->view('Medical/Report/Med_Report_1'); + } + + public function Report_1_data($sale_date_range, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.inv_date >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "select count(DISTINCT m.id) as No_invoice, + count( DISTINCT m.patient_id) as No_Patients, + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + Sum(i.twdisc_amount) as tnet_amount, + sum(if(m.ipd_id=0 and m.case_id=0,i.twdisc_amount,0)) as OPD_Cash_Bill_amount, + sum(if(m.ipd_id=0 and m.case_id>1,i.twdisc_amount,0)) as OPD_Org_Bill_amount, + + sum(if(m.ipd_id>0 and m.ipd_credit=0,i.twdisc_amount,0)) as IPD_Cash_Bill_amount, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=1,i.twdisc_amount,0)) as IPD_Credit_Bill_amount, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=0,i.twdisc_amount,0)) as IPD_Package_Bill_amount + + from ((invoice_med_master m join inv_med_item i on m.id=i.inv_med_id) + left join patient_master p on m.patient_id=p.id) + left join organization_case_master o on m.case_id=o.id + + where " . $sql_where . " group by m.inv_date with Rollup"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = ''; + + $content .= ' + + + + + + + + + + + + '; + $sr_no = 0; + $cr_Amt_row = 0; + $cr_Amt_total = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $cr_Amt_row = $row->OPD_Org_Bill_amount + $row->IPD_Credit_Bill_amount + $row->IPD_Package_Bill_amount; + + if ($row->inv_date == '') { + $content .= ' + + + + + + + + + + + + '; + } else { + $content .= ' + + + + + + + + + + + + '; + $cr_Amt_total += $cr_Amt_row; + } + } + + $content .= '
#DateNo. PatientsNo. Inv.Net Amt.OPD CashOPD Org.IPD Cash AmountIPD Cr HospitalIPD Cr Pkg. HospitalTot. Cr. Amt.
#Total' . $row->No_Patients . '' . $row->No_invoice . '' . $row->tnet_amount . '' . $row->OPD_Cash_Bill_amount . '' . $row->OPD_Org_Bill_amount . '' . $row->IPD_Cash_Bill_amount . '' . $row->IPD_Credit_Bill_amount . '' . $row->IPD_Package_Bill_amount . '' . $cr_Amt_total . '
' . $sr_no . '' . $row->inv_date_str . '' . $row->No_Patients . '' . $row->No_invoice . '' . $row->tnet_amount . '' . $row->OPD_Cash_Bill_amount . '' . $row->OPD_Org_Bill_amount . '' . $row->IPD_Cash_Bill_amount . '' . $row->IPD_Credit_Bill_amount . '' . $row->IPD_Package_Bill_amount . '' . $cr_Amt_row . '
'; + + + $this->load->library('m_pdf'); + + $file_name = "Report-MedicalBill-" . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath, "I"); + } + + + //Daily Medicine Sale Report + public function Report_daily_med_sale() + { + + $this->load->view('Medical/Report/Med_Report_daily_med_sale'); + } + + public function Report_daily_med_sale_data($sale_date_range, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.inv_date >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "SELECT i.item_code,i.item_Name, + SUM(if(m.sale_return=0,i.qty,0)) AS Sale_Qty, + SUM(if(m.sale_return=0,i.twdisc_amount,0)) AS Sale_Amount, + SUM(if(m.sale_return=0,i.qty*p.purchase_unit_rate,0)) AS Purchase_Amount, + SUM(if(m.sale_return=1,i.qty,0)) AS Return_Qty, + SUM(if(m.sale_return=1,i.twdisc_amount,0)) AS Return_Amount, + SUM(if(m.sale_return=1,i.qty*p.purchase_unit_rate,0)) AS return_Purchase_Amount, + q.cur_qty + FROM (invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id) + LEFT JOIN purchase_invoice_item p ON i.store_stock_id=p.id + JOIN (SELECT t.item_code,SUM(t.total_unit-total_sale_unit-total_return_unit-total_lost_unit) AS cur_qty + FROM purchase_invoice_item t + GROUP BY t.item_code) AS q ON q.item_code=i.item_code + Where " . $sql_where . " GROUP BY i.item_code ORDER BY i.item_Name"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = ''; + + $content .= ' + + + + + + + + + + + '; + $sr_no = 0; + $tot_sale_amt = 0; + $tot_return_amt = 0; + $tot_pur_amt = 0; + $tot_pur_return_amt = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $tot_sale_amt = $tot_sale_amt + $row->Sale_Amount; + $tot_return_amt = $tot_return_amt + $row->Return_Amount; + + $tot_pur_amt += $row->Purchase_Amount; + $tot_pur_return_amt += $row->return_Purchase_Amount; + + $content .= ' + + + + + + + + + + + '; + } + + $content .= ' + + + + + + + + + + + '; + + $content .= '
#Item CodeItem NameSale QtySale AmtPur. AmtReturn QtyReturn AmtReturn Pur. AmtCur.Qty
' . $sr_no . '' . $row->item_code . '' . $row->item_Name . '' . $row->Sale_Qty . '' . $row->Sale_Amount . '' . $row->Purchase_Amount . '' . $row->Return_Qty . '' . $row->Return_Amount . '' . $row->return_Purchase_Amount . '' . $row->cur_qty . '
#Total Sale' . $tot_sale_amt . '' . $tot_pur_amt . 'Total Return' . $tot_return_amt . '' . $tot_pur_return_amt . '
'; + + $Tot_Margin = ($tot_sale_amt - $tot_pur_amt) - ($tot_return_amt - $tot_pur_return_amt); + + $content .= "Total Margin : Rs." . $Tot_Margin; + + if ($output == 0) { + + $this->load->library('m_pdf'); + + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + + ExportExcel($content, $file_name); + } + } + + + // + //Daily Medicine Doctor Wise Sale Report + public function Report_daily_med_sale_doc() + { + $sql = "select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $this->load->view('Medical/Report/Med_Report_daily_med_doc_sale', $data); + } + + public function Report_daily_med_sale_doc_data($sale_date_range, $doc_id, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + if ($doc_id <> 0) { + $doc_id_list = str_replace('S', ',', $doc_id); + + $sql_where .= " and m.doc_id in (" . $doc_id_list . ")"; + } + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.inv_date >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "SELECT m.doc_id,d.p_fname, i.item_code,i.item_Name, + SUM(if(m.sale_return=0,i.qty,i.qty*-1)) AS Sale_Qty, + SUM(if(m.sale_return=0,i.twdisc_amount,i.twdisc_amount*-1)) AS Sale_Amount, + SUM(if(m.sale_return=0,i.qty*p.purchase_unit_rate,i.qty*p.purchase_unit_rate*-1)) AS Purchase_Amount, + q.cur_qty,i.CGST_per, + SUM(if(m.sale_return=0,(i.CGST+i.SGST),(i.CGST+i.SGST)*-1)) AS Sale_GST + FROM ((invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id) + LEFT JOIN purchase_invoice_item p ON i.store_stock_id=p.id + JOIN (SELECT t.item_code,SUM(t.total_unit-total_sale_unit-total_return_unit-total_lost_unit) AS cur_qty + FROM purchase_invoice_item t + GROUP BY t.item_code) AS q ON q.item_code=i.item_code) + LEFT JOIN doctor_master d ON m.doc_id=d.id + Where $sql_where and m.ipd_id=0 + GROUP BY m.doc_id,i.item_code ORDER BY i.item_Name"; + + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = 'Date Between ' . $minRange . ' and ' . $maxRange . '
+ + '; + + $content .= ' + + + + + + + + + + '; + $sr_no = 0; + $tot_sale_amt = 0; + $tot_sale_gst = 0; + $tot_pur_amt = 0; + $tot_pur_return_amt = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $tot_sale_amt = $tot_sale_amt + $row->Sale_Amount; + + $tot_pur_amt += $row->Purchase_Amount; + + $tot_sale_gst += $row->Sale_GST; + + $content .= ' + + + + + + + + + + '; + } + + $content .= ' + + + + + + + + + + '; + + $content .= '
#Doc. NameItem CodeItem NameSale QtySale AmtPur. AmtSale GSTCur.Qty
' . $sr_no . '' . $row->p_fname . '' . $row->item_code . '' . $row->item_Name . '' . $row->Sale_Qty . '' . $row->Sale_Amount . '' . $row->Purchase_Amount . '' . $row->Sale_GST . '' . $row->cur_qty . '
#Total Sale' . $tot_sale_amt . '' . $tot_pur_amt . '' . $tot_sale_gst . '
'; + + $Tot_Margin = ($tot_sale_amt - $tot_pur_amt - $tot_sale_gst); + + $content .= "Total Margin (Sale - Purchase - SaleGST): Rs. " . $Tot_Margin; + + if ($output == 0) { + + $this->load->library('m_pdf'); + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + + ExportExcel($content, $file_name); + } + } + + public function Report_daily_med_sale_doc_data_ipd($sale_date_range, $doc_id, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + if ($doc_id <> 0) { + //$doc_id_list = str_replace('S', ',', $doc_id); + + $sql_where .= " and FIND_IN_SET($doc_id,ipd.doc_list)>0"; + } + + $sql_where .= " and ipd.discharge_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and ipd.discharge_date >=date_add(sysdate(),interval -2 month)"; + } + + $sql = "SELECT ipd.doc_name,ipd.doc_list, i.item_code,i.item_Name, + SUM(if(m.sale_return=0,i.qty,i.qty*-1)) AS Sale_Qty, + SUM(if(m.sale_return=0,i.twdisc_amount,i.twdisc_amount*-1)) AS Sale_Amount, + SUM(if(m.sale_return=0,i.qty*p.purchase_unit_rate,i.qty*p.purchase_unit_rate*-1)) AS Purchase_Amount, + q.cur_qty,i.CGST_per, + SUM(if(m.sale_return=0,(i.CGST+i.SGST),(i.CGST+i.SGST)*-1)) AS Sale_GST + FROM ((((invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id AND m.ipd_id>0) JOIN v_ipd_list ipd ON m.ipd_id=ipd.id) + LEFT JOIN purchase_invoice_item p ON i.store_stock_id=p.id ) + + JOIN (SELECT t.item_code,SUM(t.total_unit-total_sale_unit-total_return_unit-total_lost_unit) AS cur_qty + FROM purchase_invoice_item t + GROUP BY t.item_code) AS q ON q.item_code=i.item_code) + Where $sql_where and m.ipd_id>0 + GROUP BY m.doc_id,i.item_code ORDER BY i.item_Name"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = 'Date Between ' . $minRange . ' and ' . $maxRange . '
+ + '; + + $content .= ' + + + + + + + + + + '; + $sr_no = 0; + $tot_sale_amt = 0; + $tot_sale_gst = 0; + $tot_pur_amt = 0; + $tot_pur_return_amt = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $tot_sale_amt = $tot_sale_amt + $row->Sale_Amount; + + $tot_pur_amt += $row->Purchase_Amount; + + $tot_sale_gst += $row->Sale_GST; + + $content .= ' + + + + + + + + + + '; + } + + $content .= ' + + + + + + + + + + '; + + $content .= '
#Doc. NameItem CodeItem NameSale QtySale AmtPur. AmtSale GSTCur.Qty
' . $sr_no . '' . $row->doc_name . '' . $row->item_code . '' . $row->item_Name . '' . $row->Sale_Qty . '' . $row->Sale_Amount . '' . $row->Purchase_Amount . '' . $row->Sale_GST . '' . $row->cur_qty . '
#Total Sale' . $tot_sale_amt . '' . $tot_pur_amt . '' . $tot_sale_gst . '
'; + + $Tot_Margin = ($tot_sale_amt - $tot_pur_amt - $tot_sale_gst); + + $content .= "Total Margin (Sale - Purchase - SaleGST): Rs. " . $Tot_Margin; + + if ($output == 0) { + + $this->load->library('m_pdf'); + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + + ExportExcel($content, $file_name); + } + } + //Company Wise Medicine Sale Report + public function Report_company_med_sale() + { + $sql = "Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company'] = $query->result(); + + $this->load->view('Medical/Report/Med_Report_company_med_sale', $data); + } + + public function Report_company_med_sale_data($sale_date_range, $comp_id, $output = 0) + { + $sql_where = " c.company_id= " . $comp_id; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.inv_date >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "SELECT i.item_code,i.item_Name,c.company_name, + SUM(if(m.sale_return=0,i.qty,0)) AS Sale_Qty, + SUM(if(m.sale_return=0,i.twdisc_amount,0)) AS Sale_Amount, + SUM(if(m.sale_return=0,i.qty*p.purchase_unit_rate,0)) AS Purchase_Amount, + SUM(if(m.sale_return=1,i.qty,0)) AS Return_Qty, + SUM(if(m.sale_return=1,i.twdisc_amount,0)) AS Return_Amount, + SUM(if(m.sale_return=1,i.qty*p.purchase_unit_rate,0)) AS return_Purchase_Amount + FROM ((invoice_med_master m JOIN inv_med_item i ON m.id=i.inv_med_id) + JOIN purchase_invoice_item p ON i.store_stock_id=p.id ) + JOIN med_product_master c ON i.item_code=c.id + Where " . $sql_where . " GROUP BY i.item_code ORDER BY i.item_Name"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = ''; + + $content .= ' + + + + + + + + + + '; + $sr_no = 0; + $tot_sale_amt = 0; + $tot_return_amt = 0; + $tot_pur_amt = 0; + $tot_pur_return_amt = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $tot_sale_amt = $tot_sale_amt + $row->Sale_Amount; + $tot_return_amt = $tot_return_amt + $row->Return_Amount; + + $tot_pur_amt += $row->Purchase_Amount; + $tot_pur_return_amt += $row->return_Purchase_Amount; + + $content .= ' + + + + + + + + + + '; + } + + $content .= ' + + + + + + + + + + '; + + $content .= '
#Item CodeItem NameSale QtySale AmtPur. AmtReturn QtyReturn AmtReturn Pur. Amt
' . $sr_no . '' . $row->item_code . '' . $row->item_Name . '' . $row->Sale_Qty . '' . $row->Sale_Amount . '' . $row->Purchase_Amount . '' . $row->Return_Qty . '' . $row->Return_Amount . '' . $row->return_Purchase_Amount . '
#Total Sale' . $tot_sale_amt . '' . $tot_pur_amt . 'Total Return' . $tot_return_amt . '' . $tot_pur_return_amt . '
'; + + $Tot_Margin = ($tot_sale_amt - $tot_pur_amt) - ($tot_return_amt - $tot_pur_return_amt); + + $content .= "Total Margin : Rs." . $Tot_Margin; + + if ($output == 0) { + + $this->load->library('m_pdf'); + + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + $file_name = "Report-MedicalSale-" . date('Ymdhis') . ".pdf"; + + ExportExcel($content, $file_name); + } + } + + public function Report_company_med_purchase_data($sale_date_range, $comp_id, $output = 0) + { + $sql_where = " p.company_id= " . $comp_id; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.date_of_invoice >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "SELECT i.item_code,i.Item_name,i.packing, + sum(i.qty) as qty,sum(i.taxable_amount) AS taxable_amount, + sum(i.net_amount) AS net_amount ,c.company_name + FROM ((purchase_invoice_item i JOIN purchase_invoice m on i.purchase_id=m.id) + JOIN med_product_master p ON i.item_code=p.id) JOIN med_company c ON p.company_id=c.id + Where " . $sql_where . " GROUP BY i.item_code ORDER BY i.Item_name"; + + echo $sql; + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = ''; + + $content .= ' + + + + + + + '; + $sr_no = 0; + $tot_taxable_amount = 0; + $tot_net_amount = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $tot_taxable_amount = $tot_taxable_amount + $row->taxable_amount; + $tot_net_amount = $tot_net_amount + $row->net_amount; + + $content .= ' + + + + + + + '; + } + + $content .= ' + + + + + + + '; + + $content .= '
#Company NameItem NamePurchase QtyPur. Tax. AmtPur. Net Amt
' . $sr_no . '' . $row->company_name . '' . $row->Item_name . '' . $row->qty . '' . $row->taxable_amount . '' . $row->net_amount . '
#Total ' . $tot_taxable_amount . '' . $tot_net_amount . '
'; + + //echo $content; + if ($output == 0) { + + $this->load->library('m_pdf'); + + $file_name = "Report-MedicalCompanyWisePurcase-" . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + $file_name = "Report-MedicalCompanyWisePurcase-" . date('Ymdhis') . ".pdf"; + + ExportExcel($content, $file_name); + } + } + + // Pending Invoice Report + + public function Report_2_OPD_Pending() + { + + $this->load->view('Medical/Report/Med_Report_2_Pending'); + } + + public function Report_2_Bal_pending_data($sale_date_range, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.inv_date >=date_add(sysdate(),interval -1 day)"; + } + + $Report_Heading = "Date (YYYY-MM-DD) From :" . $minRange . " To " . $maxRange . " / Data Filter : Pending Balance Invoice"; + + $sql = "Select m.id,m.inv_med_code, m.patient_id,m.inv_name,m.patient_code, + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + Sum(m.net_amount) as tnet_amount , + Sum(m.payment_received) as payment_received, + Sum(m.payment_balance) as payment_balance + FROM invoice_med_master m + where " . $sql_where . " + and (m.payment_balance >1 OR m.payment_balance <-1) + AND m.ipd_id=0 and m.case_id=0 + group by inv_date,m.id with ROLLUP"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + //echo $sql; + + $content = '

' . $Report_Heading . '

'; + $content .= ''; + + $content .= ' + + + + + + + + '; + $sr_no = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + if ($row->inv_date == '') { + $content .= ' + + + + + + '; + } elseif ($row->id == '') { + $content .= ' + + + + + + '; + } else { + + $content .= ' + + + + + + + + '; + } + } + + $content .= ' + + + + + + + + + + + +
#DateInvoice IDPatients NameNet Amt.Amt. Rec.Amt. Bal.
#Grand Total : ' . $row->tnet_amount . '' . $row->payment_received . '' . $row->payment_balance . '
#Total Date : ' . $row->inv_date_str . '' . $row->tnet_amount . '' . $row->payment_received . '' . $row->payment_balance . '
' . $sr_no . '' . $row->inv_date_str . '' . $row->inv_med_code . '' . $row->inv_name . '
' . $row->patient_code . '
' . $row->tnet_amount . '' . $row->payment_received . '' . $row->payment_balance . '
#DateInvoice IDPatients NameNet Amt.Amt. Rec.Amt. Bal.
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + + $file_name = 'Report-MedicalBill_Pending-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Med_Sale_day0001'); + } + + //echo $content; + + + } + + + + + // OPD Pending Balance Paid or OLD Payment Received + + public function Report_2_OPD_Pending_Paid() + { + + $this->load->view('Medical/Report/Med_Report_2_Pending_paid'); + } + + public function Report_2_Bal_pending_payment($sale_date_range, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and Date(h.payment_date)= '" . $minRange . "' and m.inv_date < '" . $minRange . "'"; + + $Report_Heading = "Date (YYYY-MM-DD) :" . $minRange . " / Data Filter : Payment of OLD OPD Invoice"; + + $sql = "Select m.id,m.inv_med_code, m.patient_id,m.inv_name,m.patient_code, m.inv_date, + Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + (m.net_amount) as tnet_amount , + (m.payment_received) as payment_received, + (m.payment_balance) as payment_balance, + if(h.credit_debit=0, h.amount,h.amount*-1) AS tran_amt + FROM (invoice_med_master m join payment_history_medical h on m.id=h.Medical_invoice_id ) + where " . $sql_where . " "; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + //echo $sql; + + $content = '

' . $Report_Heading . '

'; + $content .= ''; + + $content .= ' + + + + + + + + + '; + $sr_no = 0; + + $tot_payment = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + $content .= ' + + + + + + + + + '; + $tot_payment += $row->tran_amt; + } + + $content .= ' + + + + + + + + + + + + +
#DateInvoice IDPatients NameNet Amt.Amt. Rec.Amt. Bal.Payment Amt.
' . $sr_no . '' . $row->inv_date_str . '' . $row->inv_med_code . '' . $row->inv_name . '
' . $row->patient_code . '
' . $row->tnet_amount . '' . $row->payment_received . '' . $row->payment_balance . '' . $row->tran_amt . '
#Total' . $tot_payment . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name = 'Report-MedicalBill_Pending-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Med_Sale_day0001'); + } + + //echo $content; + + } + //Daily Cash Received List + + public function Report_2() + { + + $this->load->view('Medical/Report/Med_Report_2'); + } + + + public function Report_2_data($sale_date_range, $bill_type, $output = 0) + { + $sql_where = " 1=1 "; + + $minRange = $sale_date_range; + + $sql_where .= " and m.inv_date = '" . $minRange . "' "; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and date(m.inv_date) >=date(date_add(sysdate(),interval -2 day))"; + } + + + + $Filter_type = "ALL"; + + if ($bill_type == 1) { + $sql_where .= " and (m.ipd_id=0 and m.case_id=0 )"; + $Filter_type = "OPD CASH"; + } elseif ($bill_type == 2) { + $sql_where .= " and (m.ipd_id>0 and m.ipd_credit=0 )"; + $Filter_type = "IPD CASH"; + } elseif ($bill_type == 3) { + $sql_where .= " and (m.ipd_id=0 and m.case_id>1 )"; + $Filter_type = "OPD Org."; + } elseif ($bill_type == 4) { + $sql_where .= " and (m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=1 )"; + $Filter_type = "IPD Cr"; + } elseif ($bill_type == 5) { + $sql_where .= " and (m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=0 )"; + $Filter_type = "IPD Pkg Cr"; + } elseif ($bill_type == 6) { + $sql_where .= " and ((m.ipd_id>0 and m.ipd_credit=1) or (m.ipd_id=0 and m.case_id>1 ))"; + $Filter_type = "Hospital Cr"; + } + + $Report_Heading = "Date (YYYY-MM-DD) :" . $minRange . " / Data Filter :" . $Filter_type; + + $sql = "Select m.id,m.inv_med_code,m.ipd_code, m.patient_id,m.inv_name,m.patient_code, + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + Sum(i.twdisc_amount) as tnet_amount, + sum(if(m.ipd_id=0 and m.case_id=0,i.twdisc_amount,0)) as OPD_Cash_Bill_amount, + sum(if(m.ipd_id=0 and m.case_id>1,i.twdisc_amount,0)) as OPD_Org_Bill_amount, + + if(o1.short_name IS null, o2.short_name, o1.short_name) AS Ins_name, + sum(if(m.ipd_id>0 and m.ipd_credit=0,i.twdisc_amount,0)) as IPD_Cash_Bill_amount, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=1,i.twdisc_amount,0)) as IPD_Credit_Bill_amount, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=0,i.twdisc_amount,0)) as IPD_Package_Bill_amount + + FROM (((invoice_med_master m join inv_med_item i on m.id=i.inv_med_id) + left join patient_master p on m.patient_id=p.id) + left join (Select org.id,ins.short_name,org.ipd_id ,org.case_type + from organization_case_master org join hc_insurance ins + on org.insurance_id=ins.id) o1 ON m.ipd_id=o1.ipd_id AND o1.case_type=1 and m.ipd_id>0) + left join (Select org.id,ins.short_name,org.ipd_id ,org.case_type + from organization_case_master org join hc_insurance ins + on org.insurance_id=ins.id) o2 ON m.case_id=o2.id AND o2.case_type=0 and m.ipd_id=0 + where " . $sql_where . " group by inv_date,m.id with ROLLUP"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + //echo $sql; + + $content = '

' . $Report_Heading . '

'; + $content .= ''; + + $content .= ' + + + + + + + + + + + + + '; + $sr_no = 0; + $grand_date_tot_row = 0; + $grand_tot_row = 0; + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + if ($row->inv_date == '') { + $content .= ' + + + + + + + + + + + '; + } elseif ($row->id == '') { + $content .= ' + + + + + + + + + + + '; + $grand_date_tot_row += $grand_tot_row; + $grand_tot_row = 0; + } else { + $tot_row = $row->OPD_Org_Bill_amount + $row->IPD_Credit_Bill_amount + $row->IPD_Package_Bill_amount; + $grand_tot_row += $tot_row; + + $content .= ' + + + + + + + + + + + + + '; + } + } + + $content .= ' + + + + + + + + + + + + + + + + +
#DateInvoice IDPatients NameNet Amt.OPD CashIPD Cash AmountOrg.NameOPD Org.IPD Cr HospitalIPD Cr Pkg. HospitalTot. Cr Hospital
#Grand Total : ' . $row->tnet_amount . '' . $row->OPD_Cash_Bill_amount . '' . $row->IPD_Cash_Bill_amount . ' ' . $row->OPD_Org_Bill_amount . '' . $row->IPD_Credit_Bill_amount . '' . $row->IPD_Package_Bill_amount . '' . $grand_date_tot_row . '
#Total Date : ' . $row->inv_date_str . '' . $row->tnet_amount . '' . $row->OPD_Cash_Bill_amount . '' . $row->IPD_Cash_Bill_amount . ' ' . $row->OPD_Org_Bill_amount . '' . $row->IPD_Credit_Bill_amount . '' . $row->IPD_Package_Bill_amount . '' . $grand_tot_row . '
' . $sr_no . '' . $row->inv_date_str . '' . $row->inv_med_code . '' . $row->inv_name . '
' . $row->patient_code . '
' . $row->ipd_code . '
' . $row->tnet_amount . '' . $row->OPD_Cash_Bill_amount . '' . $row->IPD_Cash_Bill_amount . '' . $row->Ins_name . '' . $row->OPD_Org_Bill_amount . '' . $row->IPD_Credit_Bill_amount . '' . $row->IPD_Package_Bill_amount . '' . $tot_row . '
#DateInvoice IDPatients NameNet Amt.OPD CashIPD Cash AmountOrg.NameOPD Org.IPD Cr HospitalIPD Cr Pkg. HospitalTot. Cr Hospital
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Med_Sale_day0001'); + } + + //echo $content; + + + } + + public function Report_2_short_data($sale_date_range, $bill_type) + { + $sql_where = " m.net_amount is not null "; + + $minRange = $sale_date_range; + + $sql_where .= " and m.inv_date = '" . $minRange . "' "; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and date(m.inv_date) >=date(date_add(sysdate(),interval -2 day))"; + } + + + $Filter_type = "ALL"; + + if ($bill_type == 1) { + $sql_where .= " and (m.ipd_id=0 and m.case_id=0 )"; + $Filter_type = "OPD CASH"; + } elseif ($bill_type == 2) { + $sql_where .= " and (m.ipd_id>0 and m.ipd_credit=0 )"; + $Filter_type = "IPD CASH"; + } elseif ($bill_type == 3) { + $sql_where .= " and (m.ipd_id=0 and m.case_id>1 )"; + $Filter_type = "OPD Org."; + } elseif ($bill_type == 4) { + $sql_where .= " and (m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=1 )"; + $Filter_type = "IPD Cr"; + } elseif ($bill_type == 5) { + $sql_where .= " and (m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=0 )"; + $Filter_type = "IPD Pkg Cr"; + } elseif ($bill_type == 6) { + $sql_where .= " and ((m.ipd_id>0 and m.ipd_credit=1) or (m.ipd_id=0 and m.case_id>1 ))"; + $Filter_type = "Hospital Cr"; + } + + $Report_Heading = "Date (YYYY-MM-DD) :" . $minRange . " / Data Filter :" . $Filter_type; + + $sql = "select count(DISTINCT m.id) as No_invoice, + count( DISTINCT m.patient_id) as No_Patients, + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + Sum(m.net_amount) as tnet_amount, + sum(if(m.ipd_id=0 and m.case_id=0,m.net_amount,0)) as OPD_Cash_Bill_amount, + sum(if(m.ipd_id=0 and m.case_id>1,m.net_amount,0)) as OPD_Org_Bill_amount, + + sum(if(m.ipd_id>0 and m.ipd_credit=0,m.net_amount,0)) as IPD_Cash_Bill_amount, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=1,m.net_amount,0)) as IPD_Credit_Bill_amount, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=0,m.net_amount,0)) as IPD_Package_Bill_amount, + + sum(if(m.ipd_id=0 and m.case_id=0,1,0)) as OPD_Cash_Bill_invoice, + sum(if(m.ipd_id=0 and m.case_id>1,1,0)) as OPD_Org_Bill_invoice, + + sum(if(m.ipd_id>0 and m.ipd_credit=0,1,0)) as IPD_Cash_Bill_invoice, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=1,1,0)) as IPD_Credit_Bill_invoice, + sum(if(m.ipd_id>0 and m.ipd_credit=1 and m.ipd_credit_type=0,1,0)) as IPD_Package_Bill_invoice + + from invoice_med_master m + + where " . $sql_where . " group by m.inv_date "; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + //echo $sql; + + $content = '

' . $Report_Heading . '

'; + $content .= ''; + + $content .= ' + + + + + + + '; + + foreach ($med_inv_total as $row) { + $content .= ' + + + + + + + '; + + $content .= ' + + + + + + + '; + + $content .= ' + + + + + + + '; + + $content .= ' + + + + + + + '; + + $content .= ' + + + + + + + '; + + $total_Cash_Bill_amount = $row->OPD_Cash_Bill_amount + $row->IPD_Cash_Bill_amount; + $total_Credit_Bill_amount = $row->OPD_Org_Bill_amount + $row->IPD_Credit_Bill_amount + $row->IPD_Package_Bill_amount; + + $content .= ' + + + + + + '; + } + + $content .= ' +
Sr.No.DateNo. of InvoiceInvoice TypeCASH/DirectCredit to Hospital
1' . $row->inv_date_str . '' . $row->OPD_Cash_Bill_invoice . 'OPD CASH' . $row->OPD_Cash_Bill_amount . '
2' . $row->inv_date_str . '' . $row->IPD_Cash_Bill_invoice . 'IPD CASH' . $row->IPD_Cash_Bill_amount . '
3' . $row->inv_date_str . '' . $row->OPD_Org_Bill_invoice . 'OPD Org.' . $row->OPD_Org_Bill_amount . '
4' . $row->inv_date_str . '' . $row->IPD_Credit_Bill_invoice . 'IPD Credit' . $row->IPD_Credit_Bill_amount . '
5' . $row->inv_date_str . '' . $row->IPD_Package_Bill_invoice . 'IPD Credit Pkg.' . $row->IPD_Package_Bill_amount . '
Total' . $row->No_invoice . '' . $total_Cash_Bill_amount . '' . $total_Credit_Bill_amount . '
'; + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + //echo $content; + + + } + + //IPD Discharge Report + + public function ipd_discharge() + { + $this->load->view('Medical/Report/IPD_Discharge_Report'); + } + + + public function Report_6_data($sale_date_range, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " m.ipd_id>0 and p.ipd_status=1 "; + + $where .= " and p.discharge_date between '" . $minRange . "' and '" . $maxRange . "'"; + + + + $sql = "SELECT p.ipd_code,p.p_code,p.p_fname, DATE_FORMAT(p.register_date,'%d-%m-%Y') as ipd_admit_date_str, DATE_FORMAT(p.discharge_date,'%d-%m-%Y') as ipd_discharge_date_str, p.admit_type, + (if(m.ipd_credit=1 and m.ipd_credit_type=1,g.net_amount,0)) as IPD_Credit_Amount, + (if(m.ipd_credit=1 and m.ipd_credit_type=0,g.net_amount,0)) as IPD_Package_Amount, + (if(m.ipd_credit=0,g.net_amount,0)) as IPD_CASH_Amount, (g.net_amount-pay_his.Total_Paid_Amount) as cash_balance, + pay_his.Total_Paid_Amount as Paid_Amount + FROM ((invoice_med_master m join v_ipd_list p on m.ipd_id=p.id ) join inv_med_group g ON m.med_group_id=g.med_group_id) + LEFT JOIN (SELECT SUM(if(h.credit_debit=0,h.amount,h.amount*-1)) AS Total_Paid_Amount, h.ipd_id + FROM payment_history_medical h WHERE h.Customerof_type=2 GROUP BY h.ipd_id) AS pay_his ON p.id=pay_his.ipd_id + where " . $where . " group by m.ipd_id "; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ""; + + $content .= ' + + + + + + + + + + + + + + '; + + $Head_Content = ""; + foreach ($stock_list as $row) { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + } + + $content .= '
IPD CodePatient CodePatient NameAdmit dt.Discharge Dt.TPA NameCashPaid Amt.Cash BalanceCreditPackage
' . $row->ipd_code . '' . $row->p_code . '' . $row->p_fname . '' . $row->ipd_admit_date_str . '' . $row->ipd_discharge_date_str . '' . $row->admit_type . '' . $row->IPD_CASH_Amount . '' . $row->Paid_Amount . '' . Round($row->cash_balance,0) . '' . $row->IPD_Credit_Amount . '' . $row->IPD_Package_Amount . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical'); + } + } + + + //Daily Cash Received List + + public function Report_Payment_Recieved() + { + + $sql = "select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist'] = $query->result(); + + $sql = "select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist'] = $query->result(); + + $this->load->view('Medical/Report/Med_Payment_Recevie', $data); + } + + public function Report_Payment_Recieved_data($sale_date_range, $emp_name_id = 0, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = str_replace('T', ' ', $rangeArray[0]); + $maxRange = str_replace('T', ' ', $rangeArray[1]); + + if ($minRange == $maxRange) { + $sql_where .= " and Date(p.payment_date) between Date('" . $minRange . "') and Date('" . $maxRange . "')"; + } else { + $sql_where .= " and p.payment_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + $data_show = '

Date(YYYY-MM-DD h:m) between ' . $minRange . ' and ' . $maxRange . '

'; + + if ($emp_name_id <> 0) { + $emp_name_id = str_replace('S', ',', $emp_name_id); + + $sql_where .= " and p.update_by_id in (" . $emp_name_id . ")"; + } + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and p.payment_date >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "SELECT p.id, + if(p.Customerof_type=1,u.p_code,if(p.Customerof_type =3,m.inv_med_code,i.ipd_code)) AS UHID_IPD, + if(p.Customerof_type=1,u.p_fname,if(p.Customerof_type =3,m.inv_name,i.p_fname)) AS NAME_PERSON, + + if(p.Customerof_type IN (1,3) AND p.payment_mode=1 ,if(p.credit_debit=0,p.amount,p.amount*-1),0) AS OPD_Amt_CASH, + if(p.Customerof_type IN (1,3) AND p.payment_mode=2,if(p.credit_debit=0,p.amount,p.amount*-1),0) AS OPD_Amt_BANK, + + if(p.Customerof_type IN (2) AND p.payment_mode=1,if(p.credit_debit=0,p.amount,p.amount*-1),0) AS IPD_Amt_CASH, + if(p.Customerof_type IN (2) AND p.payment_mode=2,if(p.credit_debit=0,p.amount,p.amount*-1),0) AS IPD_Amt_BANK, + p.payment_date,p.credit_debit,p.update_by,p.update_by_id + FROM ((payment_history_medical p Left JOIN patient_master u ON p.Customerof_id=u.id AND p.Customerof_type=1) + Left JOIN + (SELECT ipd_master.id,ipd_master.ipd_code,patient_master.p_fname + from ipd_master JOIN patient_master ON ipd_master.p_id=patient_master.id ) i ON p.ipd_id=i.id AND p.Customerof_type=2) + LEFT JOIN invoice_med_master m ON p.Medical_invoice_id=m.id + where " . $sql_where . " order by p.id"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + + $content = ''; + + $content .= ''; + + $content .= ' + + + + + + + + + + '; + + $sr_no = 0; + $OPD_Amt_CASH = 0; + $OPD_Amt_BANK = 0; + $IPD_Amt_CASH = 0; + $IPD_Amt_BANK = 0; + $Total_Amt = 0; + + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + $OPD_Amt_CASH += $row->OPD_Amt_CASH; + $OPD_Amt_BANK += $row->OPD_Amt_BANK; + $IPD_Amt_CASH += $row->IPD_Amt_CASH; + $IPD_Amt_BANK += $row->IPD_Amt_BANK; + + $content .= ' + + + + + + + + + + '; + } + + $content .= ' + + + + + + + + + + '; + $content .= '
#Payment DateUHID/IPD/Inv.IDName of PersonOPD CashOPD BankIPD CashIPD BANKUpdate By
' . $row->id . '' . $row->payment_date . '' . $row->UHID_IPD . '' . $row->NAME_PERSON . '' . $row->OPD_Amt_CASH . '' . $row->OPD_Amt_BANK . '' . $row->IPD_Amt_CASH . '' . $row->IPD_Amt_BANK . '' . $row->update_by . '
# Total Amt.' . $OPD_Amt_CASH . '' . $OPD_Amt_BANK . '' . $IPD_Amt_CASH . '' . $IPD_Amt_BANK . '
'; + + $GTotal = $OPD_Amt_CASH + $OPD_Amt_BANK + $IPD_Amt_CASH + $IPD_Amt_BANK; + + $content .= 'Total Amount : ' . $GTotal; + + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Med_Sale_day0001'); + } + + //echo $content; + + } + + public function Report_3() + { + $this->load->view('Medical/Report/Med_Report_3'); + } + + public function Report_3_data($sale_date_range, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + //$sql_where .= " and m.net_amount>0 "; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and m.inv_date >=date_add(sysdate(),interval -1 day)"; + } + + $sql = "Select t.CGST_per,sum(t.qty) as t_qty, + sum(t.CGST) as TCGST, + t.SGST_per, + sum(t.SGST) as TSGST, + sum(t.CGST+t.SGST) as TGST, + sum(t.TaxableAmount) as TaxableAmount, + sum(t.twdisc_amount) as Amount + from invoice_med_master m join inv_med_item t + on m.id=t.inv_med_id + where " . $sql_where . " group by t.CGST_per with ROLLUP"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + //echo $sql; + + $content = ''; + + $content .= ' + + + + + + + + + + '; + + $sr_no = 0; + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + if ($row->CGST_per == '') { + $content .= ' + + + + + + + + + + '; + } else { + $content .= ' + + + + + + + + + + '; + } + } + + $content .= '
#CGST PerT. CGSTSGST PerT. SGSTTotal GSTTaxable AmountAmountItem Qty
#Grand Total : ' . $row->TCGST . '' . $row->TSGST . '' . $row->TGST . '' . $row->TaxableAmount . '' . $row->Amount . '' . $row->t_qty . '
' . $sr_no . '' . $row->CGST_per . '' . $row->TCGST . '' . $row->SGST_per . '' . $row->TSGST . '' . $row->TGST . '' . $row->TaxableAmount . '' . $row->Amount . '' . $row->t_qty . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Med_Sale_day0001'); + } + + //echo $content; + + } + + public function Report_3_purchase_data($sale_date_range, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $sql_where .= " and date(m.inv_date) >=date(date_add(sysdate(),interval -2 day))"; + } + + + $sql = "Select t.CGST_per,sum(t.qty) as t_qty, + sum(t.CGST) as TCGST, + t.SGST_per, + sum(t.SGST) as TSGST, + sum(t.CGST+t.SGST) as TGST, + sum(t.TaxableAmount) as TaxableAmount, + sum(t.twdisc_amount) as Amount + from invoice_med_master m join inv_med_item t + on m.id=t.inv_med_id + where " . $sql_where . " group by t.CGST_per with ROLLUP"; + + $query = $this->db->query($sql); + $med_inv_total = $query->result(); + //echo $sql; + + $content = ''; + + $content .= ' + + + + + + + + + + '; + + $sr_no = 0; + foreach ($med_inv_total as $row) { + $sr_no = $sr_no + 1; + + if ($row->CGST_per == '') { + $content .= ' + + + + + + + + + + '; + } else { + $content .= ' + + + + + + + + + + '; + } + } + + $content .= '
#CGST PerT. CGSTSGST PerT. SGSTTotal GSTTaxable AmountAmountItem Qty
#Grand Total : ' . $row->TCGST . '' . $row->TSGST . '' . $row->TGST . '' . $row->TaxableAmount . '' . $row->Amount . '' . $row->t_qty . '
' . $sr_no . '' . $row->CGST_per . '' . $row->TCGST . '' . $row->SGST_per . '' . $row->TSGST . '' . $row->TGST . '' . $row->TaxableAmount . '' . $row->Amount . '' . $row->t_qty . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Med_Sale_day0001'); + } + + //echo $content; + + } + + + public function Report_4() + { + $this->load->view('Medical/Report/Med_Report_4'); + } + + public function Report_4_data($sale_date_range, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " m.ipd_id>0 and p.ipd_status=1 "; + + $where .= " and p.discharge_date between '" . $minRange . "' and '" . $maxRange . "'"; + + + + $sql = "select m.id,m.ipd_id,m.inv_med_code,m.ipd_code, m.patient_id,m.inv_name,m.patient_code, + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str,p.ins_company_name, + + sum(if(m.ipd_credit=1 and m.ipd_credit_type=1,m.net_amount,0)) as IPD_Credit_Amount, + sum(if(m.ipd_credit=1 and m.ipd_credit_type=0,m.net_amount,0)) as IPD_Package_Amount, + sum(if(m.ipd_credit=0,m.net_amount,0)) as IPD_CASH_Amount, + + sum(m.net_amount) as IPD_Total_Amount + from invoice_med_master m join v_ipd_list p on m.ipd_id=p.id + where " . $where . " group by m.ipd_id,m.id with ROLLUP"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ' + + + + + + + + + + + + + + + '; + + $Head_Content = ""; + foreach ($stock_list as $row) { + if ($row->id == '') { + $content .= ''; + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + } else { + if ($Head_Content <> $row->ipd_code) { + $content .= ''; + + $content .= ''; + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + $Head_Content = $row->ipd_code; + } + + $content .= ''; + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + } + } + + $content .= '
IPD CodePatient CodePatient NameTPA Name
Inv.No.Inv.DateCashCreditPackageTotal
IPD Total' . $row->IPD_CASH_Amount . '' . $row->IPD_Credit_Amount . '' . $row->IPD_Package_Amount . '' . $row->IPD_Total_Amount . '
' . $row->ipd_code . '' . $row->patient_code . '' . $row->inv_name . '' . $row->ins_company_name . '
' . $row->inv_med_code . '' . $row->inv_date_str . '' . $row->IPD_CASH_Amount . '' . $row->IPD_Credit_Amount . '' . $row->IPD_Package_Amount . '' . $row->IPD_Total_Amount . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical'); + } + } + + //IPD Credit Bills + + public function Report_IPD_Credit_data($sale_date_range, $billtype = 0, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " m.ipd_id>0 and p.ipd_status=1 "; + + $where .= " and p.discharge_date between '" . $minRange . "' and '" . $maxRange . "'"; + + + + if ($billtype == 0) { + } elseif ($billtype == 1) { + $where .= " and m.ipd_credit=0 "; + } elseif ($billtype == 2) { + $where .= " and m.ipd_credit=1 and m.ipd_credit_type=1 "; + } elseif ($billtype == 3) { + $where .= " and m.ipd_credit=1 and m.ipd_credit_type=0 "; + } else { + $where .= " 1<>1"; + } + + $sql = "select m.id,m.ipd_id,m.inv_med_code,m.ipd_code, m.patient_id,m.inv_name,m.patient_code, + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str,p.ins_company_name, + if(m.ipd_credit=0,'CASH',if(m.ipd_credit_type=1,'Credit','Package')) bill_type, + sum(m.net_amount) as IPD_Total_Amount + from invoice_med_master m join v_ipd_list p on m.ipd_id=p.id + where " . $where . " group by m.ipd_id,m.id with ROLLUP"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + + $content = ' + + + + + + + + + + + + '; + + $Head_Content = ""; + + $stock_list_count = count($stock_list); + $i = 0; + foreach ($stock_list as $row) { + + if ($row->id == '') { + if ($stock_list_count == $i + 1) { + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + } else { + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + $content .= ''; + } + } else { + if ($Head_Content <> $row->ipd_code) { + $content .= ''; + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + $Head_Content = $row->ipd_code; + } + + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + $content .= ''; + } + + $i = $i + 1; + } + + $content .= '
IPD CodePatient CodePatient NameTPA Name
Inv.No.Inv.DateAmountType
Grand Total' . $row->IPD_Total_Amount . '
Total' . $row->IPD_Total_Amount . '
' . $row->ipd_code . '' . $row->patient_code . '' . $row->inv_name . '' . $row->ins_company_name . '
' . $row->inv_med_code . '' . $row->inv_date_str . '' . $row->IPD_Total_Amount . '' . $row->bill_type . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = true; + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical'); + } + } + + + + public function purchase_invoice_report() + { + $sql = "select * from med_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Report/Purchase_Invoice', $data); + } + + public function purchase_invoice_data($sale_date_range, $supplier_id, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and p.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + + if ($supplier_id > 0) { + $sql_where .= " and s.sid= '" . $supplier_id . "' "; + } + + $sql = "select p.id,p.Invoice_no,p.date_of_invoice,p.sid,s.name_supplier,s.short_name,s.gst_no, + s.state, + sum(if(item_return=0,t.net_amount,t.net_amount*-1)) as tamount,count(t.id) as no_item, + p.Taxable_Amt,(p.CGST_Amt+p.SGST_Amt) as gst, + + SUM(if(t.CGST_per=0,t.CGST,0)) AS CGST_per_0, + SUM(if(t.SGST_per=0,t.SGST,0)) AS SGST_per_0, + SUM(if(t.SGST_per=0,t.taxable_amount,0)) AS TotGST_per_0, + + SUM(if(t.CGST_per=2.5,t.CGST,0)) AS CGST_per_2_5, + SUM(if(t.SGST_per=2.5,t.SGST,0)) AS SGST_per_2_5, + SUM(if(t.SGST_per=2.5,t.taxable_amount,0)) AS TotGST_per_5, + + SUM(if(t.CGST_per=6,t.CGST,0)) AS CGST_per_6, + SUM(if(t.SGST_per=6,t.SGST,0)) AS SGST_per_6, + SUM(if(t.SGST_per=6,t.taxable_amount,0)) AS TotGST_per_12, + + SUM(if(t.CGST_per=9,t.CGST,0)) AS CGST_per_9, + SUM(if(t.SGST_per=9,t.SGST,0)) AS SGST_per_9, + SUM(if(t.SGST_per=9,t.taxable_amount,0)) AS TotGST_per_18, + + SUM(if(t.CGST_per=14,t.CGST,0)) AS CGST_per_14, + SUM(if(t.SGST_per=14,t.SGST,0)) AS SGST_per_14, + SUM(if(t.SGST_per=14,t.taxable_amount,0)) AS TotGST_per_28 + + from (purchase_invoice p join med_supplier s on p.sid=s.sid) + left join purchase_invoice_item t on p.id=t.purchase_id + where " . $sql_where . " and s.state='" . M_State . "' group by p.id order by s.state,p.id"; + + $query = $this->db->query($sql); + $pur_inv_total_local = $query->result(); + + $sql = "select p.id,p.Invoice_no,p.date_of_invoice,p.sid,s.name_supplier,s.short_name,s.gst_no, + s.state, + sum(if(item_return=0,t.net_amount,t.net_amount*-1)) as tamount,count(t.id) as no_item, + p.Taxable_Amt,(p.CGST_Amt+p.SGST_Amt) as gst, + + SUM(if(t.CGST_per=0,t.CGST,0)) AS CGST_per_0, + SUM(if(t.SGST_per=0,t.SGST,0)) AS SGST_per_0, + SUM(if(t.SGST_per=0,t.taxable_amount,0)) AS TotGST_per_0, + + SUM(if(t.CGST_per=2.5,t.CGST,0)) AS CGST_per_2_5, + SUM(if(t.SGST_per=2.5,t.SGST,0)) AS SGST_per_2_5, + SUM(if(t.SGST_per=2.5,t.taxable_amount,0)) AS TotGST_per_5, + + SUM(if(t.CGST_per=6,t.CGST,0)) AS CGST_per_6, + SUM(if(t.SGST_per=6,t.SGST,0)) AS SGST_per_6, + SUM(if(t.SGST_per=6,t.taxable_amount,0)) AS TotGST_per_12, + + SUM(if(t.CGST_per=9,t.CGST,0)) AS CGST_per_9, + SUM(if(t.SGST_per=9,t.SGST,0)) AS SGST_per_9, + SUM(if(t.SGST_per=9,t.taxable_amount,0)) AS TotGST_per_18, + + SUM(if(t.CGST_per=14,t.CGST,0)) AS CGST_per_14, + SUM(if(t.SGST_per=14,t.SGST,0)) AS SGST_per_14, + SUM(if(t.SGST_per=14,t.taxable_amount,0)) AS TotGST_per_28 + + from (purchase_invoice p join med_supplier s on p.sid=s.sid) + left join purchase_invoice_item t on p.id=t.purchase_id + where " . $sql_where . " and s.state<>'" . M_State . "' group by p.id order by s.state,p.id"; + + $query = $this->db->query($sql); + $pur_inv_total_IGST = $query->result(); + + + $xcontent_head = ''; + + $xcontent_head .= ' + + + + + + + + + + + + + + + + + + + + + + + + + '; + + $sr_no = 0; + $tamt = 0; + $tramt = 0; + $tgst = 0; + + $xcontent = ''; + + foreach ($pur_inv_total_local as $row) { + $sr_no = $sr_no + 1; + $tamt = $tamt + $row->tamount; + $tramt = $tramt + round($row->tamount); + $tgst = $tgst + round($row->gst); + + $xcontent .= ' + + + + + + + + + + + + + + + + + + + + + + + + + '; + } + + $xcontent_total = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice IDSupplierGSTStateDateAmountR AmountGSTTotGST_per_0CGST_per_0SGST_per_0TotGST_per_5CGST_per_2_5SGST_per_2_5TotGST_per_12CGST_per_6SGST_per_6TotGST_per_18CGST_per_9SGST_per_9TotGST_per_28CGST_per_14SGST_per_14
' . $sr_no . '' . $row->Invoice_no . '' . $row->name_supplier . '' . $row->gst_no . '' . $row->state . '' . $row->date_of_invoice . '' . $row->tamount . '' . round($row->tamount) . '' . round($row->gst) . '' . round($row->TotGST_per_0) . '' . round($row->CGST_per_0) . '' . round($row->SGST_per_0) . '' . round($row->TotGST_per_5) . '' . round($row->CGST_per_2_5) . '' . round($row->SGST_per_2_5) . '' . round($row->TotGST_per_12) . '' . round($row->CGST_per_6) . '' . round($row->SGST_per_6) . '' . round($row->TotGST_per_18) . '' . round($row->CGST_per_9) . '' . round($row->SGST_per_9) . '' . round($row->TotGST_per_28) . '' . round($row->CGST_per_14) . '' . round($row->SGST_per_14) . '
#Total' . $tamt . '' . $tramt . '' . $tgst . '
'; + + $SGST_Purchase_List = $xcontent_head . $xcontent . $xcontent_total; + + //IGST Record + + $content = ''; + + + $xcontent_head = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + $sr_no = 0; + $tamt = 0; + $tramt = 0; + $tgst = 0; + + $xcontent = ''; + + foreach ($pur_inv_total_IGST as $row) { + $sr_no = $sr_no + 1; + $tamt = $tamt + $row->tamount; + $tramt = $tramt + round($row->tamount); + $tgst = $tgst + round($row->gst); + + $xcontent .= ' + + + + + + + + + + + + + + + + + + + + + + + + + '; + } + + $xcontent_total = ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice IDSupplierGSTStateDateAmountR AmountGSTTotGST_per_0CGST_per_0IGST_per_0TotGST_per_5CGST_per_2_5IGST_per_2_5TotGST_per_12CGST_per_6IGST_per_6TotGST_per_18CGST_per_9IGST_per_9TotGST_per_28CGST_per_14IGST_per_14
' . $sr_no . '' . $row->Invoice_no . '' . $row->name_supplier . '' . $row->gst_no . '' . $row->state . '' . $row->date_of_invoice . '' . $row->tamount . '' . round($row->tamount) . '' . round($row->gst) . '' . round($row->TotGST_per_0) . '' . round($row->CGST_per_0) . '' . round($row->SGST_per_0) . '' . round($row->TotGST_per_5) . '' . round($row->CGST_per_2_5) . '' . round($row->SGST_per_2_5) . '' . round($row->TotGST_per_12) . '' . round($row->CGST_per_6) . '' . round($row->SGST_per_6) . '' . round($row->TotGST_per_18) . '' . round($row->CGST_per_9) . '' . round($row->SGST_per_9) . '' . round($row->TotGST_per_28) . '' . round($row->CGST_per_14) . '' . round($row->SGST_per_14) . '
#Total' . $tamt . '' . $tramt . '' . $tgst . '
'; + + $IGST_Purchase_List = $xcontent_head . $xcontent . $xcontent_total; + + $final_content = $SGST_Purchase_List; + + if (count($pur_inv_total_IGST) > 0) { + $final_content .= " + + + +
"; + $final_content .= $IGST_Purchase_List; + } + + //echo $content; + if ($output == 0) { + create_report_pdf_landscape($final_content, 'Med_Invoice'); + } else { + ExportExcel($final_content, 'Report_Medical'); + } + } + + public function purchase_invoice_data_pdf($sale_date_range, $supplier_id, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and p.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + + if ($supplier_id > 0) { + $sql_where .= " and s.sid= '" . $supplier_id . "' "; + } + + $sql = "select p.id,trim(s.name_supplier) AS name_supplier,p.sid,p.Invoice_no, + date_format(p.date_of_invoice,'%d-%m-%Y')AS str_date_of_invoice, + p.date_of_invoice, s.short_name,s.gst_no,s.state, + SUM(round(p.T_Net_Amount)) as tamount, + sum(p.Taxable_Amt) AS Taxable_Amt, + SUM(p.CGST_Amt+p.SGST_Amt) as gst + + from (purchase_invoice p join med_supplier s on p.sid=s.sid) + where " . $sql_where . " group by trim(s.name_supplier),p.date_of_invoice,p.id WITH rollup"; + + $query = $this->db->query($sql); + $pur_inv_total = $query->result(); + $content = ''; + + //$content=$sql; + + $content .= ''; + + $xcontent_head = ''; + + $head_content = ""; + $Total_Amount_Round = 0; + $Total_Grand_Amount_Round = 0; + + foreach ($pur_inv_total as $row) { + + if ($row->id != '' && $row->name_supplier != '' && $row->date_of_invoice != '') { + if ($head_content != $row->name_supplier) { + $sr_no = 0; + $Total_Amount_Round = 0; + $content .= ' + + '; + $content .= ' + + '; + $content .= ' + + + + + + + + '; + } + $sr_no = $sr_no + 1; + + $content .= ' + + + + + + + + '; + } elseif ($row->id == '' && $row->name_supplier == '' && $row->date_of_invoice == '') { + $content .= ' + + + + + + + + '; + } elseif ($row->id == '' && $row->date_of_invoice == '') { + $content .= ' + + + + + + + '; + } + + $head_content = $row->name_supplier; + } + + $content .= '
_
' . $row->name_supplier . ' / GST No. ' . $row->gst_no . ' / State : ' . $row->state . '
#Purchase. Inv. IDInv. DateTaxable AmtTax AmtInv. Amount
' . $sr_no . '' . $row->Invoice_no . '' . $row->str_date_of_invoice . '' . $row->Taxable_Amt . '' . $row->gst . '' . $row->tamount . '
#Grand Total' . $row->Taxable_Amt . '' . $row->gst . '' . $row->tamount . '
#Total of : ' . $row->name_supplier . '' . $row->Taxable_Amt . '' . $row->gst . '' . $row->tamount . '
'; + + //echo $content; + if ($output == 0) { + $this->load->library('m_pdf'); + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical'); + } + } + + public function purchase_invoice_data_gsr_rate_pdf($sale_date_range, $supplier_id, $output = 0) + { + $sql_where = " 1=1 "; + + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where .= " and m.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + + if ($supplier_id > 0) { + $sql_where .= " and s.sid= '" . $supplier_id . "' "; + } + + $sql = "SELECT m.id,m.supp_name,m.date_of_invoice,m.Invoice_no,s.name_supplier,s.sid, + s.short_name,s.gst_no,s.state, + t.CGST_per,sum(t.qty) as t_qty, + sum(t.CGST) as TCGST, + t.SGST_per, + sum(t.SGST) as TSGST, + sum(t.CGST+t.SGST) as TGST, + SUM(t.taxable_amount) as TaxableAmount, + SUM(t.net_amount) as Amount + FROM (purchase_invoice m join purchase_invoice_item t + ON m.id=t.purchase_id) + JOIN med_supplier s ON m.sid=s.sid + where " . $sql_where . " group BY s.sid,m.id,t.CGST_per with ROLLUP"; + + + $query = $this->db->query($sql); + $pur_inv_total = $query->result(); + $content = ''; + + //$content=$sql; + + $content .= ''; + + $xcontent_head = ''; + + $head_content = ""; + $Total_Amount_Round = 0; + $Total_Grand_Amount_Round = 0; + + foreach ($pur_inv_total as $row) { + + if ($row->id != '' && $row->name_supplier != '' && $row->date_of_invoice != '') { + if ($head_content != $row->name_supplier) { + $sr_no = 0; + $Total_Amount_Round = 0; + $content .= ' + + '; + $content .= ' + + '; + $content .= ' + + + + + + + + '; + } + $sr_no = $sr_no + 1; + + $content .= ' + + + + + + + + '; + } elseif ($row->id == '' && $row->name_supplier == '' && $row->date_of_invoice == '') { + $content .= ' + + + + + + + + '; + } elseif ($row->id == '' && $row->date_of_invoice == '') { + $content .= ' + + + + + + + '; + } + + $head_content = $row->name_supplier; + } + + $content .= '
_
' . $row->name_supplier . ' / GST No. ' . $row->gst_no . ' / State : ' . $row->state . '
#Purchase. Inv. IDInv. DateTaxable AmtTax AmtInv. Amount
' . $sr_no . '' . $row->Invoice_no . '' . $row->str_date_of_invoice . '' . $row->Taxable_Amt . '' . $row->gst . '' . $row->tamount . '
#Grand Total' . $row->Taxable_Amt . '' . $row->gst . '' . $row->tamount . '
#Total of : ' . $row->name_supplier . '' . $row->Taxable_Amt . '' . $row->gst . '' . $row->tamount . '
'; + + //echo $content; + if ($output == 0) { + $this->load->library('m_pdf'); + + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical'); + } + } + + //GST Report + + public function Report_5() + { + $this->load->view('Medical/Report/Med_Report_5'); + } + + public function Report_5_data($sale_date_range, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + $where .= " and m.net_amount>0 "; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $where .= " and date(m.inv_date) >=date(date_add(sysdate(),interval -2 day))"; + } + + + $sql = "select m.inv_med_code,Date_Format(m.inv_date,'%d-%m-%Y') as Inv_Date,m.inv_name, + get_med_type(m.ipd_id,m.ipd_credit,m.ipd_credit_type,m.case_id,m.case_credit) as Invoice_type, + m.ipd_code,p.p_code,o.case_id_code, + count(i.id) as No_of_Items, + sum(i.qty) as No_of_Qty, + + round(sum(i.twdisc_amount),0) as Total_Amount, + + round(sum(if(i.CGST_per=2.5,i.TaxableAmount,0)),0) as Sale_5_Amount, + sum(if(i.CGST_per=2.5,i.CGST,0)) as CGST_2_5, + sum(if(i.CGST_per=2.5,i.SGST,0)) as SGST_2_5, + + round(sum(if(i.CGST_per=5,i.TaxableAmount,0)),0) as Sale_10_Amount, + sum(if(i.CGST_per=5,i.CGST,0)) as CGST_5, + sum(if(i.CGST_per=5,i.SGST,0)) as SGST_5, + + round(sum(if(i.CGST_per=6,i.TaxableAmount,0)),0) as Sale_12_Amount, + sum(if(i.CGST_per=6,i.CGST,0)) as CGST_6, + sum(if(i.CGST_per=6,i.SGST,0)) as SGST_6, + + round(sum(if(i.CGST_per=9,i.TaxableAmount,0)),0) as Sale_18_Amount, + sum(if(i.CGST_per=9,i.CGST,0)) as CGST_9, + sum(if(i.CGST_per=9,i.SGST,0)) as SGST_9, + + round(sum(if(i.CGST_per=14,i.TaxableAmount,0)),0) as Sale_28_Amount, + sum(if(i.CGST_per=14,i.CGST,0)) as CGST_14, + sum(if(i.CGST_per=14,i.SGST,0)) as SGST_14, + + round(sum(if(i.CGST_per=0,i.TaxableAmount,0)),0) as Sale_0_Amount, + + sum(i.TaxableAmount) as Total_TaxableAmount + + from ((invoice_med_master m join inv_med_item i on m.id=i.inv_med_id) + left join patient_master p on m.patient_id=p.id) + left join organization_case_master o on m.case_id=o.id + where " . $where . " group by m.id "; + + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ' + + + + + + + + + + + + + + + + + + + + + + '; + + $Head_Content = ""; + foreach ($stock_list as $row) { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + } + + $content .= '
Invoice IDInv.Dateinv.NameInvoice TypeQtyTot.Amt.Tot.Tax.AmtTax.Amt.5%CGST 2.5%SCGT 2.5%Tax.Amt.12%CGST 6%SCGT 6%Tax.Amt.18%CGST 9%SCGT 9%Tax.Amt.28%CGST 14%SCGT 14%Tax.Amt.0%
' . $row->inv_med_code . '' . $row->Inv_Date . '' . $row->inv_name . '' . $row->Invoice_type . '' . $row->No_of_Qty . '' . $row->Total_Amount . '' . $row->Total_TaxableAmount . '' . $row->Sale_5_Amount . '' . $row->CGST_2_5 . '' . $row->SGST_2_5 . '' . $row->Sale_12_Amount . '' . $row->CGST_6 . '' . $row->SGST_6 . '' . $row->Sale_18_Amount . '' . $row->CGST_9 . '' . $row->SGST_9 . '' . $row->Sale_28_Amount . '' . $row->CGST_14 . '' . $row->SGST_14 . '' . $row->Sale_0_Amount . '
'; + + ExportExcel($content, 'Report_Medical_gst_invoice'); + } + + + + public function Report_5_HSNdata($sale_date_range, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + //$where .= " and m.net_amount>0 "; + + if (!$this->ion_auth->in_group('MedOLDRec')) { + $where .= " and date(m.inv_date) >=date(date_add(sysdate(),interval -2 day))"; + } + + + $sql = "select Left(i.HSNCODE," . M_HSNCODE_LEN . ") as HSNCODE, + count(i.id) as No_of_Items, + sum(i.qty) as No_of_Qty, + i.CGST_per , + sum(i.twdisc_amount) as Total_Amount, + + round(sum(if(i.CGST_per=2.5,i.TaxableAmount,0)),0) as Sale_5_Amount, + sum(if(i.CGST_per=2.5,i.CGST,0)) as CGST_2_5, + sum(if(i.CGST_per=2.5,i.SGST,0)) as SGST_2_5, + + round(sum(if(i.CGST_per=5,i.TaxableAmount,0)),0) as Sale_10_Amount, + sum(if(i.CGST_per=5,i.CGST,0)) as CGST_5, + sum(if(i.CGST_per=5,i.SGST,0)) as SGST_5, + + round(sum(if(i.CGST_per=6,i.TaxableAmount,0)),0) as Sale_12_Amount, + sum(if(i.CGST_per=6,i.CGST,0)) as CGST_6, + sum(if(i.CGST_per=6,i.SGST,0)) as SGST_6, + + round(sum(if(i.CGST_per=9,i.TaxableAmount,0)),0) as Sale_18_Amount, + sum(if(i.CGST_per=9,i.CGST,0)) as CGST_9, + sum(if(i.CGST_per=9,i.SGST,0)) as SGST_9, + + round(sum(if(i.CGST_per=14,i.TaxableAmount,0)),0) as Sale_28_Amount, + sum(if(i.CGST_per=14,i.CGST,0)) as CGST_14, + sum(if(i.CGST_per=14,i.SGST,0)) as SGST_14, + + round(sum(if(i.CGST_per=0,i.TaxableAmount,0)),0) as Sale_0_Amount, + + sum(i.TaxableAmount) as Total_TaxableAmount + + from ((invoice_med_master m join inv_med_item i on m.id=i.inv_med_id) + left join patient_master p on m.patient_id=p.id) + left join organization_case_master o on m.case_id=o.id + where " . $where . " group by Left(i.HSNCODE," . M_HSNCODE_LEN . ") ,i.CGST_per "; + + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ' + + + + + + + + + + + + + + + + + + + + '; + + $Head_Content = ""; + foreach ($stock_list as $row) { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + } + + $content .= '
HSN CodeItem QtyTax Per.Tot.Amt.Tot.Tax.AmtTax.Amt.5%CGST 2.5%SCGT 2.5%Tax.Amt.12%CGST 6%SCGT 6%Tax.Amt.18%CGST 9%SCGT 9%Tax.Amt.28%CGST 14%SCGT 14%Tax.Amt.0%
' . $row->HSNCODE . '' . $row->No_of_Qty . '' . $row->CGST_per . '' . $row->Total_Amount . '' . $row->Total_TaxableAmount . '' . $row->Sale_5_Amount . '' . $row->CGST_2_5 . '' . $row->SGST_2_5 . '' . $row->Sale_12_Amount . '' . $row->CGST_6 . '' . $row->SGST_6 . '' . $row->Sale_18_Amount . '' . $row->CGST_9 . '' . $row->SGST_9 . '' . $row->Sale_28_Amount . '' . $row->CGST_14 . '' . $row->SGST_14 . '' . $row->Sale_0_Amount . '
'; + + ExportExcel($content, 'Report_Medical_gst_hsn'); + } + + + //Bank Ledger Account + + public function Report_7() + { + $sql = "select * from med_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $sql = "select * from bank_account_master"; + $query = $this->db->query($sql); + $data['bank_account_data'] = $query->result(); + + $this->load->view('Medical/Report/Med_Report_7', $data); + } + + public function Report_7_data($sale_date_range, $supplier_id, $account_id, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " l.tran_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id "; + } + + if ($account_id > 0) { + $where .= " and b.bank_id=$account_id "; + } + + $sql = "SELECT b.bank_account_name,m.name_supplier, + l.tran_date,l.credit_debit,l.tran_desc, + Date_Format(l.tran_date,'%d-%m-%Y') as tran_date_str, + if(l.credit_debit=0,l.amount,0) AS cr_amt, + if(l.credit_debit=1,l.amount,0) AS dr_amt,l.id + FROM (bank_account_master b JOIN med_supplier_ledger l + ON l.bank_id=b.bank_id AND b.bank_id>1) + JOIN med_supplier m ON l.supplier_id=m.sid + where " . $where . " order by l.tran_date, l.id "; + + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ' + + + + + + + + '; + + $Head_Content = ""; + $total_cr_amt = 0; + $total_dr_amt = 0; + + foreach ($stock_list as $row) { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + $total_cr_amt += $row->cr_amt; + $total_dr_amt += $row->dr_amt; + } + + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + + $content .= '
Led. IDDateBank/CashLedgerCr.Amt.Dr.Amt
' . $row->id . '' . $row->tran_date_str . '' . $row->bank_account_name . '' . $row->name_supplier . '' . $row->cr_amt . '' . $row->dr_amt . '
Total' . $total_cr_amt . '' . $total_dr_amt . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + $file_name = 'Report_Medical_Ledger_' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical_Ledger_' . date('d-m-Y')); + } + } + + //Lost Medicine Data + + public function Lost_medicine() + { + $this->load->view('Medical/Stock/Lost_medicine'); + } + + public function Lost_medicine_data($sale_date_range, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " a.date_of_adjust between '" . $minRange . "' and '" . $maxRange . "'"; + + + $sql = "SELECT a.id,Date_Format(a.date_of_adjust,'%d-%m-%Y') as adjust_date_str,a.update_by, + i.item_code,i.Item_name,a.qty, + i.packing,i.purchase_price,i.purchase_unit_rate,(i.purchase_unit_rate*a.qty) AS cost, + (i.selling_unit_rate*a.qty) AS sale_value + FROM purchase_item_stock_adjust a JOIN purchase_invoice_item i ON a.item_id=i.id + where " . $where . " order by a.date_of_adjust, a.id "; + + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ' + + + + + + + + '; + + $Head_Content = ""; + $total_cost = 0; + $total_sale_value = 0; + + foreach ($stock_list as $row) { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + $total_cost += $row->cost; + $total_sale_value += $row->sale_value; + } + + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + + $content .= '
IDDateItem NameQtyCostSale Value
' . $row->id . '' . $row->adjust_date_str . '' . $row->Item_name . '' . $row->qty . '' . $row->cost . '' . $row->sale_value . '
Total' . $total_cost . '' . $total_sale_value . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + $file_name = 'Report_Medicine_Lost_' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medicine_Lost_' . date('d-m-Y')); + } + } + + + //Short Medicine Data + + public function Short_medicine() + { + $sql = "select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation'] = $query->result(); + + $this->load->view('Medical/Stock/Short_medicine', $data); + } + + public function Short_medicine_data($sale_date_range, $formulation, $output = 0) + { + $rangeArray = explode("S", $sale_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $formulation_list = str_replace("S", ",", $formulation); + + $content = ""; + + $where = " s.short_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if ($formulation_list <> '0') { + $where .= " and m.formulation_id in (" . $formulation_list . ")"; + } + + $sql = "SELECT s.id,s.item_Name,s.curQty,m.formulation, + date_format(s.short_date,'%d-%m-%Y') as str_short_date, + s.supplier_name + FROM med_short_list s join med_product_master m on s.item_code=m.id + where " . $where . " order by short_date desc "; + + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //$content.=$sql; + + $content .= ' + + + + + + + + '; + + foreach ($stock_list as $row) { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + + $content .= ''; + } + + $content .= '
IDDateItem NameFormulationQtySupplier
' . $row->id . '' . $row->str_short_date . '' . $row->item_Name . '' . $row->formulation . '' . Round($row->curQty) . '' . $row->supplier_name . '
'; + + if ($output == 0) { + //load mPDF library + $this->load->library('m_pdf'); + + $file_name = 'Report_Medicine_Short_' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medicine_Lost_' . date('d-m-Y')); + } + } + + public function Report_gst_1() + { + $this->load->view('Medical/Report/Report_gst_1'); + } +} diff --git a/old_code_ci3/controllers/Medical_app.php b/old_code_ci3/controllers/Medical_app.php new file mode 100644 index 0000000..f264b73 --- /dev/null +++ b/old_code_ci3/controllers/Medical_app.php @@ -0,0 +1,453 @@ +load->database(); + //$this->load->helper(array('cookie','url','language')); + + // Load form helper library + //$this->load->helper('form'); + + // Load form validation library + //$this->load->library('form_validation'); + + // Load session library + //$this->load->library('session'); + + $this->load->helper('security'); + + } + + public function index() + { + $this->load->view('Medical_app/index'); + } + + public function load_dash() + { + $session_data = $this->session->userdata(); + print_r($session_data); + if($session_data['u_id']=='') + { + redirect('Medical_app/select_user_login'); + }else{ + $this->load->view('Medical_app/dash_main'); + } + } + + public function select_user_login() + { + $sql="select * + from users + where active=1 and medical_app=1"; + $query = $this->db->query($sql); + + $data['user_data']= $query->result(); + + $this->load->view('Medical_app/select_doctor',$data); + } + + public function login($user_id=0) + { + // Retrieve session data + $session_set_value = $this->session->userdata(); + + $data['user_id'] = $user_id; + + $sql="select * + from users + where active=1 and id=$user_id and medical_app=1 "; + $query = $this->db->query($sql); + $data['user_data_profile']= $query->result(); + + // Check for remember_me data in retrieved session data + if (isset($session_set_value['remember_me']) && $session_set_value['remember_me'] == "1") { + //$this->load->view('admin_page'); + $this->load->view('Mobile_app/dash_main',$data); + } else { + + // Check for validation + $this->form_validation->set_rules('password', 'Pin Number', 'trim|required|xss_clean'); + + if ($this->form_validation->run() == FALSE) { + //$this->load->view('login_form'); + $this->load->view('Medical_app/login',$data); + } else { + $username = $user_id; + $password = $this->input->post('password'); + + $sql = "SELECT * + FROM users + WHERE id=$username and login_pin='$password' and medical_app=1"; + + $query = $this->db->query($sql); + $data_login= $query->result(); + + if (count($data_login)>0) { + $this->session->set_userdata('remember_me', TRUE); + + $session_data = array( + 'p_fname'=> $data_login[0]->first_name, + 'p_mname'=> $data_login[0]->last_name, + 'u_id' => $data_login[0]->id, + 'username' => $username, + 'password' => $password + ); + + $this->session->set_userdata($session_data); + + $data['user'] = 1; + $this->load->view('Medical_app/dash_main',$data); + + } else { + $data['error_message'] = 'Invalid Pin'; + + $this->load->view('Medical_app/login', $data); + } + } + } + } + + public function logout() + { + // Destroy session data + $this->session->sess_destroy(); + $data['message_display'] = 'Successfully Logout'; + redirect('Mobile_app/select_user_login'); + } + + + //Customer Search + function patient_index_all() + { + $data['_view'] = ''; + + $this->load->view('Mobile_app/patient_page',$data); + } + + function patient_index($day=0,$doc_id=0) + { + if($doc_id==0) + { + $where=""; + }else{ + $where=" and o.doc_id = ".$doc_id; + } + + if($day>=0){ + $where_date=" and date(o.opd_book_date) = DATE_ADD(CURDATE(),INTERVAL -".$day." DAY)"; + } + + $sql = "SELECT p.*,Date_Format(o.last_opdvisit_date,'%d-%m-%Y %H:%i') AS last_date_visit, + o.*, + if(date(o.opd_book_date)=curdate(),1,0) as opd_today + FROM (patient_master_exten p + JOIN opd_master o ON p.id=o.p_id) + WHERE 1=1 $where_date $where + Group by p.id + order by o.opd_id desc"; + + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $data['doc_id']=$doc_id; + $data['day']=$day; + + $data['sql']= $sql; + + $data['_view'] = 'Mobile_app/patient_search_v'; + + $this->load->view('Mobile_app/patient_page',$data); + } + + function patient_search() + { + $doc_id=$this->input->post('doc_id'); + $day=$this->input->post('day'); + $sdata=$this->input->post('data_search'); + + $where="1=1 "; + + if($doc_id==0) + { + $where.=""; + }else{ + $where.=" and o.doc_id = ".$doc_id; + } + + if($day>=0){ + $where_date=" and date(o.opd_book_date) = DATE_ADD(CURDATE(),INTERVAL -".$day." DAY)"; + }else{ + $where_date=""; + } + + $sdata = preg_replace('/[^A-Za-z0-9 _\-]/', '', trim($sdata)); + + if(is_numeric($sdata)) + { + $where.=" and (mphone1 = '".$sdata."' or udai='".$sdata."' or p_code like '%".$sdata."')" ; + }elseif (filter_var($sdata, FILTER_VALIDATE_EMAIL)) { + $where.=" email1 = '".$sdata."'" ; + }else{ + $where.=" and (p_fname like '%".$sdata."%' or + SUBSTRING_INDEX(p_fname,' ',1) sounds like '".$sdata."')"; + } + + $sql = "SELECT p.*,Date_Format(o.last_opdvisit_date,'%d-%m-%Y %H:%i') AS last_date_visit, + o.*, + if(date(o.opd_book_date)=curdate(),1,0) as opd_today + FROM (patient_master_exten p + JOIN opd_master o ON p.id=o.p_id) + WHERE ".$where." ".$where_date." + order by o.opd_id desc "; + + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $data['sql']= $sql; + + $this->load->view('Mobile_app/patient_search_v',$data); + + + + } + + function patient_index_opd() + { + if (isset($_POST['search'])){ + + $doc_id=$this->input->post('doc_id'); + $day=$this->input->post('day'); + $sdata=$this->input->post('search'); + + if($doc_id==0) + { + $where="1=1 "; + }else{ + $where=" o.doc_id = ".$doc_id; + } + + if($day>=0){ + $where_date=" and date(o.opd_book_date) = DATE_ADD(CURDATE(),INTERVAL -".$day." DAY)"; + }else{ + $where_date=" and date(o.opd_book_date) > DATE_ADD(CURDATE(),INTERVAL -180 DAY)"; + } + + $sdata = preg_replace('/[^A-Za-z0-9 _\-]/', '', trim($sdata)); + + if(is_numeric($sdata)) + { + $where.=" and (mphone1 = '".$sdata."' or udai='".$sdata."' or p_code like '%".$sdata."')" ; + }elseif (filter_var($sdata, FILTER_VALIDATE_EMAIL)) { + $where.=" and email1 = '".$sdata."'" ; + }else{ + $where.=" and (p_fname like '%".$sdata."%' or + SUBSTRING_INDEX(p_fname,' ',1) sounds like '".$sdata."')"; + } + + $sql = "SELECT p.*,Date_Format(p.last_visit,'%d-%m-%Y %H:%i') AS last_date_visit, + o.doc_name, + if(date(o.opd_book_date)=curdate(),1,0) as opd_today + FROM (patient_master_exten p + JOIN opd_master o ON p.id=o.p_id) + WHERE ".$where." ".$where_date." Group by p.id + order by o.opd_id desc "; + + $query = $this->db->query($sql); + $data['data']= $query->result(); + + //$data['sql']= $sql; + + $content=$this->load->view('Medical_app/ipd_panel_sub',$data,TRUE); + + echo $content; + echo $sql; + + } + } + + + function person_record($pno) + { + $sql="select * from patient_master_exten where id=".$pno; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date + from opd_master where p_id=".$pno; + $query = $this->db->query($sql); + $data['opd_List']= $query->result(); + + $sql="select m.id,m.invoice_code,Date_Format(m.inv_date,'%d-%m-%y') as str_inv_date,m.inv_name, + if(count(t.id)>0,group_concat(t.item_name SEPARATOR ' / '),'No-Item') as Item_List, m.net_amount,m.invoice_status + from invoice_master m left join invoice_item t on m.id=t.inv_master_id + where attach_type=0 and attach_id=".$pno." group by m.id order by m.id desc"; + $query = $this->db->query($sql); + $data['invoice_list']= $query->result(); + + $sql="select i.*,m.ins_company_name,m.opd_allowed,m.charge_cash + from hc_insurance_card i join hc_insurance m on i.insurance_id=m.id + where m.active=1 and i.p_id=".$pno; + $query = $this->db->query($sql); + $data['data_insurance_card']= $query->result(); + + $sql="select *,Date_Format(date_registration,'%d-%m-%Y') as str_date_registration from organization_case_master where status=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from file_upload_data where id=".$data['data'][0]->profile_file_id; + $query = $this->db->query($sql); + $file_data= $query->result(); + + $profile_file_path="/assets/images/no_image.jpg"; + + if(count($file_data)>0) + { + $pos=strpos($file_data[0]->full_path,'/uploads/',1) ; + $profile_file_path=substr($file_data[0]->full_path,$pos); + } + + $data['profile_file_path']=$profile_file_path; + + $sql="select * from file_upload_data where pid=".$pno." order by id desc"; + $query = $this->db->query($sql); + $data['opd_file_list']= $query->result(); + + $this->load->view('Mobile_app/patient_opd_profile',$data); + + } + + + public function show_profile_opd($p_id) + { + $data['p_id']=$p_id; + + $sql="select * from patient_master_exten where id=".$p_id; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select o.* from opd_master o where o.p_id=$p_id order by o.opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select o.* from opd_master o where o.p_id=$p_id and date(o.apointment_date)=curdate()"; + $query = $this->db->query($sql); + $data['opd_master_current']= $query->result(); + + $this->load->view('Mobile_app/person_file_show',$data); + } + + public function take_opd_picture($opd_id,$pno) + { + $data['opd_id']=$opd_id; + $data['pno']=$pno; + + $sql="select * from patient_master_exten where id=".$pno; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select o.* from opd_master o where o.opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + + $this->load->view('Mobile_app/opd_scan',$data); + } + + //IPD Panel + + public function ipd_panel() + { + $sql="SELECT i.*,p.p_fname,p.str_age,p.xgender, + date_format(i.register_date,'%d-%m-%Y') AS admit_dt, + DATE_FORMAT(i.discharge_date,'%d-%m-%Y') AS discharge_dt, + m.gross_amount,m.discount_group,m.discount_group_2,m.net_amount,m.payment_received, + if(m.med_type>1,'TPA','CASH') AS pay_type,m.payment_balance + FROM (inv_med_group m JOIN ipd_master i ON m.ipd_id=i.id) + JOIN patient_master_exten p ON i.p_id=p.id + WHERE i.ipd_status=0 AND m.net_amount>0" ; + + $query = $this->db->query($sql); + $data['ipd_data']= $query->result(); + + $this->load->view('Medical_app/ipd_panel',$data); + } + + public function ipd_panel_search() + { + $this->load->view('Medical_app/ipd_panel_search'); + } + + public function ipd_panel_search_data($search_text='',$pay_type=1) + { + $sdata=$this->input->post('data_search'); + + $where="1=1 "; + + if(is_numeric($sdata)) + { + $where.=" and (p.mphone1 = '".$sdata."' or p.udai='".$sdata."' or p.p_code like '%".$sdata."' or i.ipd_code like '%".$sdata."')" ; + }elseif (filter_var($sdata, FILTER_VALIDATE_EMAIL)) { + $where.=" and p.email1 = '".$sdata."'" ; + }else{ + $where.=" and (p.p_fname like '".$sdata."%' or + SUBSTRING_INDEX(p_fname,' ',1) sounds like '".$sdata."')"; + } + + $sql="SELECT i.*,p.p_fname,p.str_age,p.xgender, + date_format(i.register_date,'%d-%m-%Y') AS admit_dt, + DATE_FORMAT(i.discharge_date,'%d-%m-%Y') AS discharge_dt, + m.gross_amount,m.discount_group,m.discount_group_2,m.net_amount,m.payment_received, + if(m.med_type>1,'TPA','CASH') AS pay_type,m.payment_balance + FROM (inv_med_group m JOIN ipd_master i ON m.ipd_id=i.id) + JOIN patient_master_exten p ON i.p_id=p.id + WHERE $where AND m.net_amount>0" ; + + $query = $this->db->query($sql); + $data['ipd_data']= $query->result(); + + $content=$this->load->view('Medical_app/ipd_panel_sub',$data,TRUE); + + //echo $sql; + echo $content; + } + + public function open_ipd_bill($ipd_id) + { + $this->db->query("CALL p_revoke_bill(".$ipd_id.")"); + echo 'Done : Bill Opened'; + } + + public function get_ipd_bill_purchase($ipd_id) + { + $sql="select m.ipd_code,m.inv_name,sum(i.twdisc_amount) as Bill_Amount, + sum(Round(COALESCE(p.net_amount/p.total_unit,i.price2),2)*i.qty) as purchase_amount, + SUM(i.disc_whole) as Dis_Amount + from ((invoice_med_master m join inv_med_item i on m.id=i.inv_med_id) + left join purchase_invoice_item p on p.id=i.store_stock_id) + join ipd_master ipd on m.ipd_id=ipd.id + WHERE ipd.id=$ipd_id group by m.ipd_id "; + + $query = $this->db->query($sql); + $ipd_data= $query->result(); + + if(count($ipd_data)>0){ + $content="IPD : ".$ipd_data[0]->ipd_code."
". + "Name : ".$ipd_data[0]->inv_name."
". + "Bill Amount : ".$ipd_data[0]->Bill_Amount."
". + "Discount : ".$ipd_data[0]->Dis_Amount."
". + "Purchase : ".$ipd_data[0]->purchase_amount.""; + + }else{ + $content="Not Found"; + } + + echo $content; + + } + +} + diff --git a/old_code_ci3/controllers/Medical_backpanel.php b/old_code_ci3/controllers/Medical_backpanel.php new file mode 100644 index 0000000..d5f854a --- /dev/null +++ b/old_code_ci3/controllers/Medical_backpanel.php @@ -0,0 +1,2168 @@ +load->view('Medical/Med_back_Panel'); + } + + public function Med_old_invoice() + { + $this->load->view('Medical/Invoice_med_list'); + } + + public function Stock() + { + $sql = "select * from med_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Stock/stock_search', $data); + } + + public function store_stock() + { + $sql = "select * from med_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $sql = "select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation'] = $query->result(); + + $this->load->view('Medical/Store/store_stock_search', $data); + } + + public function stock_details() + { + $sql = "select * from med_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Store/stock_store_statement', $data); + } + + public function store_Stock_result() + { + $item_name = trim($this->input->post('txtsearch')); + $chk_reorder = $this->input->post('chk_reorder'); + + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)<=p.re_order_qty"; + } + + $where = " (s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)>=0 "; + + if ($item_name <> '') { + $where .= " and (p.item_name like '%" . $item_name . "%' or p.genericname like '%" . $item_name . "%' )"; + } + + $schedule_id = $this->input->post('schedule_id'); + + if ($schedule_id == '') { + } else { + $where .= " and (1<>1 "; + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or p.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or p.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or p.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or p.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or p.narcotic=1 "; + } + + if ($row == 6) { + $where .= " or p.high_risk=1 "; + } + } + $where .= ")"; + } + + $where .= " and m.date_of_invoice>date_add(curdate(),interval -24 month) "; + + $sql = "SELECT p.id, p.item_name,p.genericname, + IFNULL(s.item_code,0) AS item_found, + ifnull(s.packing,p.packing) as packing, + SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit) as C_Unit_Stock_Qty, + Concat(TRUNCATE(SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit)/s.packing,0), + ':', + MOD(SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit),s.packing)) as C_Pak_Qty, + sum(s.total_unit) as P_Unit_Qty, + sum(s.total_unit)/s.packing as Pak_qty, + sum(s.total_sale_unit) as sale_unit, + sum(s.total_sale_unit)/s.packing as C_Pak_Sale_Qty, + p.re_order_qty, + s.total_lost_unit + FROM (med_product_master p + JOIN purchase_invoice_item s ON p.id=s.item_code AND s.remove_item=0 AND s.item_return=0) + JOIN purchase_invoice m ON s.purchase_id=m.id and p.is_continue=1 + WHERE " . $where . " group by p.id,s.packing " . $HAVING . " order by p.Item_name "; + $query = $this->db->query($sql); + $data['stock_list'] = $query->result(); + + + $this->load->view('Medical/Store/Stock_search_result', $data); + } + + public function store_Stock_result_datewise() + { + $item_name = trim($this->input->post('txtsearch')); + $chk_reorder = $this->input->post('chk_reorder'); + + $supplier_id = $this->input->post('input_supplier'); + $opd_date_range = $this->input->post('opd_date_range'); + + $rangeArray = explode("S", $opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)<=p.re_order_qty"; + } + + $where = " 1=1 "; + + if ($item_name <> '') { + $where .= " and p.item_name like '%" . $item_name . "%' "; + } + + if ($opd_date_range <> '') { + $where .= " and s.stock_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + $where .= " and m.date_of_invoice>date_add(curdate(),interval -24 month) "; + + $sql = "SELECT p.id, p.item_name, IFNULL(s.item_code,0) AS item_found, + ifnull(s.packing,p.packing) as packing, + SUM(s.tqty) AS total_pak_qty, + SUM(s.net_amount) AS purchase_cost, + SUM(s.total_unit) AS total_unit, + SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit) as C_Unit_Stock_Qty, + SUM((s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit))/s.packing as C_Pak_Qty, + sum(s.total_unit) as P_Unit_Qty, sum(s.total_unit)/s.packing as Pak_qty, + sum(s.total_sale_unit) as sale_unit, sum(s.total_sale_unit)/s.packing as C_Pak_Sale_Qty, + p.re_order_qty, s.total_lost_unit + FROM (med_product_master p JOIN purchase_invoice_item s ON p.id=s.item_code and s.item_return=0) + JOIN purchase_invoice m ON s.purchase_id=m.id + WHERE " . $where . " group by p.id,s.packing " . $HAVING . " order by p.Item_name"; + $query = $this->db->query($sql); + $data['stock_list'] = $query->result(); + + $data['date_range'] = $opd_date_range; + $data['supplier_id'] = $supplier_id; + + $this->load->view('Medical/Store/stock_store_statement_data', $data); + } + + public function store_Stock_result_datewise_excel($opd_date_range, $item_name='-', $supplier_id = '') + { + + $rangeArray = explode("S", $opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + + $where = " 1=1 "; + + if ($item_name <> '') { + $where .= " and p.item_name like '%" . $item_name . "%' "; + } + + if ($opd_date_range <> '') { + $where .= " and s.stock_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + $where .= " and m.date_of_invoice>date_add(curdate(),interval -24 month) "; + + $sql = "SELECT p.*, IFNULL(s.item_code,0) AS item_found, + ifnull(s.packing,p.packing) as packing, + SUM(s.tqty) AS total_pak_qty, + SUM(s.net_amount) AS purchase_cost, + SUM(s.total_unit) AS total_unit, + SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit) as C_Unit_Stock_Qty, + SUM((s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit))/s.packing as C_Pak_Qty, + sum(s.total_unit) as P_Unit_Qty, sum(s.total_unit)/s.packing as Pak_qty, + sum(s.total_sale_unit) as sale_unit, sum(s.total_sale_unit)/s.packing as C_Pak_Sale_Qty, + s.total_lost_unit,s.expiry_date, + SUM(TRUNCATE((s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit),0)*s.purchase_unit_rate) AS Stock_Cost, + s.purchase_unit_rate ,s.mrp,s.batch_no,s.CGST_per + FROM (med_product_master p JOIN purchase_invoice_item s ON p.id=s.item_code and s.item_return=0) + JOIN purchase_invoice m ON s.purchase_id=m.id + WHERE " . $where . " group by p.id,s.packing,s.batch_no order by p.Item_name"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + $content = ""; + $content .= ' + + + + + + + + + + + + + + + + + + '; + + $total_stock_value = 0; + + foreach ($stock_list as $row) { + + /* if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="color:rgb(243, 7, 7);"'; + } else { + $tr_color = ''; + } */ + + $tr_color = ''; + + $content .= ' + + + + + + + + + + + + + + '; + $total_stock_value += $row->Stock_Cost; + } + + $content .= ' + + + '; + + $content .= '
Item NameGeneric NameMRPBatchExpiryCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyPackage/Re-Order QtyPurchase Unit RateGSTStock Cost
' . $row->item_name . '' . $row->genericname . '' . $row->mrp . '' . $row->batch_no . '' . $row->expiry_date . '' . $row->C_Pak_Qty . '' . $row->C_Unit_Stock_Qty . '' . $row->C_Pak_Sale_Qty . '' . $row->sale_unit . '' . $row->packing . '' . $row->purchase_unit_rate . '' . $row->CGST_per*2 . '' . $row->Stock_Cost . '
Total Stock Cost' . $total_stock_value . '
'; + + //echo $content; + ExportExcel($content, 'Report_Medical_store_stock'); + } + + public function Stock_result_excel($chk_reorder, $item_name, $schedule_id) + { + $HAVING = ""; + $where = " 1=1 "; + + if ($chk_reorder == "on") { + $HAVING = " HAVING (SUM(TRUNCATE((p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit)/p.packing,0)))<=m.re_order_qty"; + }else{ + $where .=" and (p.total_unit-p.total_lost_unit-p.total_sale_unit-p.total_return_unit)>0 "; + } + + + + if (strlen(urldecode($item_name))>2) { + $where .= " and m.item_name like '%" . urldecode($item_name) . "%' "; + } + + if ($schedule_id <>0 ) { + + $schedule_id = explode("S", $schedule_id); + if (count($schedule_id) > 0) { + $where .= " ( "; + } + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or m.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or m.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or m.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or m.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or m.narcotic=1 "; + } + } + if (count($schedule_id) > 0) { + $where .= " ) "; + } + } + + + + $where .= " and i.date_of_invoice>date_add(curdate(),interval -24 month) "; + + $sql = "SELECT m.item_name, m.id,m.genericname, + SUM(p.tqty) AS Pak_qty, + SUM(p.total_unit) AS P_Unit_Qty, + m.packing, + SUM(TRUNCATE((p.total_unit-p.total_sale_unit)/p.packing,0)) AS C_Pak_Qty, + SUM(p.total_sale_unit) AS sale_unit, + SUM(TRUNCATE((p.total_sale_unit)/p.packing,0)) AS C_Pak_Sale_Qty, + m.re_order_qty, + SUM(p.total_unit-p.total_sale_unit) AS C_Unit_Stock_Qty, + SUM(TRUNCATE((p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit),0)*p.purchase_unit_rate) AS Stock_Cost, + p.purchase_unit_rate + FROM (med_product_master m JOIN purchase_invoice_item p + ON m.id=p.item_code and m.is_continue=1 and p.item_return=0 AND p.remove_item=0) + JOIN purchase_invoice i ON p.purchase_id=i.id + WHERE " . $where . " group by m.id,p.purchase_unit_rate,p.packing " . $HAVING . " order by m.Item_name"; + + //echo $sql; + + $query = $this->db->query($sql); + $stock_list = $query->result(); + + $content = ""; + //$content=$sql; + + $content .= ' + + + + + + + + + + + + + + '; + + $total_stock_value = 0; + + foreach ($stock_list as $row) { + + if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="color:rgb(243, 7, 7);"'; + } else { + $tr_color = ''; + } + + $content .= ' + + + + + + + + + + '; + $total_stock_value += $row->Stock_Cost; + } + + $content .= ' + + + '; + + $content .= '
Item NameGeneric NameCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyPackage/Re-Order QtyPurchase Unit RateStock Cost
' . $row->item_name . '' . $row->genericname . '' . $row->C_Pak_Qty . '' . $row->C_Unit_Stock_Qty . '' . $row->C_Pak_Sale_Qty . '' . $row->sale_unit . '' . $row->packing . '' . $row->purchase_unit_rate . '' . $row->Stock_Cost . '
Total Stock Cost' . $total_stock_value . '
'; + + //echo $content; + ExportExcel($content, 'Report_Medical_store_stock'); + } + + public function Stock_result_excel_2($supplier_id, $opd_date_range, $item_name, $chk_reorder, $schedule_id = '') + { + + $HAVING = ""; + $where = " 1=1 "; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)<=p.re_order_qty"; + }else{ + $where .=" and (s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)>0 "; + } + + + + if (($item_name <> '-') || strlen(trim($item_name)) > 0) { + $where .= " and p.item_name like '%" . $item_name . "%' "; + } + + if (!($opd_date_range == '' || $opd_date_range <> '0')) { + $rangeArray = explode("S", $opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and s.stock_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + if ($schedule_id == '') { + } else { + + $where .= " and (1<>1 "; + $schedule_id = explode("S", $schedule_id); + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or p.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or p.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or p.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or p.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or p.narcotic=1 "; + } + } + $where .= ")"; + } + + + + $sql = "SELECT p.item_name, p.id,p.genericname, + SUM(s.tqty) AS Pak_qty, + SUM(s.total_unit) AS P_Unit_Qty, + s.packing, + SUM(TRUNCATE((s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)/s.packing,0)) AS C_Pak_Qty, + SUM(s.total_sale_unit) AS sale_unit, + SUM(TRUNCATE((s.total_sale_unit)/s.packing,0)) AS C_Pak_Sale_Qty, + p.re_order_qty, + SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit) AS C_Unit_Stock_Qty, + SUM(TRUNCATE((s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit),0)*s.purchase_unit_rate) AS Stock_Cost + FROM (med_product_master p JOIN purchase_invoice_item s ON p.id=s.item_code and s.item_return=0) + JOIN purchase_invoice m ON s.purchase_id=m.id + WHERE " . $where . " group by s.id " . $HAVING . " order by p.Item_name"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + echo $sql; + + + $content = ""; + $content .= ' + + + + + + + + + + + '; + + foreach ($stock_list as $row) { + + if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="background-color: #999999;"'; + } else { + $tr_color = ''; + } + + $content .= ' + + + + + + + '; + } + + $content .= '
Item NameTotal Unit QtyCurrent Unit QtyTotal Sale Unit QtyPackage/Re-Order QtyStock Cost
' . $row->item_name . '' . $row->P_Unit_Qty . '' . $row->C_Unit_Stock_Qty . '' . $row->sale_unit . '' . $row->packing . '' . $row->Stock_Cost . '
'; + + //echo $content; + ExportExcel($content, 'Report_Medical_store_stock'); + } + + public function Stock_result_excel_3($supplier_id, $opd_date_range, $item_name, $chk_reorder, $schedule_id = "") + { + + $HAVING = ""; + $where = " 1=1 "; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(p.total_unit-p.total_lost_unit-p.total_sale_unit-p.total_return_unit)<=p.re_order_qty"; + }else{ + $where .=" and (p.total_unit-p.total_lost_unit-p.total_sale_unit-p.total_return_unit)>0 "; + } + + if (strlen(urldecode($item_name))>2) { + $where .= " and m.item_name like '%" . urldecode($item_name) . "%' "; + } + + + + if (!($opd_date_range == '' || $opd_date_range == '0')) { + $rangeArray = explode("S", $opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and s.stock_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + if ($schedule_id == '') { + } else { + + $where .= " and (1<>1 "; + $schedule_id = explode("S", $schedule_id); + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or p.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or p.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or p.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or p.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or p.narcotic=1 "; + } + } + $where .= ")"; + } + + $sql = "SELECT m.item_name, m.id,m.genericname,m.formulation,p.expiry_date,p.mrp,p.CGST_per, SUM(p.tqty) AS Pak_qty, SUM(p.total_unit) AS P_Unit_Qty, p.batch_no,p.selling_unit_rate,p.packing, + SUM(TRUNCATE((p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit)/p.packing,0)) AS C_Pak_Qty, SUM(p.total_sale_unit) AS sale_unit, SUM(TRUNCATE((p.total_sale_unit)/p.packing,0)) AS C_Pak_Sale_Qty, m.re_order_qty, + SUM(p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit) AS C_Unit_Stock_Qty, SUM(TRUNCATE((p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit),0)*p.purchase_unit_rate) AS Stock_Cost, p.purchase_unit_rate , + max(p.HSNCODE) AS HSNCODE + FROM (med_product_master m JOIN purchase_invoice_item p ON m.id=p.item_code and m.is_continue=1 and p.item_return=0 AND p.remove_item=0) + JOIN purchase_invoice i ON p.purchase_id=i.id + WHERE " . $where . " group by m.id,p.purchase_unit_rate,p.packing,p.batch_no,p.expiry_date " . $HAVING . " order by p.Item_name"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + + $content = ""; + //$content = $sql; + $content .= ' + + + + + + + + + + + + + + + + + + + '; + + foreach ($stock_list as $row) { + + if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="background-color: #999999;"'; + } else { + $tr_color = ''; + } + + $content .= ' + + + + + + + + + + + + + + + '; + } + + $content .= '
Item NameCompostion Name (Salt Name)FormulationBatch No.ExpiryPackagePurchase Unit QtyPurchase Unit RateSale Unit QtySale Unit RateMRPCur. QtyGST PerHSNCODE
' . $row->item_name . '' . $row->genericname . '' . $row->formulation . '' . $row->batch_no . '' . $row->expiry_date . '' . $row->packing . '' . $row->P_Unit_Qty . '' . $row->purchase_unit_rate . '' . $row->sale_unit . '' . $row->selling_unit_rate . '' . $row->mrp . '' . $row->C_Unit_Stock_Qty . '' . $row->CGST_per . '' . $row->HSNCODE . '
'; + + //echo $content; + ExportExcel($content, 'Report_Medical_store_stock'); + } + + + public function get_product_stock($product_id, $remove_item = 0) + { + $supplier_id = $this->input->post('input_supplier'); + $date_range = $this->input->post('date_range'); + + $product_pak = $this->input->post('product_pak'); + + $where = "1=1 "; + + if ($date_range <> '0') { + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and p.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + $where .= " and i.item_code=$product_id and i.packing=$product_pak "; + + $sql = "SELECT i.id,s.name_supplier,s.short_name,i.Item_name, + p.Invoice_no,p.date_of_invoice,i.mrp,i.packing, + i.batch_no,i.expiry_date,i.purchase_price,i.purchase_unit_rate, + i.qty,i.qty_free,i.tqty,i.total_unit,i.total_sale_unit, + i.total_return_unit,i.total_lost_unit, + (i.total_unit-i.total_sale_unit-i.total_lost_unit-i.total_return_unit) as cur_unit + FROM (purchase_invoice p JOIN purchase_invoice_item i ON p.id=i.purchase_id and i.item_return=0) + JOIN med_supplier s ON p.sid=s.sid + WHERE $where and remove_item=$remove_item + Order by p.id"; + + $query = $this->db->query($sql); + $data['product_purchase_detail'] = $query->result(); + + //echo $sql; + + $this->load->view('Medical/Store/Stock_Item_history', $data); + } + + public function get_product_stock_removed($product_id, $remove_item = 0) + { + $supplier_id = $this->input->post('input_supplier'); + $date_range = $this->input->post('date_range'); + + $where = "1=1 "; + + if ($date_range <> '0') { + $rangeArray = explode("S", $date_range); + + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and p.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + } else { + $where .= " and p.date_of_invoice>=date_add(curdate(),interval -1 year)"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + $where .= " and i.item_code=$product_id"; + + $sql = "SELECT i.id,s.name_supplier,s.short_name,i.Item_name, + p.Invoice_no,p.date_of_invoice,i.mrp, + i.batch_no,i.expiry_date,i.purchase_price,i.purchase_unit_rate, + i.qty,i.qty_free,i.tqty,i.total_unit,i.total_sale_unit, + i.total_return_unit,i.total_lost_unit, + (i.total_unit-i.total_sale_unit-i.total_lost_unit) as cur_unit + FROM (purchase_invoice p JOIN purchase_invoice_item i ON p.id=i.purchase_id) + JOIN med_supplier s ON p.sid=s.sid + WHERE $where and remove_item=1 + Order by p.id"; + + $query = $this->db->query($sql); + $data['product_purchase_detail'] = $query->result(); + + $this->load->view('Medical/Store/Stock_Item_history_removed', $data); + } + + public function get_product_stock_return($product_id) + { + $supplier_id = $this->input->post('input_supplier'); + $date_range = $this->input->post('date_range'); + + $where = "1=1 "; + + if ($date_range <> '0') { + $rangeArray = explode("S", $date_range); + + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and p.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + } else { + $where .= " and p.date_of_invoice>=date_add(curdate(),interval -1 year)"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + $where .= " and i.item_code=$product_id"; + + $sql = "SELECT m.p_r_invoice_no, m.date_of_invoice,m.insert_datetime,i.Item_name,i.qty,s.name_supplier + FROM (purchase_return_invoice m JOIN purchase_return_invoice_item i ON m.id=i.purchase_inv_id) + JOIN med_supplier s ON m.sid=s.sid + WHERE i.item_code=$product_id"; + $query = $this->db->query($sql); + $data['return_purchase'] = $query->result(); + + $sql = "SELECT m.Invoice_no, m.date_of_invoice,m.insert_time,i.Item_name,i.qty,s.name_supplier,i.packing + FROM (purchase_invoice m JOIN purchase_invoice_item i ON m.id=i.purchase_id) + JOIN med_supplier s ON m.sid=s.sid + WHERE i.item_return=1 and i.item_code=$product_id"; + $query = $this->db->query($sql); + $data['return_invoice_purchase'] = $query->result(); + + + $this->load->view('Medical/Store/Stock_Item_history_return', $data); + } + + + public function Org_Bills() + { + $sql = "select * from hc_insurance where id>1 and active=1 "; + $query = $this->db->query($sql); + $data['data_insurance'] = $query->result(); + + $this->load->view('Medical/Report/Report_org_invoice_list', $data); + } + + public function Org_Bills_Report($date_range, $Insurance_id, $output = 0) + { + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " "; + + $where .= " and m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + if ($Insurance_id > 0) { + $where .= " and i.id = " . $Insurance_id; + } + + $sql = "select m.inv_med_code,o.case_id_code,p.p_code,p.p_fname,m.net_amount,i.ins_company_name + from ((invoice_med_master m join patient_master p on m.patient_id=p.id) + join organization_case_master o on m.case_id=o.id) + join hc_insurance i on o.insurance_id=i.id + where m.case_id>1 and m.case_credit=1 " . $where . " "; + $query = $this->db->query($sql); + $data_insurance = $query->result(); + + $content = ""; // $sql; + + $total_amt = 0; + + $content .= ' + + + + + + + + '; + + foreach ($data_insurance as $row) { + $content .= ' + + + + + + + '; + $total_amt = $total_amt + $row->net_amount; + } + + $content .= ' + + + + + + + '; + $content .= '
Inv. IDOrg.CodeP CodeP NameAmountOrg. Name
' . $row->inv_med_code . '' . $row->case_id_code . '' . $row->p_code . '' . $row->p_fname . '' . $row->net_amount . '' . $row->ins_company_name . '
Total' . $total_amt . '
'; + + if ($output == 0) { + create_report_pdf_landscape($content, 'Med_Invoice_org'); + } else { + ExportExcel($content, 'Med_Invoice_org'); + } + } + + + public function Stock_qty_result() + { + $supplier_id = $this->input->post('input_supplier'); + $item_name = $this->input->post('txtsearch'); + $store_id = $this->input->post('input_store_id'); + $chk_reorder = $this->input->post('chk_reorder'); + + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING (sum(i.total_unit) - sum(if(ss.sale_qty is NULL,0,ss.sale_qty)))<=pm.re_order_qty"; + } + + $where = " remove_item=0 "; + + if ($supplier_id > 0) { + $where .= " and s.sid = " . $supplier_id; + } + + + if ($item_name <> '') { + $where .= " and i.Item_name like '%" . $item_name . "%' "; + } + + $sql = "SELECT i.Item_name,i.item_code ,sum(distinct i.tqty), + pm.re_order_qty, + sum(i.total_unit) as T_unit, + sum(if(ss.sale_qty is NULL,0,ss.sale_qty)) sal_qty, + GROUP_CONCAT(distinct s.name_supplier) AS supplier_names + FROM (((purchase_invoice_item i join purchase_invoice p on i.purchase_id=p.id ) + join med_supplier s on s.sid=p.sid) + JOIN med_product_master pm ON i.item_code=pm.id AND pm.is_continue=1) + LEFT JOIN + (SELECT item_code,sum(qty) AS sale_qty FROM inv_med_item GROUP BY item_code ) + AS ss ON i.item_code= ss.item_code + Where " . $where . " group by i.item_code " . $HAVING . " order by i.Item_name"; + $query = $this->db->query($sql); + $data['stock_list'] = $query->result(); + + $this->load->view('Medical/Stock/Stock_search_qty_result', $data); + } + + + + + public function Report_Med_patient() + { + $this->load->view('Medical/Report/Report_Med_patient'); + } + + public function drug_patient_distribute($date_range, $item_name, $schedule_id, $output = 0) + { + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $item_name = urldecode($item_name); + //$item_name=$this->input->post('txtsearch'); + + $where = " "; + + $where .= " m.inv_date between '" . $minRange . "' and '" . $maxRange . "'"; + + $schedule_id = explode("S", $schedule_id); + + if ($item_name <> '-') { + $where .= " and (t.item_Name like '%" . $item_name . "%' or t.batch_no ='" . $item_name . "') "; + } else if ($schedule_id > 0) { + $where .= " and (1<>1 "; + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or p.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or p.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or p.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or p.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or p.narcotic=1 "; + } + + if ($row == 6) { + $where .= " or p.high_risk=1 "; + } + } + $where .= ")"; + } else { + $where .= " and 1<>1"; + } + + + $sql = "select t.item_Name,m.inv_med_code,m.id as m_id,date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + date_format(t.expiry,'%m-%Y') as exp_date, + m.patient_id,m.patient_code,m.inv_name,m.ipd_id,m.ipd_code, t.batch_no,sum(if(t.sale_return=0,t.qty,t.qty*-1)) as t_qty, + TRIM(',' FROM Concat(if(p.schedule_h=1,'schedule_h,',''), + if(p.schedule_h1=1,'schedule_h1,',''), + if(p.narcotic=1,'narcotic,',''), + if(p.schedule_x=1,'schedule_x,',''), + if(p.schedule_g=1,'schedule_g,',''))) as shed_x_h + from (invoice_med_master m join inv_med_item t on m.id=t.inv_med_id) + join med_product_master p on p.id=t.item_code + where " . $where . " group by t.item_Name,m.id WITH ROLLUP"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + //echo $sql; + + $content = ' + + + + + + + + + '; + + $Head_Content = ""; + foreach ($stock_list as $row) { + if ($row->m_id == '') { + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ''; + } else { + if ($Head_Content <> $row->item_Name) { + $content .= ''; + $content .= ' '; + $content .= ''; + $Head_Content = $row->item_Name; + } + + $content .= ''; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ' '; + $content .= ''; + } + } + + $content .= '
Inv.No.Inv.DateIPD No.P Code/NameExp. DateBatchQty
Total Qty : ' . $row->t_qty . '
' . $row->item_Name . '[ ' . $row->shed_x_h . ' ]
' . $row->inv_med_code . '' . $row->str_inv_date . '' . $row->ipd_code . '' . $row->patient_code . ' / ' . $row->inv_name . '' . $row->exp_date . '' . $row->batch_no . '' . $row->t_qty . '
'; + + if ($output == 0) { + $this->load->library('m_pdf'); + + $this->m_pdf->pdf->setBasePath(base_url('/')); + $file_name = 'Report-MedicalBill-' . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } else { + ExportExcel($content, 'Report_Medical'); + } + } + + + + public function getInvoiceTable() + { + + $requestData = $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 => 'inv_med_code', + 1 => 'inv_name', + 2 => 'Code', + 3 => 'inv_date_str', + 4 => 'net_amount', + 5 => 'payment_received', + 6 => 'payment_balance', + 7 => 'id', + 8 => 'ipd_status', + 9 => 'org_status', + 10 => 'ipd_credit_type', + 11 => 'org_credit_type' + ); + + // getting total number records without any search + $sql_f_all = "select m.inv_med_code,m.inv_name, + Concat(if(m.patient_code<>'',Concat(m.patient_code,'
'),''), + if(m.ipd_code<>'',Concat('',m.ipd_code,'
'),''), + if(m.case_id>0,Concat(o.case_id_code,'
'),'')) as Code , + m.inv_date,Date_Format(m.inv_date,'%d-%m-%Y') as inv_date_str, + m.doc_name,m.net_amount,m.payment_received,m.payment_balance,m.id,i.ipd_status, + o.status as org_status, + m.ipd_credit as ipd_credit_type,m.case_credit as org_credit_type "; + + $sql_count = "Select count(*) as no_rec "; + + $sql_from = " from (invoice_med_master m left join ipd_master i on m.ipd_id=i.id) + left join organization_case_master o on m.case_id=o.id "; + + $total_sql = $sql_count . $sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec'] = $query->result(); + $totalData = $data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where = " WHERE 1 = 1"; + + $sql_where_flag = 0; + + // getting records as per search parameters + if (!empty($requestData['columns'][0]['search']['value'])) { //inv_med_code + $sql_where .= " AND inv_med_code LIKE '%" . $requestData['columns'][0]['search']['value'] . "' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][1]['search']['value'])) { //inv_name + $sql_where .= " AND inv_name LIKE '%" . $requestData['columns'][1]['search']['value'] . "%' "; + $sql_where_flag = 1; + } + + if (!empty($requestData['columns'][2]['search']['value'])) { //patient_code + $sql_where .= " AND (patient_code LIKE '%" . $requestData['columns'][2]['search']['value'] . "' OR + m.ipd_code LIKE '%" . $requestData['columns'][2]['search']['value'] . "' OR + o.case_id_code LIKE '%" . $requestData['columns'][2]['search']['value'] . "' )"; + $sql_where_flag = 1; + } + + $total_filer_sql = $sql_count . $sql_from . $sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter'] = $query->result(); // when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered = $data['total_rec_filter'][0]->no_rec; + + $sql_order = " ORDER BY id desc," . $columns[$requestData['order'][0]['column']] . " " . $requestData['order'][0]['dir'] . " LIMIT " . $requestData['start'] . " ," . $requestData['length'] . " "; // adding length + + $Result_sql = $sql_f_all . $sql_from . $sql_where . $sql_order; + + $query = $this->db->query($Result_sql); + $rdata = $query->result_array(); + + $output = array( + "draw" => intval($requestData['draw']), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval($totalData), // total number of records + "recordsFiltered" => intval($totalFiltered), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach ($rdata as $aRow) { + $row = array(); + + foreach ($columns as $col) { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function Invoice_med_show($inv_id) + { + $this->load->model('Medical_M'); + + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + + $sql = "select *,(discount_amount+item_discount_amount) as inv_disc_total,(CGST_Tamount+SGST_Tamount) as TGST , + if(ipd_credit>0,'Credit to IPD','CASH') as credit_status,if(case_credit>0,'Credit to Org','CASH') as credit_org_status + from invoice_med_master where id=" . $inv_id; + + $query = $this->db->query($sql); + $data['invoiceMaster'] = $query->result(); + + $sql = "select * from inv_med_item where inv_med_id=" . $inv_id; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist'] = $query->result(); + + $sql = "select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='" . $data['invoiceMaster'][0]->patient_id . "' "; + $query = $this->db->query($sql); + $data['person_info'] = $query->result(); + + $sql = "select * from ipd_master where ipd_status=0 and id=" . $data['invoiceMaster'][0]->ipd_id; + $query = $this->db->query($sql); + $data['ipd_master'] = $query->result(); + + if ($data['invoiceMaster'][0]->case_id > 0) { + $sql = "select * from organization_case_master where id=" . $data['invoiceMaster'][0]->case_id; + $query = $this->db->query($sql); + $data['OCaseMaster'] = $query->result(); + } + + $sql = "select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history_medical where Medical_invoice_id=" . $inv_id; + $query = $this->db->query($sql); + $data['payment_history_medical'] = $query->result(); + + $this->load->view('Medical/Invoice_OLD_Master', $data); + } + + public function update_rate() + { + $invoice_id = $this->input->post('med_invoice_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $dataupdate = array( + 'rate_update' => $this->input->post('input_dis_amt'), + 'rate_update_by' => $user_name . '[' . $user_id . ']' + ); + + $this->load->model('Medical_M'); + $this->Medical_M->update_in_upv_item($dataupdate, $invoice_id); + + $this->Medical_M->update_invoice_rate_final($invoice_id); + #$this->Medical_M->update_invoice_final($invoice_id); + + } + + + public function update_stock_adjust() + { + $item_id = $this->input->post('item_id'); + $qty = $this->input->post('qty'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $data_stock_adjuct = array( + 'item_id' => $item_id, + 'qty' => $qty, + 'date_of_adjust' => date('Y-m-d'), + 'update_by' => $user_name . '[' . $user_id . ']' + ); + + + $this->load->model('Medical_M'); + + $ins_id = $this->Medical_M->update_purchase_item_stock_adjust($data_stock_adjuct, $item_id); + + echo $ins_id; + } + + public function remove_stock_item() + { + $item_id = $this->input->post('item_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $data_stock_adjuct = array( + 'item_id' => $item_id, + 'date_of_adjust' => date('Y-m-d'), + 'qty' => '0', + 'update_by' => $user_name . '[' . $user_id . ']' + ); + + $this->load->model('Medical_M'); + + $ins_id = $this->Medical_M->update_remove_status_item($data_stock_adjuct, $item_id); + + echo $ins_id; + } + + public function add_stock_item() + { + $item_id = $this->input->post('item_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + $data_stock_adjuct = array( + 'item_id' => $item_id, + 'date_of_adjust' => date('Y-m-d'), + 'qty' => '0', + 'update_by' => $user_name . '[' . $user_id . ']' + ); + + $this->load->model('Medical_M'); + + $ins_id = $this->Medical_M->add_removed_item($data_stock_adjuct, $item_id); + + echo $ins_id; + } + + public function Report_IPD_CreditBills() + { + $this->load->view('Medical/Report/Med_Report_IPD_Credit'); + } + + //Supplier Ledger + + public function SupplierAccount() + { + $sql = "SELECT m.sid,m.name_supplier,m.short_name, + SUM(if(l.credit_debit=0,l.amount,l.amount*-1)) AS Tot_Balance, + date_format(MAX(if(l.credit_debit=0 AND l.purchase_id>0,l.tran_date,'')),'%d-%m-%Y') AS Last_InvDate, + date_format(MAX(if(l.credit_debit=1 AND l.purchase_id=0,l.tran_date,'')),'%d-%m-%Y') AS Last_Payment + FROM med_supplier m left JOIN med_supplier_ledger l ON m.sid=l.supplier_id + GROUP BY m.sid + ORDER BY m.name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Purchase/supplier_account', $data); + } + + public function SupplierAccount_led($sid) + { + $sql = "SELECT m.sid,m.name_supplier,m.short_name, + SUM(if(l.credit_debit=0,l.amount,l.amount*-1)) AS Tot_Balance, + date_format(MAX(if(l.credit_debit=0 AND l.purchase_id>0,l.tran_date,'')),'%d-%m-%Y') AS Last_InvDate, + date_format(MAX(if(l.credit_debit=1 AND l.purchase_id=0,l.tran_date,'')),'%d-%m-%Y') AS Last_Payment + FROM med_supplier m left JOIN med_supplier_ledger l ON m.sid=l.supplier_id + where m.sid=$sid"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Purchase/supplier_account_detail', $data); + } + + function search_result_tran($s_id, $date_range = '') + { + + if ($date_range == '') { + $date_range = $this->input->post('led_date_range'); + } + + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " date(l.tran_date) BETWEEN '$minRange' AND '$maxRange' "; + + $sql = " SELECT l.*, + CONCAT_WS('/',b.bank_account_name,b.bank_name) AS mode_desc + FROM (med_supplier_ledger l JOIN bank_account_master b ON l.bank_id=b.bank_id) + Where l.supplier_id=$s_id and $where order by tran_date desc"; + $query = $this->db->query($sql); + $data['med_supplier_ledger'] = $query->result(); + + + $sql = " SELECT sum(if(credit_debit=0,amount,amount*-1)) as Balance + FROM med_supplier_ledger l + Where l.supplier_id=$s_id and date(l.tran_date) <'$minRange' "; + $query = $this->db->query($sql); + $supplier_balance_till_date = $query->result(); + + $data['balance_till_date'] = $supplier_balance_till_date[0]->Balance; + + $sql = " SELECT sum(if(credit_debit=0,amount,amount*-1)) as Balance + FROM med_supplier_ledger l + Where l.supplier_id=$s_id and date(l.tran_date) <='$maxRange' "; + $query = $this->db->query($sql); + $supplier_balance_till_date = $query->result(); + $data['balance_till_date_close'] = $supplier_balance_till_date[0]->Balance; + + $sql = " SELECT sum(if(credit_debit=0,amount,0)) as cr_total, + sum(if(credit_debit=1,amount,0)) as dr_total + FROM med_supplier_ledger l + Where l.supplier_id=$s_id and $where "; + $query = $this->db->query($sql); + $supplier_data_total_cr_dr = $query->result(); + + $data['cr_total'] = $supplier_data_total_cr_dr[0]->cr_total; + $data['dr_total'] = $supplier_data_total_cr_dr[0]->dr_total; + + $data['s_id'] = $s_id; + $data['date_range'] = $date_range; + + $this->load->view('Medical/Purchase/ledger_data', $data); + } + + function add_entry($s_id) + { + $this->load->model('Medical_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user_id . ']'; + + if (isset($_POST) && count($_POST) > 0) { + $params = array( + 'supplier_id' => $s_id, + 'credit_debit' => $this->input->post('cr_dr_type'), + 'tran_date' => str_to_MysqlDate($this->input->post('tran_date')), + 'amount' => $this->input->post('amount'), + 'bank_id' => $this->input->post('mode_type'), + 'tran_desc' => $this->input->post('ref_cust_id'), + 'tran_desc' => $this->input->post('tran_desc'), + 'insert_by_id' => $user_id, + 'insert_by' => $user_name, + ); + + $insert_id = $this->Medical_M->insert_med_supplier_ledger($params); + redirect('Medical_backpanel/SupplierAccount_led/' . $s_id); + } else { + $data['s_id'] = $s_id; + + $sql = "select * from bank_account_master"; + $query = $this->db->query($sql); + $data['bank_account_master'] = $query->result(); + + + + $this->load->view('Medical/Purchase/ledger_add_entry', $data); + } + } + + function edit_entry($tran_id) + { + + $this->load->model('Medical_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . '[' . $user_id . ']'; + + $sql = "select * from med_supplier_ledger where id=$tran_id"; + $query = $this->db->query($sql); + $data['med_supplier_ledger'] = $query->result(); + + $s_id = $data['med_supplier_ledger'][0]->supplier_id; + + if (isset($_POST) && count($_POST) > 0) { + $params = array( + 'credit_debit' => $this->input->post('cr_dr_type'), + 'tran_date' => str_to_MysqlDate($this->input->post('tran_date')), + 'amount' => $this->input->post('amount'), + 'bank_id' => $this->input->post('mode_type'), + 'tran_desc' => $this->input->post('ref_cust_id'), + 'tran_desc' => $this->input->post('tran_desc'), + 'insert_by_id' => $user_id, + 'insert_by' => $user_name, + ); + + $this->Medical_M->update_med_supplier_ledger($params, $tran_id); + redirect('Medical_backpanel/SupplierAccount_led/' . $s_id); + } else { + + $sql = "select * from bank_account_master"; + $query = $this->db->query($sql); + $data['bank_account_master'] = $query->result(); + + $data['tran_id'] = $tran_id; + + $this->load->view('Medical/Purchase/ledger_edit_entry', $data); + } + } + + // Return Invoice + public function Purchase_return() + { + $this->load->view('Medical/Stock/purchase_return'); + } + + public function PurchaseReturnNew() + { + $sql = "select * from med_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data'] = $query->result(); + + $this->load->view('Medical/Stock/new_purchase_return_invoice', $data); + } + + public function PurchaseReturnInvoice() + { + $sdata = trim($this->input->post('txtsearch')); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if (trim($sdata) == '') { + $sql = "select p.id,p.p_r_invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice,p.sid,s.name_supplier, + s.short_name + from (purchase_return_invoice p join med_supplier s on p.sid=s.sid) + + group by p.id + order by p.id desc limit 50"; + } else { + + $numric_condition = ""; + + if (is_numeric($sdata)) { + $numric_condition = " OR p.Invoice_no=" . $sdata; + } + + $sql = "select p.id,p.p_r_invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice,p.sid,s.name_supplier, + s.short_name + from (purchase_return_invoice p join med_supplier s on p.sid=s.sid) + where (p.p_r_invoice_no LIKE '%" . $sdata . "' " . $numric_condition . " ) + group by p.id + order by p.id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['purchase_return_invoice'] = $query->result(); + + $this->load->view('Medical/Stock/purchase_supp_list', $data); + } + + + public function CreatePurchaseReturn() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + + $sid = $this->input->post('input_supplier'); + $d_invoice = $this->input->post('datepicker_invoice'); + + $where = " where sid=$sid"; + + $Udata = array( + 'sid' => $sid, + 'date_of_invoice' => str_to_MysqlDate($d_invoice), + ); + + $this->load->model('Medical_M'); + + $inser_id = $this->Medical_M->add_purchase_return_invoice($Udata); + $send_msg = "Added Successfully"; + + if ($inser_id > 0) { + $show_text = Show_Alert('success', 'Success', $send_msg); + } else { + $show_text = Show_Alert('danger', 'Error', $send_msg); + } + + + $rvar = array( + 'insertid' => $inser_id, + 'show_text' => $show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function PurchaseReturnInvoiceEdit($inv_id) + { + $sql = "select p.id,p.p_r_invoice_no as Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d/%m/%Y') as str_date_of_invoice, + p.sid,s.name_supplier,s.short_name,s.gst_no,p.status as inv_status + from purchase_return_invoice p join med_supplier s on p.sid=s.sid + where p.id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice'] = $query->result(); + + $sql = "select p.*,r.purchase_inv_id,r.qty as r_qty,Round(r.qty/p.packing,2) AS qty_pak,r.id as r_id,if(r.batch_no_r='',p.batch_no,r.batch_no_r) as batch_no_r_s, + date_format(p.expiry_date,'%m/%y') as exp_date_str ,p.purchase_unit_rate*r.qty AS r_amount,p.purchase_unit_rate + from purchase_return_invoice_item r join purchase_invoice_item p on r.purchase_item_id=p.id + where purchase_inv_id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice_item'] = $query->result(); + + $data['inv_id'] = $inv_id; + + $data['content'] = $this->load->view('Medical/Stock/purchase_return_invoice_item', $data, true); + + $this->load->view('Medical/Stock/purchase_return_invoice_edit', $data); + } + + public function PurchaseReturn_invoice_item_list($inv_id) + { + $sql = "select p.*,r.purchase_inv_id,r.qty as r_qty,Round(r.qty/p.packing,2) AS qty_pak,r.id as r_id,if(r.batch_no_r='',p.batch_no,r.batch_no_r) as batch_no_r_s, + date_format(p.expiry_date,'%m/%y') as exp_date_str ,p.purchase_unit_rate*r.qty AS r_amount,p.purchase_unit_rate + from purchase_return_invoice_item r join purchase_invoice_item p on r.purchase_item_id=p.id + where purchase_inv_id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice_item'] = $query->result(); + + $sql = "select * from purchase_return_invoice where id='" . $inv_id . "' "; + $query = $this->db->query($sql); + $data['purchase_return_invoice'] = $query->result(); + + $this->load->view('Medical/Stock/purchase_return_invoice_item', $data); + } + + public function Purchase_Invoice_product($supp_id) + { + $data['supp_id'] = $supp_id; + + $this->load->view('Medical/Stock/purchase_product_search', $data); + } + + public function Purchase_Invoice_old($supp_id) + { + $sdata = trim($this->input->post('txtsearch')); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if (trim($sdata) == '') { + $sql = "select p.id as pur_id,p.Invoice_no,p.date_of_invoice, + if(i.expiry_date0 + and p.date_of_invoice>=date_add(curdate(),interval -1 year) + order by p.id desc "; + } else { + + $numric_condition = ""; + + if (is_numeric($sdata)) { + $numric_condition = " OR p.Invoice_no=" . $sdata; + } + + $sql = "select p.id as pur_id,p.Invoice_no,p.date_of_invoice, + if(i.expiry_date0 + and p.date_of_invoice>=date_add(curdate(),interval -1 year) + order by p.id desc "; + } + + $query = $this->db->query($sql); + $data['purchase_list'] = $query->result(); + + $this->load->view('Medical/Stock/purchase_invoice_list', $data); + } + + public function add_remove_item() + { + $this->load->model('Medical_M'); + + $inv_id = $this->input->post('inv_id'); + $item_id = $this->input->post('itemid'); + $rqty = $this->input->post('rqty'); + + $rbatch_no = $this->input->post('rbatch_no'); + $rexpiry_dt = $this->input->post('rexpiry_dt'); + + $user = $this->ion_auth->user()->row(); + $user_update_info = $user->first_name . '' . $user->last_name . '[' . $user->id . ']' . date('d-m-Y H:i:s'); + + $sql = "select * from purchase_invoice_item where id='" . $item_id . "' "; + $query = $this->db->query($sql); + $purchase_invoice_item = $query->result(); + + $update = 0; + $msg_box = ""; + + if (count($purchase_invoice_item) > 0) { + $total_unit = $purchase_invoice_item[0]->total_unit; + $total_sale_unit = $purchase_invoice_item[0]->total_sale_unit; + $total_return_unit = $purchase_invoice_item[0]->total_return_unit; + $total_lost_unit = $purchase_invoice_item[0]->total_lost_unit; + + $cur_unit_qty = $total_unit - $total_sale_unit - $total_return_unit - $total_lost_unit; + + if ($cur_unit_qty > 0) { + $insert_data = array( + 'purchase_inv_id' => $inv_id, + 'purchase_item_id' => $item_id, + 'item_code' => $purchase_invoice_item[0]->item_code, + 'Item_name' => $purchase_invoice_item[0]->Item_name, + 'batch_no_r' => $rbatch_no, + 'expiry_date_r' => $rexpiry_dt, + 'qty' => $rqty + ); + + $this->Medical_M->add_purchase_return_invoiceitem($insert_data); + $update = 1; + $msg_box = "Item Added"; + } else { + $update = 0; + $msg_box = "Current Item Qty is " . $cur_unit_qty; + } + } else { + $update = 0; + $msg_box = "No item found"; + } + + $sql = "select p.*,r.purchase_inv_id,r.qty as r_qty,Round(r.qty/p.packing,2) AS qty_pak,r.id as r_id,if(r.batch_no_r='',p.batch_no,r.batch_no_r) as batch_no_r_s, + date_format(p.expiry_date,'%m/%y') as exp_date_str ,p.purchase_unit_rate*r.qty AS r_amount,p.purchase_unit_rate + from purchase_return_invoice_item r join purchase_invoice_item p on r.purchase_item_id=p.id + where purchase_inv_id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice_item'] = $query->result(); + + $content = $this->load->view('Medical/Stock/purchase_return_invoice_item', $data, true); + + $rvar = array( + 'update' => $update, + 'msg_text' => $msg_box, + 'content' => $content + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function get_drug() + { + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "SELECT p.item_name as item_name,p.formulation,t.batch_no,t.expiry_date as expiry_date_str,t.expiry_date, + (t.total_unit-t.total_sale_unit-total_lost_unit-t.total_return_unit) AS c_qty, + t.id,t.mrp,t.selling_unit_rate,p.id AS item_code,t.packing,t.purchase_id + FROM med_product_master p + JOIN purchase_invoice_item t ON p.id=t.item_code + and (t.total_unit-t.total_sale_unit-t.total_lost_unit-t.total_return_unit)>0 + and t.remove_item=0 and t.item_return=0 + where (p.item_name like '" . $q . "%' "; + + if (strlen($q) > 5) { + $sql = $sql . " or p.item_name SOUNDS LIKE '" . $q . "'"; + } + + $sql = $sql . ") order by p.item_name,id limit 100"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['item_name'] . ' ' . $row['formulation'])) . ' |B:' . htmlentities(stripslashes($row['batch_no'])) . ' |Pak:' . htmlentities(stripslashes($row['packing'])) . ' |Rs.' . htmlentities(stripslashes($row['mrp'])) . ' |Qty:' . htmlentities(stripslashes($row['c_qty'])); + $new_row['value'] = htmlentities(stripslashes($row['item_name'])); + $new_row['l_item_code'] = htmlentities(stripslashes($row['item_code'])); + $new_row['l_ss_no'] = htmlentities(stripslashes($row['id'])); + $new_row['l_Batch'] = htmlentities(stripslashes($row['batch_no'])); + $new_row['l_Expiry'] = htmlentities(stripslashes($row['expiry_date_str'])); + $new_row['l_mrp'] = htmlentities(stripslashes($row['mrp'])); + $new_row['l_unit_rate'] = htmlentities(stripslashes($row['selling_unit_rate'])); + $new_row['l_c_qty'] = htmlentities(stripslashes($row['c_qty'])); + $new_row['l_packing'] = htmlentities(stripslashes($row['packing'])); + $new_row['l_purchase_id'] = htmlentities(stripslashes($row['purchase_id'])); + //$new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } else { + $new_row['sql'] = $sql; + $row_set[] = $new_row; + echo json_encode($row_set); + } + } + } + + public function get_batch($item_id) + { + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "SELECT t.batch_no + FROM med_product_master p + JOIN purchase_invoice_item t + where t.item_code=$item_id and t.batch_no like '" . $q . "%' "; + + if (strlen($q) > 5) { + $sql = $sql . " or p.item_name SOUNDS LIKE '" . $q . "'"; + } + + $sql = $sql . ") order by p.item_name,id limit 100"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['batch_no'])); + $new_row['value'] = htmlentities(stripslashes($row['batch_no'])); + + //$new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } else { + $new_row['sql'] = $sql; + $row_set[] = $new_row; + echo json_encode($row_set); + } + } + } + + public function remove_item_invoice($itemid) + { + $this->load->model('Medical_M'); + + $user = $this->ion_auth->user()->row(); + $user_update_info = $user->first_name . '' . $user->last_name . '[' . $user->id . ']' . date('d-m-Y H:i:s'); + + $sql = "select * from purchase_return_invoice_item where id='" . $itemid . "' "; + $query = $this->db->query($sql); + $purchase_return_invoice_item = $query->result(); + + $update = 0; + $msg_box = ""; + + $content = ""; + + if (count($purchase_return_invoice_item) > 0) { + $purchase_invoice_item_id = $purchase_return_invoice_item[0]->id; + $r_qty = $purchase_return_invoice_item[0]->qty; + $inv_id = $purchase_return_invoice_item[0]->purchase_inv_id; + + + + $this->Medical_M->delete_purchase_return_invoiceitem($itemid); + + $update = 1; + $msg_box = "Item Removed"; + + $sql = "select p.*,r.purchase_inv_id,r.qty as r_qty,Round(r.qty/p.packing,2) AS qty_pak,r.id as r_id,if(r.batch_no_r='',p.batch_no,r.batch_no_r) as batch_no_r_s, + date_format(p.expiry_date,'%m/%y') as exp_date_str ,p.purchase_unit_rate*r.qty AS r_amount,p.purchase_unit_rate + from purchase_return_invoice_item r join purchase_invoice_item p on r.purchase_item_id=p.id + where purchase_inv_id=" . $inv_id; + $query = $this->db->query($sql); + $data['purchase_return_invoice_item'] = $query->result(); + + $content = $this->load->view('Medical/Stock/purchase_return_invoice_item', $data, true); + } else { + $update = 0; + $msg_box = "No item found"; + } + + $rvar = array( + 'update' => $update, + 'msg_text' => $msg_box, + 'content' => $content + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + //Transer Sale Item Purchase ID to Other + + public function Expire_stock() + { + $sql = "select p.id as pur_id,p.Invoice_no,p.date_of_invoice, + if(i.expiry_date0 + and p.date_of_invoice>=date_add(curdate(),interval -1 year) + and i.expiry_datedb->query($sql); + $data['purchase_list'] = $query->result(); + + //echo 'hello'; + $this->load->view('Medical/Stock/expiry_stock_list', $data); + } + + public function stocktransfer() + { + $this->load->view('Medical/Stock/stock_transfer'); + } + + public function merge_product() + { + $this->load->view('Medical/Stock/merge_product'); + } + + public function product_info($product_id) + { + $sql = "select * from med_product_master where id=$product_id"; + $query = $this->db->query($sql); + $product_info = $query->result(); + + if (count($product_info) > 0) { + + $rvar = array( + 'product_id' => $product_info[0]->id, + 'product_name' => $product_info[0]->item_name, + 'formulation' => $product_info[0]->formulation, + 'genericname' => $product_info[0]->genericname, + + ); + } else { + $rvar = array( + 'product_id' => 0, + ); + } + + $encode_data = json_encode($rvar); + + echo $encode_data; + } + + public function product_merged() + { + $from_prod_id = $this->input->post('from_product_id'); + $to_prod_id = $this->input->post('to_product_id'); + + $this->load->model('Medical_M'); + $this->Medical_M->merge_product($from_prod_id, $to_prod_id); + + $rvar = array( + 'ssno' => 0, + ); + + $encode_data = json_encode($rvar); + + echo $encode_data; + } + + public function ssno_info($ssno) + { + $sql = "select * from purchase_invoice_item where id=$ssno"; + $query = $this->db->query($sql); + $product_info = $query->result(); + + if (count($product_info) > 0) { + $total_current_unit = $product_info[0]->total_unit - $product_info[0]->total_sale_unit - $product_info[0]->total_lost_unit + $product_info[0]->total_return_unit; + + $rvar = array( + 'ssno' => $ssno, + 'item_code' => $product_info[0]->item_code, + 'Item_name' => $product_info[0]->Item_name, + 'batch_no' => $product_info[0]->batch_no, + 'purchase_price' => $product_info[0]->purchase_price, + 'tqty' => $product_info[0]->tqty, + 'total_unit' => $product_info[0]->total_unit, + 'total_current_unit' => $total_current_unit, + 'total_sale_unit' => $product_info[0]->total_sale_unit, + ); + } else { + $rvar = array( + 'ssno' => 0, + ); + } + + $encode_data = json_encode($rvar); + + echo $encode_data; + } + + public function ssno_transfer() + { + $from_ssno = $this->input->post('from_ssno'); + $to_ssno = $this->input->post('to_ssno'); + $tqty = $this->input->post('tqty'); + + $this->load->model('Medical_M'); + $this->Medical_M->transfer_ssno($from_ssno, $to_ssno, $tqty); + + $rvar = array( + 'ssno' => 0, + ); + + $encode_data = json_encode($rvar); + + echo $encode_data; + } + + + function search_result_tran_print($s_id, $date_range = '') + { + + if ($date_range == '') { + $date_range = $this->input->post('led_date_range'); + } + + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where = " date(l.tran_date) BETWEEN '$minRange' AND '$maxRange' "; + + $sql = "Select * from med_supplier where sid=$s_id"; + $query = $this->db->query($sql); + $data['med_supplier'] = $query->result(); + + $data['Statement_between'] = MysqlDate_to_str($minRange) . " AND " . MysqlDate_to_str($maxRange); + + $sql = " SELECT l.*, + CONCAT_WS('/',b.bank_account_name,b.bank_name) AS mode_desc + FROM (med_supplier_ledger l JOIN bank_account_master b ON l.bank_id=b.bank_id) + Where l.supplier_id=$s_id and $where order by tran_date,l.id "; + $query = $this->db->query($sql); + $data['med_supplier_ledger'] = $query->result(); + + + $sql = " SELECT sum(if(credit_debit=0,amount,amount*-1)) as Balance + FROM med_supplier_ledger l + Where l.supplier_id=$s_id and date(l.tran_date) <'$minRange' "; + $query = $this->db->query($sql); + $supplier_balance_till_date = $query->result(); + + $data['balance_till_date'] = $supplier_balance_till_date[0]->Balance; + + $sql = " SELECT sum(if(credit_debit=0,amount,amount*-1)) as Balance,Max(l.tran_date) as Last_date_tran + FROM med_supplier_ledger l + Where l.supplier_id=$s_id and date(l.tran_date) <='$maxRange' "; + $query = $this->db->query($sql); + $supplier_balance_till_date = $query->result(); + + $data['balance_till_date_close'] = $supplier_balance_till_date[0]->Balance; + $data['LAst_date_tran'] = $supplier_balance_till_date[0]->Last_date_tran; + + $sql = " SELECT sum(if(credit_debit=0,amount,0)) as cr_total, + sum(if(credit_debit=1,amount,0)) as dr_total + FROM med_supplier_ledger l + Where l.supplier_id=$s_id and $where "; + $query = $this->db->query($sql); + $supplier_data_total_cr_dr = $query->result(); + + $data['cr_total'] = $supplier_data_total_cr_dr[0]->cr_total; + $data['dr_total'] = $supplier_data_total_cr_dr[0]->dr_total; + + $data['s_id'] = $s_id; + + $content = $this->load->view('Medical/Purchase/ledger_data_print', $data, True); + + $this->load->library('m_pdf'); + + $this->m_pdf->pdf->setBasePath(base_url('/')); + $file_name = 'Report-Ledger-' . $s_id . '-' . date('Ymdhis') . ".pdf"; + $filepath = $file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath, "I"); + } + + function Print_bill_on_uhid() + { + $this->load->view('Medical/print_bill_on_uhid'); + } + + function uhid_report($date_range, $p_code) + { + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql = "select * from patient_master_exten + where p_code='" . trim($p_code) . "'"; + $query = $this->db->query($sql); + $data['patient_master'] = $query->result(); + + if (count($data['patient_master']) > 0) { + $pid = $data['patient_master'][0]->id; + } else { + $pid = 0; + } + + if ($pid > 0) { + $sql = "Select id from invoice_med_master where patient_id=$pid and ipd_credit=0 and case_credit=0 and inv_date between '$minRange' AND '$maxRange'"; + $query = $this->db->query($sql); + $invoice_med_master = $query->result(); + + $content = ""; + + $net_amount = "0.0"; + $paid_amount = "0.0"; + $balance_amount = "0.0"; + + foreach ($invoice_med_master as $row) { + $inv_id = $row->id; + + $this->db->query("SELECT f_cash_opd_pre_data(" . $inv_id . ")"); + $this->db->query("CALL f_update_med_GST(" . $inv_id . ")"); + + $sql = "select i.inv_med_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%y')as expiry, + i.price,i.qty,(i.amount) as amount,i.HSNCODE, + m.inv_med_code,m.id as m_id, + date_format(m.inv_date,'%d-%m-%Y') as str_inv_date, + (twdisc_amount) as twdisc_amount, + (i.disc_amount+i.disc_whole) as d_amt, + (i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per ,i.sale_return + from inv_med_item i join invoice_med_master m + on i.inv_med_id=m.id + where m.id=$inv_id order by i.sale_return,id"; + $query = $this->db->query($sql); + $data['inv_items'] = $query->result(); + + $sql = "select *, + date_format(inv_date,'%d-%m-%Y') as str_inv_date, + (discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST + from invoice_med_master + where id=$inv_id"; + $query = $this->db->query($sql); + $data['invoice_med_master'] = $query->result(); + + $data['Doc_name'] = ""; + + if ($data['invoice_med_master'][0]->doc_id > 0) { + $doc_id = $data['invoice_med_master'][0]->doc_id; + + $sql = "select * from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master = $query->result(); + + $data['Doc_name'] = $doctor_master[0]->p_title . ' ' . $doctor_master[0]->p_fname; + } else { + $data['Doc_name'] = $data['invoice_med_master'][0]->doc_name; + } + + $sql = "select p.*,if(p.credit_debit=0,p.amount,p.amount*-1) as paid_amount, + Concat((case p.payment_mode when 1 then 'Cash' when 2 then 'Bank Card' else 'Other' end),if(p.credit_debit=0,'',' Return')) as Payment_type_str + from payment_history_medical p + where p.Customerof_type in (1,3) and Medical_invoice_id=$inv_id"; + $query = $this->db->query($sql); + $data['payment_history'] = $query->result(); + + $net_amount += $data['invoice_med_master'][0]->net_amount; + $paid_amount += $data['invoice_med_master'][0]->payment_received; + $balance_amount += $data['invoice_med_master'][0]->payment_balance; + + $content .= $this->load->view('Medical/Print/medical_bill_print_format_single', $data, TRUE); + + $content .= "
"; + } + + $content .= "Total Net Amount : " . $net_amount . " / "; + $content .= "Paid Amount : " . $paid_amount . " / "; + $content .= "Balance Amount : " . $balance_amount; + } else { + $content = "No Record found"; + } + + + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name = 'Report-MedicalBill_' . $inv_id . '_' . date('Ymdhis') . ".pdf"; + + $filepath = $file_name; + + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath, "I"); + } + + function invoice_item_log() + { + $this->load->view('Medical/Stock/invoice_item_log'); + } + + function invoice_item_log_data(){ + $opd_date_range=$this->input->post('opd_date_range'); + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + $sql="SELECT m.inv_med_code,m.inv_date,m.inv_name,m.log, + GROUP_CONCAT(DISTINCT CONCAT_WS('#',d.item_Name,d.qty,d.price,d.twdisc_amount,d.delete_time,d.delete_by) SEPARATOR ';' ) AS del_item_list, + GROUP_CONCAT(DISTINCT CONCAT_WS('#',p.credit_debit,p.amount,l.update_log) SEPARATOR ';') AS payment_log + FROM ((invoice_med_master m JOIN inv_med_item_delete d ON d.inv_med_id=m.id) + LEFT JOIN payment_history_medical p ON m.id=p.Medical_invoice_id) + Left JOIN paymentmedical_history_log l ON p.id=l.pay_id + WHERE DATE(d.delete_time) BETWEEN '".$minRange."' and '".$maxRange."' AND m.ipd_id=0 + GROUP BY m.id"; + + $query = $this->db->query($sql); + $data['Invoice_history_log']= $query->result(); + + //echo $sql; + $data['opd_date_range']=$opd_date_range; + + $this->load->view('Medical/Stock/invoice_item_log_data',$data); + } +} diff --git a/old_code_ci3/controllers/Mobile_app.php b/old_code_ci3/controllers/Mobile_app.php new file mode 100644 index 0000000..b2366f8 --- /dev/null +++ b/old_code_ci3/controllers/Mobile_app.php @@ -0,0 +1,384 @@ +load->database(); + $this->load->helper(array('cookie','url','language')); + + // Load form helper library + //$this->load->helper('form'); + + // Load form validation library + //$this->load->library('form_validation'); + + // Load session library + $this->load->library('session'); + + $this->load->helper('security'); + + } + + public function index() + { + $this->load->view('Mobile_app/index'); + } + + public function load_dash() + { + $session_set_value = $this->session->all_userdata(); + if (isset($session_set_value['remember_me']) && $session_set_value['remember_me'] == "1") { + $this->load->view('Mobile_app/dash_main'); + } else { + redirect('Mobile_app/select_doctor_login'); + } + } + + public function select_doctor_login() + { + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id + and s.med_spec_id =m.id + where d.active=1 group by d.id "; + $query = $this->db->query($sql); + + $data['doctor_data']= $query->result(); + + $this->load->view('Mobile_app/select_doctor',$data); + } + + public function login($doc_id=0) + { + // Retrieve session data + $session_set_value = $this->session->all_userdata(); + + $data['doc_id'] = $doc_id; + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=$doc_id group by d.id "; + $query = $this->db->query($sql); + $data['doctor_data_profile']= $query->result(); + + // Check for remember_me data in retrieved session data + if (isset($session_set_value['remember_me']) && $session_set_value['remember_me'] == "1") { + //$this->load->view('admin_page'); + $this->load->view('Mobile_app/dash_main',$data); + } else { + + // Check for validation + $this->form_validation->set_rules('password', 'Pin Number', 'trim|required|xss_clean'); + + if ($this->form_validation->run() == FALSE) { + //$this->load->view('login_form'); + $this->load->view('Mobile_app/login',$data); + } else { + $username = $doc_id; + $password = $this->input->post('password'); + + $sql = "SELECT * + FROM doctor_master + WHERE id=$username and login_pin='$password'"; + + $query = $this->db->query($sql); + $data_login= $query->result(); + + if (count($data_login)>0) { + $this->session->set_userdata('remember_me', TRUE); + + $sess_data = array( + 'p_fname'=> $data_login[0]->p_fname, + 'p_mname'=> $data_login[0]->p_mname, + 'doc_id' => $data_login[0]->id, + 'username' => $username, + 'password' => $password + ); + + $this->session->set_userdata('logged_in', $sess_data); + //$this->load->view('admin_page'); + + + + $data['user'] = 1; + $this->load->view('Mobile_app/dash_main',$data); + + } else { + $data['error_message'] = 'Invalid Pin'; + + $this->load->view('Mobile_app/login', $data); + } + } + } + } + + public function logout() + { + // Destroy session data + $this->session->sess_destroy(); + $data['message_display'] = 'Successfully Logout'; + redirect('Mobile_app/select_doctor_login'); + } + + + //Customer Search + function patient_index_all($day=-1,$doc_id=0) + { + $data['doc_id']=$doc_id; + $data['day']=$day; + + $data['_view'] = ''; + + $this->load->view('Mobile_app/patient_page',$data); + } + + function patient_index($day=0,$doc_id=0) + { + if($doc_id==0) + { + $where=""; + }else{ + $where=" and o.doc_id = ".$doc_id; + } + + if($day>=0){ + $where_date=" and date(o.opd_book_date) = DATE_ADD(CURDATE(),INTERVAL -".$day." DAY)"; + } + + $sql = "SELECT p.*,Date_Format(o.last_opdvisit_date,'%d-%m-%Y %H:%i') AS last_date_visit, + o.*, + if(date(o.opd_book_date)=curdate(),1,0) as opd_today + FROM (patient_master_exten p + JOIN opd_master o ON p.id=o.p_id) + WHERE 1=1 $where_date $where + Group by p.id + order by o.opd_id desc"; + + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $data['doc_id']=$doc_id; + $data['day']=$day; + + $data['sql']= $sql; + + $data['_view'] = 'Mobile_app/patient_search_v'; + + $this->load->view('Mobile_app/patient_page',$data); + } + + function patient_search() + { + $doc_id=$this->input->post('doc_id'); + $day=$this->input->post('day'); + $sdata=$this->input->post('data_search'); + + $where="1=1 "; + + if($doc_id==0) + { + $where.=""; + }else{ + $where.=" and o.doc_id = ".$doc_id; + } + + if($day>=0){ + $where_date=" and date(o.opd_book_date) = DATE_ADD(CURDATE(),INTERVAL -".$day." DAY)"; + }else{ + $where_date=""; + } + + $sdata = preg_replace('/[^A-Za-z0-9 _\-]/', '', trim($sdata)); + + if(is_numeric($sdata)) + { + $where.=" and (mphone1 = '".$sdata."' or udai='".$sdata."' or p_code like '%".$sdata."')" ; + }elseif (filter_var($sdata, FILTER_VALIDATE_EMAIL)) { + $where.=" email1 = '".$sdata."'" ; + }else{ + $where.=" and (p_fname like '%".$sdata."%' or + SUBSTRING_INDEX(p_fname,' ',1) sounds like '".$sdata."')"; + } + + $sql = "SELECT p.*,Date_Format(o.last_opdvisit_date,'%d-%m-%Y %H:%i') AS last_date_visit, + o.*, + if(date(o.opd_book_date)=curdate(),1,0) as opd_today + FROM (patient_master_exten p + JOIN opd_master o ON p.id=o.p_id) + WHERE ".$where." ".$where_date." + order by o.opd_id desc "; + + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $data['sql']= $sql; + + $this->load->view('Mobile_app/patient_search_v',$data); + + + + } + + function patient_index_opd() + { + if (isset($_POST['search'])){ + + $doc_id=$this->input->post('doc_id'); + $day=$this->input->post('day'); + $sdata=$this->input->post('search'); + + if($doc_id==0) + { + $where="1=1 "; + }else{ + $where=" o.doc_id = ".$doc_id; + } + + if($day>=0){ + $where_date=" and date(o.opd_book_date) = DATE_ADD(CURDATE(),INTERVAL -".$day." DAY)"; + }else{ + $where_date=" and date(o.opd_book_date) > DATE_ADD(CURDATE(),INTERVAL -180 DAY)"; + } + + $sdata = preg_replace('/[^A-Za-z0-9 _\-]/', '', trim($sdata)); + + if(is_numeric($sdata)) + { + $where.=" and (mphone1 = '".$sdata."' or udai='".$sdata."' or p_code like '%".$sdata."')" ; + }elseif (filter_var($sdata, FILTER_VALIDATE_EMAIL)) { + $where.=" and email1 = '".$sdata."'" ; + }else{ + $where.=" and (p_fname like '%".$sdata."%' or + SUBSTRING_INDEX(p_fname,' ',1) sounds like '".$sdata."')"; + } + + $sql = "SELECT p.*,Date_Format(p.last_visit,'%d-%m-%Y %H:%i') AS last_date_visit, + o.doc_name, + if(date(o.opd_book_date)=curdate(),1,0) as opd_today + FROM (patient_master_exten p + JOIN opd_master o ON p.id=o.p_id) + WHERE ".$where." ".$where_date." Group by p.id + order by o.opd_id desc "; + + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $data['sql']= $sql; + + $content=$this->load->view('Mobile_app/patient_search_v',$data,TRUE); + + echo $content; + echo $sql; + + } + } + + + function person_record($pno) + { + $sql="select * from patient_master_exten where id=".$pno; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date + from opd_master where p_id=".$pno; + $query = $this->db->query($sql); + $data['opd_List']= $query->result(); + + $sql="select m.id,m.invoice_code,Date_Format(m.inv_date,'%d-%m-%y') as str_inv_date,m.inv_name, + if(count(t.id)>0,group_concat(t.item_name SEPARATOR ' / '),'No-Item') as Item_List, m.net_amount,m.invoice_status + from invoice_master m left join invoice_item t on m.id=t.inv_master_id + where attach_type=0 and attach_id=".$pno." group by m.id order by m.id desc"; + $query = $this->db->query($sql); + $data['invoice_list']= $query->result(); + + $sql="select i.*,m.ins_company_name,m.opd_allowed,m.charge_cash + from hc_insurance_card i join hc_insurance m on i.insurance_id=m.id + where m.active=1 and i.p_id=".$pno; + $query = $this->db->query($sql); + $data['data_insurance_card']= $query->result(); + + $sql="select *,Date_Format(date_registration,'%d-%m-%Y') as str_date_registration from organization_case_master where status=0 and p_id=".$pno; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from file_upload_data where id=".$data['data'][0]->profile_file_id; + $query = $this->db->query($sql); + $file_data= $query->result(); + + $profile_file_path="/assets/images/no_image.jpg"; + + if(count($file_data)>0) + { + $pos=strpos($file_data[0]->full_path,'/uploads/',1) ; + $profile_file_path=substr($file_data[0]->full_path,$pos); + } + + $data['profile_file_path']=$profile_file_path; + + $sql="select * from file_upload_data where pid=".$pno." order by id desc"; + $query = $this->db->query($sql); + $data['opd_file_list']= $query->result(); + + $this->load->view('Mobile_app/patient_opd_profile',$data); + + } + + + public function show_profile_opd($p_id) + { + $data['p_id']=$p_id; + + $sql="select * from patient_master_exten where id=".$p_id; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select o.* from opd_master o where o.p_id=$p_id order by o.opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select o.* from opd_master o where o.p_id=$p_id and date(o.apointment_date)=curdate()"; + $query = $this->db->query($sql); + $data['opd_master_current']= $query->result(); + + $this->load->view('Mobile_app/person_file_show',$data); + } + + public function take_opd_picture($opd_id,$pno) + { + $data['opd_id']=$opd_id; + $data['pno']=$pno; + + $sql="select * from patient_master_exten where id=".$pno; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select o.* from opd_master o where o.opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + + $this->load->view('Mobile_app/opd_scan',$data); + } + + //IPD Panel + + public function ipd_panel($doc_id=0) + { + $sql="select * from v_ipd_list + where FIND_IN_SET($doc_id,doc_list)>0 + and (ipd_status=0 or (ipd_status=1 and discharge_date>date_add(sysdate(),interval -15 day)))" ; + $query = $this->db->query($sql); + $data['ipd_data']= $query->result(); + + $sql="select * from v_ipd_list + where (ipd_status=0 or (ipd_status=1 and discharge_date>date_add(sysdate(),interval -15 day)))" ; + $query = $this->db->query($sql); + $data['ipd_data_all']= $query->result(); + + $this->load->view('Mobile_app/ipd_panel',$data); + } + +} + diff --git a/old_code_ci3/controllers/OcasePathLap.php b/old_code_ci3/controllers/OcasePathLap.php new file mode 100644 index 0000000..6d5fb69 --- /dev/null +++ b/old_code_ci3/controllers/OcasePathLap.php @@ -0,0 +1,650 @@ +input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('invoice_M'); + $this->load->model('Payment_M'); + + $sql="select * from invoice_master where id='".$this->input->post('lab_invoice_id')."'"; + $query = $this->db->query($sql); + $inv_master= $query->result(); + + $invoice_id=$this->input->post('lab_invoice_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $showcontent1='
+
+ Print +
+
+ Payment Method by : '; + + $showcontent2='
'; + + $pay_remark=''; + + if($inv_master[0]->discount_amount>0) + { + $pay_remark='Dis.Amt.:'.$inv_master[0]->discount_desc.' /Amount: '. $inv_master[0]->discount_amount.'/Update:'.$inv_master[0]->disc_update_by; + } + + $amountpaid=$this->input->post('input_amount_paid'); + $amountbalanace=0.00; + + if($amountpaid < $inv_master[0]->net_amount )-$amountpaid; + { + $amountbalanace=$inv_master[0]->net_amount; + } + + if($this->input->post('mode')==1) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'2', + 'payof_id'=>$invoice_id, + 'payof_code'=>$inv_master[0]->invoice_code, + 'credit_debit'=>'0', + 'amount'=>$amountpaid, + 'payment_date'=>date('d/m/Y H:m:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']' + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + + 'payment_mode'=> '1', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_mode_desc'=>'Cash', + 'payment_id'=>$insert_id, + 'confirm_invoice'=>date('d/m/Y H:m:s'), + 'prepared_by'=>$user_name.'['.$user_id.']' + ); + + $this->invoice_M->update( $data,$invoice_id); + + $status='CASH'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==2) + { + $FormRules = array( + array( + 'field' => 'input_card_mac', + 'label' => 'Card Bank Name', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + array( + 'field' => 'input_card_digit', + 'label' => 'Card Last 4 Digit ', + 'rules' => 'required|min_length[4]|max_length[4]' + ), + array( + 'field' => 'input_card_bank', + 'label' => 'Bank Name ', + 'rules' => 'required|min_length[1]|max_length[50]' + ), + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[3]|max_length[15]' + ) + ); + + $this->form_validation->set_rules($FormRules); + if ($this->form_validation->run() == TRUE) + { + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'2', + 'payof_id'=>$invoice_id, + 'payof_code'=>$inv_master[0]->invoice_code, + 'credit_debit'=>'0', + 'amount'=>$amountpaid, + 'payment_date'=>date('d/m/Y H:m:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'card_bank'=>$this->input->post('input_card_mac'), + 'cust_card'=>$this->input->post('input_card_bank'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'card_tran_id'=>$this->input->post('input_card_tran') + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '2', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_mode_desc'=>'Bank Card', + 'payment_id'=>$insert_id, + 'confirm_invoice'=>date('d/m/Y H:m:s'), + 'card_bank'=>$this->input->post('input_card_mac'), + 'cust_card'=>$this->input->post('input_card_bank'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'prepared_by'=>$user_name.'['.$user_id.']' + ); + $this->invoice_M->update( $data,$invoice_id); + + $status='Bank Card'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + if($this->input->post('mode')==3) + { + $data = array( + + 'payment_mode'=> '3', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_mode_desc'=>'IPD Credit', + 'confirm_invoice'=>date('d/m/Y H:m:s'), + 'ipd_id'=>$this->input->post('ipd_id'), + 'prepared_by'=>$user_name.'['.$user_id.']' + + ); + + $this->invoice_M->update( $data,$invoice_id); + + $status='IPD Credit'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==4) + { + $data = array( + + 'payment_mode'=> '3', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_mode_desc'=>'Org.Case Credit', + 'confirm_invoice'=>date('d/m/Y H:m:s'), + 'insurance_case_id'=>$this->input->post('case_id'), + 'prepared_by'=>$user_name.'['.$user_id.']' + + ); + + $this->invoice_M->update( $data,$invoice_id); + + $status='Org. Credit'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==0) + { + + } + } + + public function edit_org_invoice($invoice_id) + { + $sql="select * from hc_item_type"; + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $sql="select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from invoice_master where id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $ins_comp_id=$data['invoiceMaster'][0]->insurance_id; + + if($ins_comp_id<2) + { + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=1"; + }else{ + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc from v_hc_items_with_insurance + where itype=1 and hc_insurance_id in (0,".$ins_comp_id.")"; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + $this->load->view('Invoice/Organization_Invoice_PathLab',$data); + } + + public function addPathTest($pno,$ins_id=0) + { + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select * from hc_item_type"; + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $ins_comp_id=0; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $ins_comp_id=$data['hc_insurance_card'][0]->insurance_id; + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + if($ins_comp_id<2) + { + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=1 order by idesc "; + }else{ + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc from v_hc_items_with_insurance + where itype=1 and hc_insurance_id in (0,".$ins_comp_id.") order by idesc "; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + $this->load->model('invoice_M'); + + $sql="select count(*) as no_invoice from invoice_master where invoice_status=0 and insurance_card_id>0 and attach_id=".$pno; + $query = $this->db->query($sql); + $data['chk_draft_invoice']= $query->result(); + + if($data['chk_draft_invoice'][0]->no_invoice<1) + { + $data['insert_invoice'] = array( + 'attach_type' => '0', + 'attach_id' => $pno, + 'inv_date' => str_to_MysqlDate(date('d/m/Y')), + 'inv_name' => $data['person_info'][0]->p_fname, + 'insurance_id' => $ins_comp_id, + 'insurance_card_id' => $ins_id, + 'insurance_cash' => $data['insurance'][0]->path_cash, + 'insurance_credit' => $data['insurance'][0]->path_credit, + 'inv_a_code' => $data['person_info'][0]->p_code + ); + $inser_id=$this->invoice_M->create_invoice( $data['insert_invoice']); + }else{ + $sql="select id from invoice_master where invoice_status=0 and attach_id=".$pno; + $query = $this->db->query($sql); + $data['invoice_id']= $query->result(); + + $inser_id=$data['invoice_id'][0]->id; + } + + if($inser_id) + { + $sql="select * from invoice_master where id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + } + + $this->load->view('Invoice/Organization_Invoice_PathLab',$data); + } + + public function list_pathtest_bytype() + { + $tid=$this->input->post('itype_idv'); + $ins_id=$this->input->post('ins_id'); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=".$tid; + + if($ins_id>1) + { + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc from v_hc_items_with_insurance + where itype=".$tid." and hc_insurance_id in (0,".$ins_id.") order by idesc"; + + }else{ + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=".$tid." order by idesc"; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + echo '
+ '; + + echo '
'; + + + } + + public function get_echs_id() + { + $itype_name_id_srno=$this->input->post('input_charge_code'); + $tid=$this->input->post('itype_idv'); + + $sql="select * from hc_items where itype=".$tid." and echs_sr_no='".$itype_name_id_srno."'"; + //echo $sql; + $query = $this->db->query($sql); + $data['echs_data']= $query->result(); + + if($query->num_rows()>0) + { + echo $data['echs_data'][0]->id; + }else{ + echo '0'; + } + } + + public function update_refer_doc() + { + $invoice_id=$this->input->post('inv_id'); + $doc_id=$this->input->post('doc_id'); + + if($doc_id<1) + { + $refername=$this->input->post('refername'); + }else{ + $sql="select * from doctor_master where id=".$doc_id; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + $refername=$data['doc_master'][0]->p_fname; + } + + $dataupdate = array( + 'refer_by_id' => $doc_id, + 'refer_by_other' => $refername + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + } + + + public function showinvoice($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $ins_comp_id=$data['invoice_master'][0]->insurance_id; + $ins_id=$data['invoice_master'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master where status=0 and p_id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $discount_amount=$data['invoice_master'][0]->discount_amount ; + $total_amount=$data['invoiceGtotal'][0]->Gtotal; + $net_amount=$total_amount-$discount_amount; + $paid_amount=$data['payment_history'][0]->paid_amount; + $balance_amount=$net_amount-$paid_amount; + + if($balance_amount>0) + { + $payment_part=1; + }else{ + $payment_part=0; + } + + $dataupdate = array( + 'total_amount' => $total_amount, + 'net_amount' => $net_amount, + 'payment_part_received' => $paid_amount, + 'payment_part_balance' => $balance_amount, + 'payment_part' => $payment_part + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $this->load->view('Invoice/Organization_Invoice_PathLab_final_V',$data); + } + + public function showitem($type) + { + $this->load->model('invoice_M'); + + if($type>0) + { + $ins_id=$this->input->post('ins_id'); + + $sql="select * from hc_items where id=".$this->input->post('itype_name_id'); + if($ins_id>1) + { + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc,amount1 from v_hc_items_with_insurance + where id=".$this->input->post('itype_name_id')." and hc_insurance_id in (0,".$ins_id.")"; + + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount1; + + $amount_value=$this->input->post('input_qty')*$item_rate; + + } + else + { + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc,amount from hc_items where id=".$this->input->post('itype_name_id'); + + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount; + + $amount_value=$this->input->post('input_qty')*$item_rate; + } + + $data['insert_invoice_item'] = array( + 'inv_master_id' => $this->input->post('lab_invoice_id'), + 'item_type' => $this->input->post('itype_idv'), + 'item_id' => $this->input->post('itype_name_id'), + 'item_name' => $data['itemlist'][0]->sdesc, + 'item_rate' => $item_rate, + 'item_added_date' => str_to_MysqlDate(date('d/m/Y')), + 'item_qty' => $this->input->post('input_qty'), + 'item_amount' => $amount_value + ); + + $inser_id=$this->invoice_M->addinvoiceitem( $data['insert_invoice_item']); + + }else{ + $this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + echo ' + + + + + + + + + '; + + $srno=0; + + foreach($data['invoiceDetails'] as $row) + { + $srno=$srno+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + } + + echo ''; + + echo ' + + + + + + + + +
#Item GroupCharge NameRateQtyAmount
'.$srno.''.$row->desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Gross Total'.$data['invoiceGtotal'][0]->Gtotal.'
'; + } + + public function invoice_print($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $ins_comp_id=$data['invoice_master'][0]->insurance_id; + $ins_id=$data['invoice_master'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from organization_case_master where id=".$data['invoice_master'][0]->insurance_case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select *,(case payment_mode when 1 Then 'cash' when 2 then 'Bank Card' when 3 then 'Org Credit' else 'Pending' end) as Payment_type_str from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $this->load->view('Invoice/Organization_invoice_print_v',$data); + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Ocasemaster.php b/old_code_ci3/controllers/Ocasemaster.php new file mode 100644 index 0000000..477e4bf --- /dev/null +++ b/old_code_ci3/controllers/Ocasemaster.php @@ -0,0 +1,672 @@ +db->query($sql); + $data['or_case_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['or_case_master'][0]->p_id."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select * from hc_item_type"; + + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id>0,'Ins.','Cash')) as sdesc from v_hc_items_with_insurance where itype=1 and hc_insurance_id in (0,".$data['or_case_master'][0]->insurance_id.")"; + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + $this->load->model('invoice_M'); + + $sql="select count(*) as no_invoice from invoice_master where invoice_status=0 and case_id=".$caseid; + $query = $this->db->query($sql); + $data['chk_draft_invoice']= $query->result(); + + if($data['chk_draft_invoice'][0]->no_invoice<1) + { + $data['insert_invoice'] = array( + 'attach_type' => '0', + 'attach_id' => $data['or_case_master'][0]->p_id, + 'case_id' => $caseid, + 'inv_date' => str_to_MysqlDate(date('d/m/Y')), + 'inv_name' => $data['person_info'][0]->p_fname, + 'inv_a_code' => $data['person_info'][0]->p_code + ); + $inser_id=$this->invoice_M->create_invoice( $data['insert_invoice']); + }else{ + $sql="select id from invoice_master where invoice_status=0 and attach_id=".$data['or_case_master'][0]->p_id; + $query = $this->db->query($sql); + $data['invoice_id']= $query->result(); + + $inser_id=$data['invoice_id'][0]->id; + } + + if($inser_id) + { + $sql="select * from invoice_master where id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + } + + $this->load->view('Invoice/Organization_Invoice_PathLab',$data); + } + + public function create() { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_mphone1', + 'label' => 'Phone Number', + 'rules' => 'required|min_length[10]|max_length[30]' + ), + array( + 'field' => 'input_name', + 'label' => 'Name', + 'rules' => 'required|min_length[2]|max_length[30]' + ), + array( + 'field' => 'input_insurance_id', + 'label' => 'Insurance No', + 'rules' => 'required|min_length[2]|max_length[30]' + ), + array( + 'field' => 'input_card_holder_name', + 'label' => 'Insurance Card Holder Name', + 'rules' => 'required|min_length[2]|max_length[50]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $ins_id=$this->input->post('Insurance_id'); + $case_type=$this->input->post('case_type'); + + $sql="select * from hc_insurance where id=".$ins_id; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $ins_id_name = $data['data_insurance'][0]->ins_company_name; + + $this->load->model('Ocasemaster_M'); + $data = array( + 'p_phone_number' => $this->input->post('input_mphone1'), + 'p_name' => $this->input->post('input_name'), + 'p_gender' => $this->input->post('optionsRadios_gender'), + 'date_registration' => str_to_MysqlDate($this->input->post('datepicker_dob')), + 'p_id' => $this->input->post('p_id'), + 'case_type' => $this->input->post('case_type'), + 'insurance_card_id'=>$this->input->post('inc_card_id'), + 'insurance_no' => $this->input->post('input_insurance_id'), + 'insurance_no_1' => $this->input->post('input_insurance_no_1'), + 'insurance_no_2' => $this->input->post('input_insurance_no_2'), + 'insurance_no_3' => $this->input->post('input_insurance_no_3'), + 'insurance_card_name' => $this->input->post('input_card_holder_name'), + 'insurance_id' => $this->input->post('Insurance_id'), + 'insurance_company_name' => $ins_id_name + ); + + $sql="select * from organization_case_master + where status=0 and case_type=$case_type and p_id=".$this->input->post('p_id'); + $query = $this->db->query($sql); + $chk_data= $query->result(); + + if(count($chk_data)>0) + { + $inser_id=$chk_data[0]->id; + + }else{ + $inser_id=$this->Ocasemaster_M->insert($data); + } + + if($case_type==1) + { + $sql="select * from ipd_master + where case_id=0 and ipd_status=0 and p_id=".$this->input->post('p_id'); + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + if(count($ipd_master)>0) + { + $this->load->model('Ipd_M'); + $update_ipd=array( + 'case_id'=>$inser_id + ); + $this->Ipd_M->update($update_ipd,$ipd_master[0]->id); + + $update_org=array( + 'ipd_id'=>$ipd_master[0]->id + ); + $this->Ocasemaster_M->update($update_org,$inser_id); + } + } + + $rvar=array( + 'insertid' =>$inser_id, + 'p_id'=> $this->input->post('p_id'), + 'ins_id'=>$ins_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + else + { + $send_error=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function load($caseid) + { + $sql="select * from organization_case_master where id='".$caseid."' "; + $query = $this->db->query($sql); + $data['or_case_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['or_case_master'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select * from hc_insurance"; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $this->load->view('Invoice/Case_Form_profile_V',$data); + } + + public function newcase($p_no,$ins_id,$case_type=0) + { + $sql="select * from hc_insurance where id=".$ins_id; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $sql="select * from hc_insurance_card where p_id=".$p_no." and insurance_id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $ins_comp_id=$data['hc_insurance_card'][0]->insurance_id; + + $sql="select * from organization_case_master + where case_type=$case_type and p_id='".$p_no."' and status=0 "; + $query = $this->db->query($sql); + $data['org_case_master']= $query->result(); + + if($query->num_rows()<1) + { + $new_case=1; + }else{ + $new_case=0; + } + + $data['case_type']=$case_type; + + $this->db->where('id', $p_no); + $this->db->from('patient_master'); + $query = $this->db->get(); + $data['data']= $query->result(); + + $sql="select * from hc_insurance "; + $query = $this->db->query($sql); + $data['insurance_list']= $query->result(); + + + if($new_case==1) + { + $this->load->view('Invoice/Case_Form_V',$data); + } + else{ + $this->load->view('Invoice/Case_Form_profile_V',$data); + } + + } + + + + public function open_case($org_ID,$case_type=0) + { + $sql="select * from organization_case_master + where case_type=$case_type and id= $org_ID"; + $query = $this->db->query($sql); + $data['org_case_master']= $query->result(); + + $ins_id_org=$data['org_case_master'][0]->insurance_id; + $p_no=$data['org_case_master'][0]->p_id; + + $sql="select * from hc_insurance_card where p_id=".$p_no." order by id desc"; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $ins_id=$data['hc_insurance_card'][0]->insurance_id; + + $sql="select * from hc_insurance where id=".$ins_id; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + + $sql="select * from hc_insurance "; + $query = $this->db->query($sql); + $data['insurance_list']= $query->result(); + + $data['ipd_id']=0; + $data['case_type']=$case_type; + + if($case_type==1) + { + $sql="select * from ipd_master where case_id=$org_ID"; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + if(count($ipd_master)>0) + { + $data['ipd_id']=$ipd_master[0]->id; + } + } + + $this->db->where('id', $p_no); + $this->db->from('patient_master'); + $query = $this->db->get(); + $data['data']= $query->result(); + + $this->load->view('Invoice/Case_Form_profile_V',$data); + + } + + public function update() { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_mphone1', + 'label' => 'Phone Number', + 'rules' => 'required|min_length[10]|max_length[30]' + ), + array( + 'field' => 'input_name', + 'label' => 'Name', + 'rules' => 'required|min_length[2]|max_length[30]' + ), + array( + 'field' => 'input_insurance_id', + 'label' => 'Insurance No', + 'rules' => 'required|min_length[2]|max_length[30]' + ), + array( + 'field' => 'datepicker_dob', + 'label' => 'Date of Registration', + 'rules' => 'required|min_length[2]|max_length[30]' + ), + array( + 'field' => 'input_card_holder_name', + 'label' => 'Insurance Card Holder Name', + 'rules' => 'required|min_length[2]|max_length[50]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $ins_id=$this->input->post('Insurance_id'); + $p_id=$this->input->post('patient_id'); + $case_type=$this->input->post('case_type'); + $case_id=$this->input->post('c_id'); + + $sql="select * from hc_insurance where id=".$ins_id; + $query = $this->db->query($sql); + $data['data_insurance']= $query->result(); + + $ins_id_name = $data['data_insurance'][0]->ins_company_name; + + $sql="select * from organization_case_master where id=$case_id"; + $query = $this->db->query($sql); + $org_case_master= $query->result(); + + $this->load->model('Ocasemaster_M'); + $data = array( + 'p_phone_number' => $this->input->post('input_mphone1'), + 'p_name' => $this->input->post('input_name'), + 'p_gender' => $this->input->post('optionsRadios_gender'), + 'date_registration' => str_to_MysqlDate($this->input->post('datepicker_dob')), + 'remark' => $this->input->post('remark'), + 'insurance_no' => $this->input->post('input_insurance_id'), + 'insurance_no_1' => $this->input->post('input_insurance_no_1'), + 'insurance_no_2' => $this->input->post('input_insurance_no_2'), + 'insurance_no_3' => $this->input->post('input_insurance_no_3'), + 'insurance_card_name' => $this->input->post('input_card_holder_name'), + 'insurance_id' => $ins_id, + 'insurance_company_name' => $ins_id_name + ); + + $inser_id=$this->Ocasemaster_M->update($data,$case_id); + + if($case_type==0) + { + $this->db->query("CALL p_org_update($case_id)"); + } + + if($case_type==1 && $org_case_master[0]->ipd_id==0) + { + $sql="select * from ipd_master where ipd_status=0 and case_id=0 and p_id=".$p_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + if(count($ipd_master)>0) + { + $this->load->model('Ipd_M'); + $update_ipd=array( + 'case_id'=>$this->input->post('c_id') + ); + $this->Ipd_M->update($update_ipd,$ipd_master[0]->id); + + $update_org=array( + 'ipd_id'=>$ipd_master[0]->id + ); + $this->Ocasemaster_M->update($update_org,$inser_id); + + $update_ins_card=array( + 'insurance_id'=>$ins_id, + 'insurance_id'=>$ins_id_name, + ); + $this->Ocasemaster_M->update($update_org,$inser_id); + } + } + + + $rvar=array( + 'update' =>1, + 'showcontent'=> Show_Alert('success','Saved','Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + else + { + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function confirm_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('invoice_M'); + + $showcontent1='
+
+ Print +
+
+ Payment Method by : '; + + $showcontent2='
'; + + if($this->input->post('mode')==1) + { + + $data = array( + + 'payment_mode'=> '1', + 'payment_status'=>'1' + + ); + + $this->invoice_M->update( $data,$this->input->post('oid')); + + $status='CASH'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==2) + { + $FormRules = array( + array( + 'field' => 'input_card_mac', + 'label' => 'Card Bank Name', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + array( + 'field' => 'input_card_digit', + 'label' => 'Card Last 4 Digit ', + 'rules' => 'required|min_length[4]|max_length[4]' + ), + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[3]|max_length[15]' + ) + ); + $this->form_validation->set_rules($FormRules); + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'payment_mode'=> '2', + 'payment_status'=>'1', + 'card_bank'=>$this->input->post('input_card_mac'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'card_tran_id'=>$this->input->post('input_card_tran') + ); + $this->Opd_M->update( $data,$this->input->post('oid')); + + $status='Bank Card'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + if($this->input->post('mode')==3) + { + $data = array( + + 'payment_mode'=> '3', + 'payment_status'=>'1', + 'ech_clam_id'=>$this->input->post('input_claim_id'), + + ); + + $this->invoice_M->update( $data,$this->input->post('oid')); + + $status='ECHS Credit'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==0) + { + + } + } + + public function list_pathtest_bytype() + { + $tid=$this->input->post('itype_idv'); + $insid=$this->input->post('insurance_id'); + + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id>0,'Ins.','Cash')) as sdesc from v_hc_items_with_insurance where itype='".$tid."' and hc_insurance_id in (0,".$insid.")"; + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + echo '
+ +
'; + + } + + public function showinvoice($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $this->load->view('Invoice_PathLab_final_V',$data); + } + + public function showitem($type) + { + $this->load->model('invoice_M'); + + if($type>0) + { + $sql="select * from v_hc_items_with_insurance where id=".$this->input->post('itype_name_id'); + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $amount_value=$this->input->post('input_qty')*$data['itemlist'][0]->amount; + $amount_value2=$this->input->post('input_qty')*$data['itemlist'][0]->amount1; + + $data['insert_invoice_item'] = array( + 'inv_master_id' => $this->input->post('lab_invoice_id'), + 'item_type' => $this->input->post('itype_idv'), + 'item_id' => $this->input->post('itype_name_id'), + 'item_name' => $data['itemlist'][0]->idesc, + 'item_rate' => $data['itemlist'][0]->amount, + 'item_added_date' => str_to_MysqlDate(date('d/m/Y')), + 'item_qty' => $this->input->post('input_qty'), + 'item_amount' => $amount_value, + 'item_amount1' => $amount_value2 + ); + + $inser_id=$this->invoice_M->addinvoiceitem( $data['insert_invoice_item']); + + }else{ + + $this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(if(item_amount1>0,item_amount1,item_amount)) as Gtotal from invoice_item where inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + echo ' + + + + + + + + + + '; + + $srno=1; + + foreach($data['invoiceDetails'] as $row) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + + echo ' + + + + + + + + +
#TypeTest NameRateQtyCash AmtINS Amount
'.$srno.''.$row->desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.''.$row->item_amount1.'
#Gross Total'.$data['invoiceGtotal'][0]->Gtotal.'
'; + + } + + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Opd.php b/old_code_ci3/controllers/Opd.php new file mode 100644 index 0000000..4816383 --- /dev/null +++ b/old_code_ci3/controllers/Opd.php @@ -0,0 +1,2186 @@ +load->library("Pdf"); + } + + public function addopd($pno,$org_case_id=0) + { + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id "; + $query = $this->db->query($sql); + $data['doc_spec_l']= $query->result(); + + $data['org_case_id']=$org_case_id; + + if($org_case_id>0) + { + $sql="SELECT * + from organization_case_master + where id= $org_case_id"; + $query = $this->db->query($sql); + $data['org_case_master']= $query->result(); + } + + $this->load->view('opd_appointment_V',$data); + } + + + + public function showfee() + { + $doc_id=$this->input->post('doc_id'); + $p_id=$this->input->post('pid'); + $org_case_id=$this->input->post('org_case_id'); + + $sql="select * + from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + $no_opd_days=5-1; + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName,if(d.gender=1,'Male','Female') as xGender + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=".$doc_id." group by d.id "; + $query = $this->db->query($sql); + $doc_info= $query->result(); + + $sql="SELECT * from opd_master where p_id=".$p_id." and doc_id=".$doc_id." + and apointment_date >= date_add(curdate(),interval -$no_opd_days day) and opd_fee_type<>3"; + $query = $this->db->query($sql); + $opd_running= $query->result(); + + $sql="SELECT * from opd_master where p_id=".$p_id." "; + $query = $this->db->query($sql); + $opd_old= $query->result(); + + $fee_type_list="4,0"; + + $fee_type_select=1; + + if(count($opd_old)>0) + { + if(count($opd_running)>0) + { + $fee_type_select=3; + $fee_type_list.=",3"; + }else{ + $fee_type_select=2; + $fee_type_list.=",2"; + } + + }else{ + $fee_type_select=1; + $fee_type_list.=",1"; + } + + $content=''; + + $content.= '

Doctor Name : '.$doc_info[0]->p_fname.' / Specialization: '.$doc_info[0]->SpecName.' / + Gender : '.$doc_info[0]->xGender.'

'; + $content.= ''; + + + $sql="SELECT d.*,if(d.doc_fee_desc='',t.fee_type,d.doc_fee_desc) AS fee_desc + FROM doc_opd_fee d JOIN doc_fee_type t ON d.doc_fee_type=t.id + WHERE doc_id=".$doc_id." and t.id in (".$fee_type_list.")"; + + $query = $this->db->query($sql); + $data['doc_fee_a']= $query->result(); + + $sql="SELECT d.*,if(d.doc_fee_desc='',t.fee_type,d.doc_fee_desc) AS fee_desc + FROM doc_opd_fee d JOIN doc_fee_type t ON d.doc_fee_type=t.id + WHERE doc_id=".$doc_id." and t.id not in (".$fee_type_list.")"; + + $query = $this->db->query($sql); + $data['doc_fee_b']= $query->result(); + + + + $checked=''; + + foreach($data['doc_fee_a'] as $row) + { + if($row->id==$fee_type_select) + { + $checked='checked'; + } + + $content.= '
'; + } + + $content.="
"; + + $other_content=''; + + foreach($data['doc_fee_b'] as $row) + { + if($row->id==$fee_type_select) + { + $checked='checked'; + } + + $other_content.= '
'; + } + + $content.='
'; + $content.='
+ +
+
+ '.$other_content.' +
+
+
+
'; + + $rvar=array( + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'content'=>$content + ); + + $encode_data = json_encode($rvar); + + echo $encode_data ; + + } + + public function invoice($opdid) + { + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + (case payment_status when 1 Then 'cash' when 2 then 'Bank Card' when 3 then 'ECHS Credit' else 'Pending' end) as Payment_type_str + from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age from patient_master where id='".$data['opd_master'][0]->p_id."' "; + + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from organization_case_master + where status=0 and case_type=0 and p_id=".$data['patient_master'][0]->id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from hc_insurance where id=".$data['opd_master'][0]->insurance_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=1 and refund_type_id=".$opdid; + $query = $this->db->query($sql); + $data['refund_order']= $query->result(); + + if(count($data['refund_order'])>0) + { + $data['refund_status']=1; // Refund Pending + }else{ + $data['refund_status']=0 ; //No Pending + } + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as paid_amount from payment_history where payof_type=1 and payof_id=".$opdid; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $data['paid_amount']=0; + + if($data['payment_history'][0]->paid_amount=='' || $data['payment_history'][0]->paid_amount==0 ) + { + $data['paid_amount']=0; + }else{ + $data['paid_amount']=$data['payment_history'][0]->paid_amount; + } + + $opd_fee_gross_amount=$data['opd_master'][0]->opd_fee_amount; + + if($data['opd_master'][0]->payment_mode==4) + { + $data['pending_amount']=0; + }else{ + $data['pending_amount']=$opd_fee_gross_amount-$data['paid_amount']; + } + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id "; + $query = $this->db->query($sql); + $data['doc_spec_l']= $query->result(); + + $sql="select s.id,s.pay_type,m.bank_name + From hospital_bank m join hospital_bank_payment_source s on m.id=s.bank_id"; + $query = $this->db->query($sql); + $data['bank_data']= $query->result(); + + $this->load->view('opd_invoice_V',$data); + + } + + public function invoice_print($opdid) + { + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + (case payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str + from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$data['opd_master'][0]->apointment_date."') AS age from patient_master where id='".$data['opd_master'][0]->p_id."' "; + + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from hc_insurance where id=".$data['opd_master'][0]->insurance_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + if($data['opd_master'][0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$data['opd_master'][0]->insurance_case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + } + + $this->load->view('invoice_print_v',$data); + } + + + + public function opd_lettre_print($opdid) + { + $sql="Select * from opd_master where opd_id=$opdid"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $doc_id=0; + $no_opd_days=5-1; + + if(count($opd_master)>0){ + + $doc_id=$opd_master[0]->doc_id; + + $sql="select * + from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + } + + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date, + (case payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str + from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$data['opd_master'][0]->apointment_date."') AS age from patient_master where id='".$data['opd_master'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select *,date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date from opd_master + where p_id=".$data['opd_master'][0]->p_id." and opd_id < ".$opdid." + order by opd_id desc limit 1"; + $query = $this->db->query($sql); + $data['old_opd']= $query->result(); + + $sql="select * from hc_insurance where id=".$data['opd_master'][0]->insurance_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + if($data['opd_master'][0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$data['opd_master'][0]->insurance_case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + } + + $this->load->view('opd_letter_head',$data); + } + + + public function confirm_opd() + { + $this->load->model('Opd_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.' '. $user->last_name.'['.date('d-m-Y H:i:s').']'; + + $sql="select * from patient_master where id=".$this->input->post('pid'); + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName,if(d.gender=1,'Male','Female') as xGender + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=".$this->input->post('doc_id')." group by d.id "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select * from doc_opd_fee where id=".$this->input->post('fee_id'); + $query = $this->db->query($sql); + $data['doc_fee']= $query->result(); + + $sql="select * from opd_master where p_id=".$this->input->post('pid')." order by opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $last_Vist_date=''; + + if(count($data['opd_master'])>0) + { + $last_Vist_date=$data['opd_master'][0]->apointment_date; + } + + $opd_fee_amount=$data['doc_fee'][0]->amount; + $opd_fee_desc=$data['doc_fee'][0]->doc_fee_desc; + $echs_credit=0; + + $doc_id=$this->input->post('doc_id'); + + $data['insert'] = array( + 'p_id' => $this->input->post('pid'), + 'P_name' => strtoupper($data['person_info'][0]->p_fname), + 'doc_id' => $this->input->post('doc_id'), + 'insurance_id' => '0', + 'opd_fee_id' => $this->input->post('fee_id'), + 'opd_fee_amount' => $opd_fee_amount, + 'opd_fee_gross_amount' => $opd_fee_amount, + 'opd_fee_desc' => $opd_fee_desc, + 'doc_name' => $data['doc_info'][0]->p_fname, + 'opd_fee_type' =>$data['doc_fee'][0]->doc_fee_type, + 'apointment_date' =>str_to_MysqlDate($this->input->post('datepicker_appointment')), + 'doc_spec' => $data['doc_info'][0]->SpecName, + 'prepared_by' => $user_name_info, + ); + + $data['patient_master'] = array( + 'last_visit' => str_to_MysqlDate($this->input->post('datepicker_appointment')), + ); + + if(count($data['opd_master'])>0) + { + $data['insert']=array_merge($data['insert'],array('last_opdvisit_date'=>$data['opd_master'][0]->apointment_date)); + } + + $inser_id=$this->Opd_M->insert( $data['insert']); + + if($inser_id>0) + { + $this->load->model('Patient_M'); + $this->Patient_M->update($data['patient_master'],$this->input->post('pid')); + } + + $rvar=array( + 'insertid' =>$inser_id, + 'error_text'=>'OPD Register', + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function confirm_payment() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Opd_M'); + $this->load->model('Payment_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name.'['.date('d-m-Y H:i:s').']'; + + $submit_page=$this->input->post('spid'); + $oid=$this->input->post('oid'); + + $sql="select * from opd_master where opd_id='".$oid."'"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select COALESCE(SUM(if(credit_debit=0,amount,amount*-1)),0) AS opd_pay + from payment_history where payof_id='$oid' and payof_type=1"; + $query = $this->db->query($sql); + $chk_payment= $query->result(); + + $pending_amt=$opd_master[0]->opd_fee_amount-$chk_payment[0]->opd_pay; + + $pay_remark=''; + if($opd_master[0]->opd_discount>0) + { + $pay_remark='Dis.Amt.:'.$opd_master[0]->opd_disc_remark.' /Amount: '. $opd_master[0]->opd_discount.'/Update:'.$opd_master[0]->opd_disc_update_by; + } + + if($this->input->post('mode')==0) + { + $paydata = array( + 'payment_mode'=> '0', + 'payof_type'=>'1', + 'payof_id'=>$this->input->post('oid'), + 'payof_code'=>$opd_master[0]->opd_code, + 'credit_debit'=>'0', + 'amount'=>$opd_master[0]->opd_fee_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name_info.' ['.$user_id.']', + 'update_by_id'=>$user_id, + 'insert_code'=>$submit_page + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '0', + 'payment_status'=>'1', + 'payment_mode_desc'=>'No Cost', + 'payment_id'=>$insert_id, + 'confirm_pay_opd'=>date('Y-m-d H:i:s'), + 'prepared_by_id'=>$user_id + ); + + $this->Opd_M->update( $data,$this->input->post('oid')); + + $status='Zero Cost'; + + + $rvar=array( + 'update' =>1, + 'showcontent'=>$status, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==1 && $pending_amt>0) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'1', + 'payof_id'=>$this->input->post('oid'), + 'payof_code'=>$opd_master[0]->opd_code, + 'credit_debit'=>'0', + 'amount'=>$opd_master[0]->opd_fee_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name_info.' ['.$user_id.']', + 'update_by_id'=>$user_id, + 'insert_code'=>$submit_page + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '1', + 'payment_status'=>'1', + 'payment_mode_desc'=>'Cash', + 'payment_id'=>$insert_id, + 'confirm_pay_opd'=>date('Y-m-d H:i:s'), + 'prepared_by_id'=>$user_id + ); + + $this->Opd_M->update( $data,$this->input->post('oid')); + + $status='CASH'; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$status, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==2 && $pending_amt>0 ) + { + $FormRules = array( + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[3]|max_length[15]' + ) + ); + + $this->form_validation->set_rules($FormRules); + if ($this->form_validation->run() == TRUE) + { + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'1', + 'payof_id'=>$this->input->post('oid'), + 'payof_code'=>$opd_master[0]->opd_code, + 'credit_debit'=>'0', + 'amount'=>$opd_master[0]->opd_fee_amount, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name_info.' ['.$user_id.']', + 'pay_bank_id'=>$this->input->post('cbo_pay_type'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'update_by_id'=>$user_id + ); + + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '2', + 'payment_status'=>'1', + 'payment_mode_desc'=>'Bank/Online', + 'confirm_pay_opd'=>date('Y-m-d H:i:s'), + 'payment_id'=>$insert_id, + 'prepared_by_id'=>$user_id + ); + + $this->Opd_M->update( $data,$this->input->post('oid')); + + $status='Bank Card'; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$status, + + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error, + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + if($this->input->post('mode')==4) + { + $data = array( + + 'payment_mode'=> '4', + 'payment_status'=>'1', + 'payment_mode_desc'=>'Org.Case Credit', + 'confirm_pay_opd'=>date('d/m/Y H:m:s'), + 'insurance_case_id'=>$this->input->post('case_id'), + 'prepared_by_id'=>$user_id + ); + + $this->Opd_M->update( $data,$this->input->post('oid')); + + $status='Org. Case Credit'; + + + $rvar=array( + 'update' =>1, + 'showcontent'=>$status, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function update_discount() + { + $oid=$this->input->post('oid'); + + $opd_discount=$this->input->post('input_dis_amt'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from opd_master where opd_id=".$oid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $opd_fee_amount=$data['opd_master'][0]->opd_fee_gross_amount-$opd_discount; + + $dataupdate = array( + 'opd_discount' => $this->input->post('input_dis_amt'), + 'opd_disc_remark' => $this->input->post('input_dis_desc'), + 'opd_fee_amount' => $opd_fee_amount, + 'opd_disc_update_by'=>$user_name.'['.$user_id.']' + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$oid); + + } + + public function update_doc_date() + { + $oid=$this->input->post('oid'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + + $doc_name_id=$this->input->post('doc_name_id'); + $datepicker_opddate=str_to_MysqlDate($this->input->post('datepicker_opddate')); + $doc_opd_fee=$this->input->post('opd_fee_amt'); + + + $sql="select * from opd_master where opd_id=".$oid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName,if(d.gender=1,'Male','Female') as xGender + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=".$doc_name_id." group by d.id "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $opd_fee_amount=$doc_opd_fee-$data['opd_master'][0]->opd_discount; + + $dataupdate = array( + 'doc_id' => $doc_name_id, + 'doc_name' => $data['doc_info'][0]->p_fname, + 'doc_spec' => $data['doc_info'][0]->SpecName, + 'apointment_date' => $datepicker_opddate, + 'opd_fee_gross_amount'=>$doc_opd_fee, + 'opd_fee_amount'=>$opd_fee_amount + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$oid); + + $sql="select * from opd_master where opd_id=".$oid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select * from payment_history where payof_type=1 and payof_id=".$oid." and id=".$data['opd_master'][0]->payment_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + $amount_diff=$payment_history[0]->amount-$opd_fee_amount; + if($amount_diff<>0) + { + $pay_remark=$payment_history[0]->remark." /Update OPD Rate Difference ".$amount_diff." :By ".$user_name; + + $paydata = array( + 'amount'=>$data['opd_master'][0]->opd_fee_amount, + 'remark'=>$pay_remark, + ); + $this->load->model('Payment_M'); + $this->Payment_M->update($paydata,$payment_history[0]->id); + } + + } + + } + + public function opd_load_doc($opdid) + { + $data['opdid']=$opdid; + + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + (case payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$data['opd_master'][0]->apointment_date."') AS age + from patient_master where id='".$data['opd_master'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $this->load->view('Person/OPD_file_upload',$data); + } + + + public function save_image($opdid) + { + $filename = 'OPD-'.$opdid.'-'.time() . '.jpg'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('webcam')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + + $this->load->model('File_M'); + + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($opd_master)>0) + { + $pid=$opd_master[0]->p_id; + $org_id=$opd_master[0]->insurance_case_id; + } + + $udata = array( + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'opd_id'=>$opdid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id, + 'upload_by_id'=>$user_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + + $user_name = $user->first_name.''. $user->last_name.':T-'.date('d-m-Y h:m:s'); + + $opdstatus=2; + + if($opdstatus=='2') + { + $status_str='Visit Done'; + }elseif($opdstatus=='3') + { + $status_str='Visit Cancel'; + } + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $dataupdate = array( + 'opd_status' => $opdstatus, + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + + echo $filename; + } + } + public function save_image_mobile($opdid) + { + $filename = 'OPD-'.$opdid.'-'.time() . '.jpg'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + + $user_id = '0'; + $user_name = 'Mobile'; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('userfile')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + + //print_r($data); + + $this->load->model('File_M'); + + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($opd_master)>0) + { + $pid=$opd_master[0]->p_id; + $org_id=$opd_master[0]->insurance_case_id; + } + + $udata = array( + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'opd_id'=>$opdid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id, + 'upload_by_id'=>$user_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + + $opdstatus=2; + + if($opdstatus=='2') + { + $status_str='Visit Done'; + }elseif($opdstatus=='3') + { + $status_str='Visit Cancel'; + } + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $dataupdate = array( + 'opd_status' => $opdstatus, + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + + echo 'File Upload successfully'; + } + } + + public function save_image_mobile_bak($opdid) + { + $filename = 'OPD-'.$opdid.'-'.time() . '.jpg'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + + $user_id = '0'; + $user_name = 'Mobile'; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + $img = $_POST['userfile']; + $img = str_replace('data:image/jpeg;base64,', '', $img); + $img = str_replace(' ', '+', $img); + $data = base64_decode($img); + + $file = $folder_name . '.jpeg'; + + $success = file_put_contents($file, $data); + + print $success ? $file : 'Unable to save the file.'; + + if (!$success) { + $data = array('upload_data' => $this->upload->data()); + print_r($data); + + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + + print_r($data); + + $this->load->model('File_M'); + + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($opd_master)>0) + { + $pid=$opd_master[0]->p_id; + $org_id=$opd_master[0]->insurance_case_id; + } + + $udata = array( + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'opd_id'=>$opdid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id, + 'upload_by_id'=>$user_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + + $opdstatus=2; + + if($opdstatus=='2') + { + $status_str='Visit Done'; + }elseif($opdstatus=='3') + { + $status_str='Visit Cancel'; + } + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $dataupdate = array( + 'opd_status' => $opdstatus, + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + + echo 'File Upload successfully'; + } + } + + public function opd_file_hide($file_id) + { + $user = $this->ion_auth->user()->row(); + $upload_by_id = $user->id; + + $udata = array( + 'show_type'=> '1', + 'upload_by_id'=>$upload_by_id + ); + $this->load->model('File_M'); + + $this->File_M->update($udata,$file_id); + + redirect('/Opd/opd_file_last_list'); + } + + public function opd_file_last_list($opdid='') + { + $user = $this->ion_auth->user()->row(); + $upload_by_id = $user->id; + + if($opdid=='') + { + $sql="select f.id,f.full_path,date_format(f.insert_date,'%d/%m/%Y-%H:%i') as strinsert_date, + f.file_ext,p.p_fname,p.str_age from file_upload_data f join patient_master_exten p on f.pid=p.id + where show_type=0 and upload_by_id=".$upload_by_id." order by id desc limit 5"; + }else{ + $sql="select f.id,f.full_path,date_format(f.insert_date,'%d/%m/%Y-%H:%i') as strinsert_date, + f.file_ext,p.p_fname,p.str_age from file_upload_data f join patient_master_exten p on f.pid=p.id + where show_type=0 and opd_id=$opdid and upload_by_id=$upload_by_id order by id desc limit 5"; + } + + $query = $this->db->query($sql); + $data['opd_file_list']= $query->result(); + + $this->load->view('Person/scan_opd_list',$data); + } + + public function opd_file_list($opdid) + { + $sql="select * from file_upload_data where show_type=0 and opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_file_list']= $query->result(); + + $sql="select * from file_opd_rec where opd_id=".$opdid; + $query = $this->db->query($sql); + $file_opd_rec= $query->result(); + + foreach($file_opd_rec as $row) + { + $full_path=$row->full_path; + $file_v_no=$row->v_no; + + $start_no=stripos($full_path,$file_v_no); + $end_no=strlen($full_path); + + $folder_name=substr($full_path,0,$start_no); + + $files_info = get_dir_file_info($folder_name); + + foreach($files_info as $key => $value) { + $find_file=number_format(substr_count($value['name'],$file_v_no),0); + if($find_file==1) + { + $index_key=str_replace($file_v_no.'_','',$value['name']); + $index_key=str_replace('.webm','',$index_key); + + $file_list[$index_key] = $value['name']; + } + } + + ksort($file_list); + + $prev_file=''; + $current_file=''; + foreach($file_list as $key => $value) { + $current_file=$folder_name.'/'.$value; + if(strlen($prev_file)>0) + { + //First File + $objFH = fopen( $prev_file, "rb" ); + $strBuffer1 = fread( $objFH, filesize( $prev_file) ); + fclose( $objFH ); + + //Second File + $objFH = fopen( $current_file, "rb" ); + $strBuffer2 = fread( $objFH, filesize( $current_file) ); + fclose( $objFH ); + + // manipulate buffers here... + $strBuffer3 = $strBuffer1 . $strBuffer2; + + // open for write/binary-safe + $objFH = fopen( $current_file, "wb" ); + fwrite( $objFH, $strBuffer3 ); + fclose( $objFH ); + + //Delete prev File + unlink($prev_file); + + $prev_file=$current_file; + + $data_upload = array( + 'opd_id' => $opd_id, + 'full_path' => $current_file, + ); + + $this->load->model('FileOPDRec_M'); + + $this->FileOPDRec_M->insert($data_upload,$file_v_no); + } + + } + + + + } + + $sql="select * from file_opd_rec where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['file_opd_rec']= $query->result(); + + $this->load->view('Person/opd_file_show',$data); + + } + + public function opd_file_upload($opdid) + { + $data['opdid']=$opdid; + + $this->load->view('Person/opd_scanfile_upload',$data); + } + + public function opd_scanfiles_upload($opdid) + { + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $output_dir = $folder_name; + + if(isset($_FILES["myfile"])) + { + $ret = array(); + + $error = $_FILES["myfile"]["error"]; + + // upload single file + if(!is_array($_FILES["myfile"]["name"])) //single file + { + $filename = 'OPD-'.$opdid.'-'.time() .$_FILES["myfile"]["name"]; + $config['upload_path'] = $folder_name; + $config['file_name'] = $filename; + $config['allowed_types'] = 'gif|jpg|png|jpeg|pdf|doc'; + + $this->load->library('upload', $config); + echo $filename; + //move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName); + + if (!$this->upload->do_upload('myfile')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + $this->load->model('File_M'); + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($opd_master)>0) + { + $pid=$opd_master[0]->p_id; + $org_id=$opd_master[0]->insurance_case_id; + } + + $udata = array( + 'opd_id'=>$opdid, + 'pid'=>$pid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + + } + + $ret[]= $_FILES["myfile"]["name"]; + } + else + { + // Handle Multiple files + $fileCount = count($_FILES["myfile"]["name"]); + for($i=0; $i<$fileCount; $i++) + { + $filename = 'OPD-'.$opdid.'-'.$i.'-'.time() .$_FILES["myfile"]["name"]; + + //$fileName = $_FILES["myfile"]["name"][$i]; + //move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName); + + if (!$this->upload->do_upload($_FILES["myfile"]["tmp_name"][$i])) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + $this->load->model('File_M'); + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($opd_master)>0) + { + $pid=$opd_master[0]->p_id; + $ipd_id=$opd_master[0]->ipd_id; + $org_id=$opd_master[0]->insurance_case_id; + } + + $udata = array( + 'upload_by'=> $user_name, + 'pid'=>$pid, + 'opd_id'=>$opdid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + } + } + + $ret[]= $_FILES["myfile"]["name"][$i]; + } + } + // output file names as comma seperated strings to display status + echo json_encode($ret); + } + } + + public function opd_status($opdid,$opdstatus) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.':T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + if($opdstatus=='2') + { + $status_str='Visit Done'; + }elseif($opdstatus=='3') + { + $status_str='Visit Cancel'; + } + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $dataupdate = array( + 'opd_status' => $opdstatus, + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + + public function get_appointment($opd_date='') + { + if($opd_date=='') + { + $opd_date=date('Y-m-d'); + + } + + $data["opd_date"]=$opd_date; + + $sql="select group_concat(DISTINCT o.doc_id ) as doc_list_opd + from (doctor_master d join doc_spec s join med_spec m on d.id=s.doc_id and m.id=s.med_spec_id) + join opd_master o on d.id=o.doc_id and o.apointment_date='".$opd_date."'"; + $query = $this->db->query($sql); + $doc_opd= $query->result(); + + if(count($doc_opd)>0) + { + $doc_opd_list=$doc_opd[0]->doc_list_opd; + }else{ + $doc_opd_list="0"; + } + + if($doc_opd_list=='') + { + $doc_opd_list="0"; + } + + $sql="select d.id as doc_id, d.p_fname,count(DISTINCT o.opd_id) as No_opd, + group_concat(DISTINCT m.SpecName) as Spec, + count( DISTINCT CASE o.opd_status WHEN 1 THEN o.opd_id END) as count_wait, + count( DISTINCT CASE o.opd_status WHEN 2 THEN o.opd_id END) as count_visit, + count( DISTINCT CASE o.opd_status WHEN 3 THEN o.opd_id END) as count_cancel, + MOD(d.id,5) as color_code + from (doctor_master d join doc_spec s join med_spec m on d.id=s.doc_id and m.id=s.med_spec_id) + left join opd_master o on d.id=o.doc_id and o.apointment_date='".$opd_date."' + where o.doc_id in (".$doc_opd_list.") + group by d.p_fname having count(DISTINCT o.opd_id)>0 "; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + + + $data['color']=array( + '0' => 'bg-yellow', + '1' => 'bg-red', + '2' => 'bg-green', + '3' => 'bg-gray', + '4' => 'bg-orange', + '5' => 'bg-blue' + ); + $data['content']=$this->load->view('dashboard/opd_appointment_panel',$data,True); + + $this->load->view('dashboard/appointment',$data); + } + + public function get_appointment_data($opd_date='') + { + if($opd_date=='') + { + $opd_date=date('Y-m-d'); + + } + + $data["opd_date"]=$opd_date; + + $sql="select group_concat(DISTINCT o.doc_id ) as doc_list_opd + from (doctor_master d join doc_spec s join med_spec m on d.id=s.doc_id and m.id=s.med_spec_id) + join opd_master o on d.id=o.doc_id and o.apointment_date='".$opd_date."'"; + $query = $this->db->query($sql); + $doc_opd= $query->result(); + + if(count($doc_opd)>0) + { + $doc_opd_list=$doc_opd[0]->doc_list_opd; + }else{ + $doc_opd_list="0"; + } + + if($doc_opd_list=='') + { + $doc_opd_list="0"; + } + + $sql="select d.id as doc_id, d.p_fname,count(DISTINCT o.opd_id) as No_opd, + group_concat(DISTINCT m.SpecName) as Spec, + count( DISTINCT CASE o.opd_status WHEN 1 THEN o.opd_id END) as count_wait, + count( DISTINCT CASE o.opd_status WHEN 2 THEN o.opd_id END) as count_visit, + count( DISTINCT CASE o.opd_status WHEN 3 THEN o.opd_id END) as count_cancel, + MOD(d.id,5) as color_code + from (doctor_master d join doc_spec s join med_spec m on d.id=s.doc_id and m.id=s.med_spec_id) + left join opd_master o on d.id=o.doc_id and o.apointment_date='".$opd_date."' + where o.doc_id in (".$doc_opd_list.") + group by d.p_fname having count(DISTINCT o.opd_id)>0 "; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + + + $data['color']=array( + '0' => 'bg-yellow', + '1' => 'bg-red', + '2' => 'bg-green', + '3' => 'bg-gray', + '4' => 'bg-orange', + '5' => 'bg-blue' + ); + $this->load->view('dashboard/opd_appointment_panel',$data); + } + + + public function opd_display($doc_id=1) + { + $opd_date=date('Y-m-d'); + + $data["opd_date"]=$opd_date; + + $sql=" SELECT o.opd_id,o.opd_code,p.id,p.p_code,o.P_name,m.queue_no,o.opd_fee_desc,o.payment_status, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=1 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_id "; + + $query = $this->db->query($sql); + $data['opd_list_1']= $query->result(); + + $doc_id=2; + + $sql=" SELECT o.opd_id,o.opd_code,p.id,p.p_code,o.P_name,m.queue_no,o.opd_fee_desc,o.payment_status, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=1 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_id "; + + $query = $this->db->query($sql); + $data['opd_list_2']= $query->result(); + + $data['color']=array(); + + $sql="select id,color_name,code_code from color"; + $query = $this->db->query($sql); + $color= $query->result(); + + foreach($color as $aRow) + { + array_push($data['color'],$aRow->code_code); + } + + $data['color1']=array( + '0' => 'bg-yellow', + '1' => 'bg-red', + '2' => 'bg-green', + '3' => 'bg-gray', + '4' => 'bg-orange', + '5' => 'bg-blue' + ); + + $this->load->view('dashboard/opd_display',$data); + } + + public function opd_cancel($opdid) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=$this->input->post('input_remark'); + + $opd_status_remark=$status_str.' [Update By:'.$user_name.']'; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount + from payment_history where payof_type=1 and payof_id=".$opdid; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from opd_master + where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select * from refund_order + where refund_process=0 and refund_type=1 and refund_type_id=".$opdid; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + $insert_id=0; + + if(count($payment_history)>0 && count($refund_order)<1) + { + if($payment_history[0]->paid_amount>0 && $opd_master[0]->opd_status==1) + { + $RefundRequest = array( + 'refund_type' => 1, + 'refund_type_id' => $opdid, + 'refund_type_code' => $opd_master[0]->opd_code, + 'refund_type_reason' => 'Cancel OPD', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $payment_history[0]->paid_amount + ); + + $this->load->model('Payment_M'); + $insert_id=$this->Payment_M->insert_refundorder($RefundRequest); + } + }else{ + $insert_id=1; + } + + $dataupdate = array( + 'opd_status' => '3', + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + + echo $insert_id; + + } + + public function opd_crorg($opdid,$org_code_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=1 and payof_id=".$opdid; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=1 and refund_type_id=".$opdid; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($payment_history)>0 && count($refund_order)<1) + { + if($payment_history[0]->paid_amount>0 && $opd_master[0]->opd_status==1) + { + $RefundRequest = array( + 'refund_type' => 1, + 'refund_type_id' => $opdid, + 'refund_type_code' => $opd_master[0]->opd_code, + 'refund_type_reason' => 'Cr. to Org.', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $payment_history[0]->paid_amount + ); + + $this->load->model('Payment_M'); + $this->Payment_M->insert_refundorder($RefundRequest); + } + } + + $dataupdate = array( + 'payment_mode' => 3, + 'payment_id' => 0, + 'insurance_case_id' => $org_code_id, + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + + public function opd_discount_update($opdid) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + $opd_discount=$this->input->post('input_dis_amt'); + $opd_disc_remark=$this->input->post('input_dis_desc'); + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=1 and payof_id=".$opdid; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=1 and refund_type_id=".$opdid; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($payment_history)>0 && count($refund_order)<1) + { + $opd_fee_amount=$opd_master[0]->opd_fee_gross_amount-$opd_discount; + + if($payment_history[0]->paid_amount>0 && $opd_master[0]->opd_status==1 && $opd_fee_amount>=0 && $opd_discount>0) + { + $RefundRequest = array( + 'refund_type' => 1, + 'refund_type_id' => $opdid, + 'refund_type_code' => $opd_master[0]->opd_code, + 'refund_type_reason' => 'Discount', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $opd_discount, + 'patient_id' => $opd_master[0]->p_id, + 'patient_name' =>$opd_master[0]->P_name + ); + + $this->load->model('Payment_M'); + $this->Payment_M->insert_refundorder($RefundRequest); + } + + if($opd_fee_amount>=0) + { + $dataupdate = array( + 'opd_discount' => $opd_discount, + 'opd_disc_remark' => $opd_disc_remark, + 'opd_fee_amount' => $opd_fee_amount, + 'opd_disc_update_by'=>$user_name.'['.$user_id.']' + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + } + } + + public function scan_opd_desktop() + { + $this->load->view('Person/opd_scan_desktop'); + } + + public function search_scan_opd() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9 _\-]/', '', trim($sdata)); + + if(is_numeric($sdata)) + { + $where=" (mphone1 = '".$sdata."' or udai='".$sdata."' or p_code like '%".$sdata."')" ; + }elseif (filter_var($sdata, FILTER_VALIDATE_EMAIL)) { + $where=" email1 = '".$sdata."'" ; + }else{ + $where=" (p_fname like '%".$sdata."%' or + SUBSTRING_INDEX(p_fname,' ',1) sounds like '".$sdata."')"; + } + + $sql = "SELECT p.*,o.opd_id, + o.doc_name,o.opd_code,Date_Format(o.opd_book_date,'%d-%m-%Y') as App_Date, + if(MAX(date(o.opd_book_date))=curdate(),Date_Format(MAX(o.opd_book_date),'%d-%m-%Y %H:%i'),0) as opd_today + FROM (patient_master_exten p JOIN opd_master o ON p.id=o.p_id) + WHERE ".$where." Group by o.opd_id + order by o.opd_id desc "; + + + $query = $this->db->query($sql); + $data['opd_list']= $query->result(); + + $this->load->view('Person/opd_scan_search',$data); + } + + + + public function SelectOPD($opdid) + { + + $sql = "select o.opd_id, o.doc_name,o.opd_code,o.P_name,o.p_id,Date_Format(o.apointment_date,'%d-%m-%Y') as App_Date, + p.p_code,p.mphone1,p.email1 ,if(o.insurance_id>1,'Org.','Direct') as Inv_Type, + m.mode_desc as PaymentMode,o.payment_mode + from (opd_master o join patient_master p on o.p_id=p.id ) join payment_mode m on o.payment_mode=m.id + WHERE o.opd_id=".$opdid; + + $query = $this->db->query($sql); + $opd_data= $query->result(); + + if(count($opd_data)>0) + { + echo 'OPD Code :'.$opd_data[0]->opd_code ; + echo ' Doctor Name : Dr.'.$opd_data[0]->doc_name ; + echo ' OPD Date :'.$opd_data[0]->App_Date ; + echo ' Patient Name :'.$opd_data[0]->P_name ; + echo ' Patient Code :'.$opd_data[0]->p_code ; + } + } + + public function get_appointment_list($doc_id,$opd_date='') + { + if($opd_date=='') + { + $opd_date=date('Y-m-d'); + } + + $data["opd_date"]=$opd_date; + + $data["doc_id"]=$doc_id; + + $sql="select d.p_fname,count(DISTINCT o.opd_id) as No_opd, d.id as doc_id, + group_concat(DISTINCT m.SpecName) as Spec, + count( DISTINCT CASE o.opd_status WHEN 1 THEN o.opd_id END) as count_wait, + count( DISTINCT CASE o.opd_status WHEN 2 THEN o.opd_id END) as count_visit, + count( DISTINCT CASE o.opd_status WHEN 3 THEN o.opd_id END) as count_cancel, + MOD(d.id,5) as color_code + from (doctor_master d join doc_spec s join med_spec m on d.id=s.doc_id + and m.id=s.med_spec_id)left join opd_master o on d.id=o.doc_id and o.apointment_date='".$opd_date."' + where d.id ='".$doc_id."' group by d.id"; + + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + + $sql="SELECT o.opd_id,o.opd_code,p.id,p.p_code,p.p_fname as P_name,m.queue_no,o.opd_fee_desc,o.payment_status,p.p_rname,o.opd_no, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + LEFT JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE m.id is null and ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=1 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id ORDER BY opd_code desc "; + + $query = $this->db->query($sql); + $data['opd_list_0']= $query->result(); + + $sql=" SELECT o.opd_id,o.opd_code,p.id,p.p_code,p.p_fname as P_name,m.queue_no,o.opd_fee_desc,p.p_rname, + m.current_queue_no,m.id,o.opd_fee_amount + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=1 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_id "; + + $query = $this->db->query($sql); + $data['opd_list_1']= $query->result(); + + $sql="SELECT o.opd_id,o.opd_code,p.id,p.p_code,p.p_fname as P_name,m.queue_no,o.opd_fee_desc,o.payment_status,p.p_rname,o.opd_fee_amount, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=2 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_code "; + + $query = $this->db->query($sql); + $data['opd_list_2']= $query->result(); + + $sql="SELECT o.opd_id,o.opd_code,p.id,p.p_code,p.p_fname as P_name,m.queue_no,o.opd_fee_desc,o.payment_status,p.p_rname,o.opd_fee_amount, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=3 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_code "; + + $query = $this->db->query($sql); + $data['opd_list_3']= $query->result(); + + $sql="select id,color_name,code_code from color"; + $query = $this->db->query($sql); + $color= $query->result(); + + $data['color']=array(); + + foreach($color as $aRow) + { + array_push($data['color'],$aRow->code_code); + } + + $data['color1']=array( + '0' => 'bg-yellow', + '1' => 'bg-red', + '2' => 'bg-green', + '3' => 'bg-gray', + '4' => 'bg-orange', + '5' => 'bg-blue' + ); + + $data['doc_master_panel']=$this->load->view('dashboard/opd_queue_status_total',$data,true); + $data['tab0']=$this->load->view('dashboard/opd_queue_status_tab_0',$data,true); + $data['tab1']=$this->load->view('dashboard/opd_queue_status_tab_1',$data,true); + $data['tab2']=$this->load->view('dashboard/opd_queue_status_tab_2',$data,true); + $data['tab3']=$this->load->view('dashboard/opd_queue_status_tab_3',$data,true); + + + $this->load->view('dashboard/opd_list_doc',$data); + } + + + public function update_appointment_panel_bak() + { + $doc_id=$this->input->post('doc_id'); + $opd_date=$this->input->post('opd_date'); + + if($opd_date=='') + { + $opd_date=date('Y-m-d'); + } + + $sql="SELECT o.opd_id,o.opd_code,p.id,p.p_code,o.P_name,m.queue_no,o.opd_fee_desc,o.payment_status, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + LEFT JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE m.id is null and ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=1 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id ORDER BY opd_code desc "; + + $query = $this->db->query($sql); + $opd_list_0= $query->result(); + + $sql=" SELECT o.opd_id,o.opd_code,p.id,p.p_code,o.P_name,m.queue_no,o.opd_fee_desc,p.p_rname, + group_concat('ID:',h.id,'/M:',(case h.payment_mode when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=1 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_id desc "; + + $query = $this->db->query($sql); + $opd_list_1= $query->result(); + + $sql="SELECT o.opd_id,o.opd_code,p.id,p.p_code,o.P_name,m.queue_no,o.opd_fee_desc,o.payment_status,p.p_rname, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=2 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_code desc"; + + $query = $this->db->query($sql); + $opd_list_2= $query->result(); + + $sql="SELECT o.opd_id,o.opd_code,p.id,p.p_code,o.P_name,m.queue_no,o.opd_fee_desc,o.payment_status,p.p_rname, + group_concat('ID:',`h`.`id`,'/M:',(case `h`.`payment_mode` when 1 then 'Cash' when 2 then 'BANK ' when 0 then 'Pending' else 'Other' end) separator ',') AS `Paymode` + FROM ((opd_master o JOIN patient_master p ON o.p_id=p.id) + JOIN opd_prescription m ON o.opd_id=m.opd_id) + LEFT JOIN payment_history h ON o.opd_id=h.payof_id AND h.payof_type=1 + WHERE ( o.apointment_date = '".$opd_date."' ) + and o.opd_status=3 and o.doc_id ='".$doc_id."' + GROUP BY o.opd_id + ORDER BY opd_code desc "; + + $query = $this->db->query($sql); + $opd_list_3= $query->result(); + + $sql="select d.p_fname,count(DISTINCT o.opd_id) as No_opd, d.id as doc_id, + group_concat(DISTINCT m.SpecName) as Spec, + count( DISTINCT CASE o.opd_status WHEN 1 THEN o.opd_id END) as count_wait, + count( DISTINCT CASE o.opd_status WHEN 2 THEN o.opd_id END) as count_visit, + count( DISTINCT CASE o.opd_status WHEN 3 THEN o.opd_id END) as count_cancel, + MOD(d.id,5) as color_code + from (doctor_master d join doc_spec s join med_spec m on d.id=s.doc_id + and m.id=s.med_spec_id)left join opd_master o on d.id=o.doc_id and o.apointment_date='".$opd_date."' + where d.id ='".$doc_id."' group by d.id"; + + $query = $this->db->query($sql); + $doc_master= $query->result(); + + $sql="select id,color_name,code_code from color"; + $query = $this->db->query($sql); + $color= $query->result(); + + $data['color']=array(); + + foreach($color as $aRow) + { + array_push($data['color'],$aRow->code_code); + } + + $data['color1']=array( + '0' => 'bg-yellow', + '1' => 'bg-red', + '2' => 'bg-green', + '3' => 'bg-gray', + '4' => 'bg-orange', + '5' => 'bg-blue' + ); + + //Doctor Panel + $doc_master_panel=''; + + //Master View + $Master_View='
+
+

##HEAD_NAME##

+
+ +
+ + ##CONTENT## +
+
+
'; + + //On Booking List + $tab0=''; + $srno=0; + foreach($opd_list_0 as $row) + { + $tab0.=' + '.$row->opd_id.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->Paymode.' + '; + if($row->payment_status==1) { + $tab0.=' + '; + }else{ + $tab0.=' + Go For Payment

'; + } + $tab0.=' + + + '; + } + + + $Master_View_head=str_replace("##HEAD_NAME##","On Booking List",$Master_View); + $tab0=str_replace("##CONTENT##",$tab0,$Master_View_head); + + //OnWaiting List + + $tab1=''; + $srno=0; + foreach($opd_list_1 as $row) + { + $tab1.=' + '.$row->queue_no.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->opd_fee_desc.'/'.$row->Paymode.' + + + + + + + +'; +} + +$Master_View_head=str_replace("##HEAD_NAME##","On Waiting List",$Master_View); +$tab1=str_replace("##CONTENT##",$tab1,$Master_View_head); + +//Visited List +$tab2=''; + +$srno=0; +foreach($opd_list_2 as $row) +{ +$tab2.=' + '.$row->opd_id.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->opd_fee_desc.'/'.$row->Paymode.' + + + + + + +'; +} + +$Master_View_head=str_replace("##HEAD_NAME##","Visited List",$Master_View); +$tab2=str_replace("##CONTENT##",$tab2,$Master_View_head); + +//Cancel List +$tab3=''; +$srno=0; +foreach($opd_list_3 as $row) +{ +$tab3.=' + '.$row->opd_id.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->opd_fee_desc.'/'.$row->Paymode.' + + + + '; + }else{ + $tab0.=' + Go For Payment

'; + } + $tab0.=' + + + '; + } + + + $Master_View_head=str_replace("##HEAD_NAME##","On Booking List",$Master_View); + $tab0=str_replace("##CONTENT##",$tab0,$Master_View_head); + + //OnWaiting List + + $tab1=''; + $srno=0; + foreach($opd_list_1 as $row) + { + $tab1.=' + '.$row->queue_no.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->opd_fee_desc.'/'.$row->Paymode.' + + + + + + + + '; + } + + $Master_View_head=str_replace("##HEAD_NAME##","On Waiting List",$Master_View); + $tab1=str_replace("##CONTENT##",$tab1,$Master_View_head); + + //Visited List + $tab2=''; + + $srno=0; + foreach($opd_list_2 as $row) + { + $tab2.=' + '.$row->opd_id.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->opd_fee_desc.'/'.$row->Paymode.' + + + + + '; + } + + $Master_View_head=str_replace("##HEAD_NAME##","Visited List",$Master_View); + $tab2=str_replace("##CONTENT##",$tab2,$Master_View_head); + + //Cancel List + $tab3=''; + $srno=0; + foreach($opd_list_3 as $row) + { + $tab3.=' + '.$row->opd_id.' + '.$row->opd_code.' + '.$row->P_name.' + '.$row->opd_fee_desc.'/'.$row->Paymode.' + + + + + '; + } + + $Master_View_head=str_replace("##HEAD_NAME##","Visited List",$Master_View); + $tab3=str_replace("##CONTENT##",$tab3,$Master_View_head); + + $rvar=array( + 'update' =>1, + 'doc_master_panel'=> $doc_master_panel, + 'tab0' => $tab0, + 'tab1' => $tab1, + 'tab2' => $tab2, + 'tab3' => $tab3, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + + + } \ No newline at end of file diff --git a/old_code_ci3/controllers/Opd_online_api.php b/old_code_ci3/controllers/Opd_online_api.php new file mode 100644 index 0000000..00bdefe --- /dev/null +++ b/old_code_ci3/controllers/Opd_online_api.php @@ -0,0 +1,290 @@ +db->query($sql); + $data= $query->result(); + + }else{ + $sql="select * from patient_master limit 10"; + $query = $this->db->query($sql); + $data= $query->result(); + } + + if(!$data) + { + $rvar=array( + "no_record" =>0, + ); + $encode_data = json_encode($rvar); + $data= $encode_data; + } + + $this->response($data, REST_Controller::HTTP_OK); + } + + public function patient_code_get($p_code="0") + { + $data=null; + + if(!empty($p_code)){ + $sql="select * from patient_master where p_code='$p_code'"; + $query = $this->db->query($sql); + $data= $query->result(); + } + + if(!$data) + { + $rvar=array( + 'no_record' =>0, + ); + $encode_data = json_encode($rvar); + $data= $encode_data; + } + $this->response($data, REST_Controller::HTTP_OK); + } + + public function patient_list_get($p_code="0") + { + $data=null; + + if(!empty($p_code) || strlen($p_code)>3){ + $sql="select * from patient_master where p_code like '%$p_code' order by id desc limit 20"; + $query = $this->db->query($sql); + $data= $query->result(); + } + + if(!$data) + { + $rvar=array( + 'no_record' =>0, + ); + $encode_data = json_encode($rvar); + $data= $encode_data; + } + $this->response($data, REST_Controller::HTTP_OK); + } + + public function patient_phone_get($phone_number) + { + $data=null; + + if(!empty($phone_number)){ + $sql="select * from patient_master where mphone1='$phone_number' and mphone1<>''"; + $query = $this->db->query($sql); + $data= $query->result(); + } + + if(!$data) + { + $rvar=array( + 'no_record' =>0, + ); + $encode_data = json_encode($rvar); + $data= $encode_data; + } + $this->response($data, REST_Controller::HTTP_OK); + } + + public function patient_phone_list_get($phone_number) + { + $data=null; + + if(!empty($phone_number)){ + $sql="select * from patient_master where mphone1 like '$phone_number%' and mphone1<>'' order by id desc limit 20 "; + $query = $this->db->query($sql); + $data= $query->result(); + } + + if(!$data) + { + $rvar=array( + 'no_record' =>0, + ); + $encode_data = json_encode($rvar); + $data= $encode_data; + } + $this->response($data, REST_Controller::HTTP_OK); + } + + public function patient_create_post() + { + $data = array( + 'mphone1' => $this->input->post('mphone1'), + 'p_fname' => strtoupper($this->input->post('p_fname')), + 'gender' => $this->input->post('gender'), + 'p_relative' => $this->input->post('p_relative'), + 'p_rname' => strtoupper($this->input->post('p_rname')), + 'dob' => $this->input->post('dob'), + 'estimate_dob' => 'estimate_dob', + + ); + + $this->load->model('Patient_M'); + + $inser_id=$this->Patient_M->insert($data); + + if($inser_id>0) + { + $sql="Select * from patient_master where id=".$inser_id; + $query = $this->db->query($sql); + $data= $query->result(); + + if(count($data)>0) + { + $rvar=[ + 'New_UHID' =>$data[0]->id, + 'p_code' => $data[0]->p_code, + ]; + }else{ + $rvar=[ + 'New_UHID' =>0, + ]; + } + }else{ + $rvar=[ + 'New_UHID' =>0, + ]; + } + + $response_data = json_encode($rvar); + $response_data = $rvar; + //$response_data = $data; + + $this->response($response_data, REST_Controller::HTTP_OK); + + } + + public function opd_register_post() + { + + $user_name_info = 'OnlineUser ['.date('d-m-Y H:i:s').']'; + $p_id= $this->input->post('hospital_patient_id'); + $doc_id= $this->input->post('hospital_doc_id'); + $appointment_date= $this->input->post('appointment_date'); + $opd_fee= $this->input->post('opd_fee'); + + //var_dump($this->input->post()); + + $sql="select * from patient_master where id=".$p_id; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName,if(d.gender=1,'Male','Female') as xGender + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=".$doc_id." group by d.id "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select * from opd_master where p_id=".$p_id." order by opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select * from opd_master where p_id=$p_id and apointment_date='$appointment_date' and doc_id=$doc_id "; + $query = $this->db->query($sql); + $opd_master_exit= $query->result(); + + $this->load->model('Opd_M'); + + $last_Vist_date=''; + + if(count($data['opd_master'])>0) + { + $last_Vist_date=$data['opd_master'][0]->apointment_date; + } + + $opd_fee_amount=$this->input->post('opd_fee'); + $opd_fee_desc="Online Booked"; + + + $data['insert'] = array( + 'p_id' => $p_id, + 'P_name' => strtoupper($data['person_info'][0]->p_fname), + 'doc_id' => $doc_id, + 'insurance_id' => '0', + 'opd_fee_id' => '0', + 'opd_fee_amount' => $opd_fee_amount, + 'opd_fee_gross_amount' => $opd_fee_amount, + 'opd_fee_desc' => $opd_fee_desc, + 'doc_name' => $data['doc_info'][0]->p_fname, + 'opd_fee_type' =>0, + 'apointment_date' =>$appointment_date, + 'doc_spec' => $data['doc_info'][0]->SpecName, + 'prepared_by' => $user_name_info, + 'payment_status'=>1, + 'payment_mode_desc'=> 'Online', + 'online_book'=> 1, + ); + + $data['patient_master'] = array( + 'last_visit' => $appointment_date, + ); + + if(count($data['opd_master'])>0) + { + $data['insert']=array_merge($data['insert'],array('last_opdvisit_date'=>$data['opd_master'][0]->apointment_date)); + } + + $inser_id=0; + + if(count($opd_master_exit)==0){ + $inser_id=$this->Opd_M->insert( $data['insert']); + }else{ + $inser_id=$opd_master_exit[0]->opd_id; + } + + + if($inser_id>0) + { + $this->load->model('Patient_M'); + $this->Patient_M->update_online($data['patient_master'],$p_id); + + $sql="select * from opd_master where opd_id=".$inser_id; + $query = $this->db->query($sql); + $opd_book= $query->result(); + + if(count($opd_book)>0) + { + $rvar=[ + 'OPD_ID' =>$opd_book[0]->opd_id, + 'DOC_NAME' =>$opd_book[0]->doc_name, + 'BOOKNO' =>$opd_book[0]->opd_id.'-'.$opd_book[0]->opd_no, + 'BOOKDATE' =>MysqlDate_to_str($opd_book[0]->apointment_date), + 'PHONENO' =>$data['person_info'][0]->mphone1, + ]; + }else{ + $rvar=[ + 'OPD_ID' =>0, + ]; + } + }else{ + $rvar=[ + 'OPD_ID' =>0, + ]; + } + + $response_data = json_encode($rvar); + $response_data = $rvar; + + $this->response($response_data, REST_Controller::HTTP_OK); + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Opd_prescription.php b/old_code_ci3/controllers/Opd_prescription.php new file mode 100644 index 0000000..24c372e --- /dev/null +++ b/old_code_ci3/controllers/Opd_prescription.php @@ -0,0 +1,2976 @@ +load->model('Prescription_M'); + $this->load->model('Patient_M'); + } + + // Prescription + public function create_revist_opd($opdid) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,if(apointment_date>date_add(CURDATE(),interval -7 day),0,1) as Exp_date from opd_master_exten where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $pno=$data['opd_master'][0]->p_id; + $doc_id=$data['opd_master'][0]->doc_id; + $opd_date=$data['opd_master'][0]->apointment_date; + $Exp_date=$data['opd_master'][0]->Exp_date; + + $opd_status=$data['opd_master'][0]->opd_status; + + $sql="select max(queue_no) as max_queue from opd_prescription where date_opd_visit=curdate() and doc_id='".$doc_id."'"; + $query = $this->db->query($sql); + $max_queue= $query->result(); + + if(count($max_queue)>0) + { + $max_queue_no=$max_queue[0]->max_queue; + }else{ + $max_queue_no=0; + } + + $max_queue_no=$max_queue_no+1; + + $sql="select * from opd_prescription where visit_status=0 and HCODE=".HCODE." and opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_prescription']= $query->result(); + + $msg_send=""; + + if(count($data['opd_prescription'])==0 ) + { + if($Exp_date==0 && $opd_status==2) + { + $datainsert = array( + 'HCODE' => HCODE, + 'opd_id' => $opdid, + 'p_id' => $pno, + 'revisit'=>'1', + 'queue_no'=>$max_queue_no, + 'date_opd_visit'=>date('Y-m-d'), + 'update_by'=>$user_name + ); + + $this->Prescription_M->insert_opd_prescription($datainsert); + + $msg_send="OPD Created"; + + }elseif($opd_status==1){ + $msg_send="OPD Pending"; + }else{ + $msg_send="OPD Expired"; + } + + }else{ + $msg_send="Revisit Already Created :"; + } + + echo $msg_send; + } + + public function create_opd_queue($opdid) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select * + from opd_master + where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $pno=$data['opd_master'][0]->p_id; + $doc_id=$data['opd_master'][0]->doc_id; + $opd_date=$data['opd_master'][0]->apointment_date; + + $opd_status=$data['opd_master'][0]->opd_status; + + $sql="select max(queue_no) as max_queue from opd_prescription + where date_opd_visit=curdate() and doc_id='".$doc_id."'"; + $query = $this->db->query($sql); + $max_queue= $query->result(); + + if(count($max_queue)>0) + { + $max_queue_no=$max_queue[0]->max_queue; + }else{ + $max_queue_no=0; + } + + $max_queue_no=$max_queue_no+1; + + $sql="select * from opd_prescription where visit_status=0 and opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_prescription']= $query->result(); + + $msg_send=""; + + if(count($data['opd_prescription'])==0 ) + { + if($opd_status==1) + { + $datainsert = array( + 'opd_id' => $opdid, + 'p_id' => $pno, + 'revisit'=>'0', + 'queue_no'=>$max_queue_no, + 'doc_id'=>$doc_id, + 'date_opd_visit'=>date('Y-m-d'), + 'update_by'=>$user_name + ); + + $this->Prescription_M->insert_opd_prescription($datainsert); + + $msg_send="OPD in Queue Now"; + }else{ + $msg_send="OPD Already Done, Create Revisit"; + } + + }else{ + $msg_send="OPD Already in Queue"; + } + + echo $msg_send; + } + + public function show_profile_opd($p_id) + { + $data['p_id']=$p_id; + + $sql="select * from patient_master_exten where id=".$p_id; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select o.* from opd_master o where o.p_id=$p_id order by o.opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select o.* from opd_master o where o.p_id=$p_id and date(o.apointment_date)=curdate()"; + $query = $this->db->query($sql); + $data['opd_master_current']= $query->result(); + + //$this->load->view('Person/person_file_show',$data); + + $this->load->view('dashboard/OPD_old_prescription',$data); + + } + + public function show_old_Prescribed($p_id,$currect_opd) + { + + $sql="select o.* from opd_master o + where o.p_id=$p_id and o.opd_id<>$currect_opd order by o.opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select * from opd_prescription where opd_id=$currect_opd"; + $query = $this->db->query($sql); + $current_opd_master= $query->result(); + + $data['doc_id']=$current_opd_master[0]->doc_id; + $data['opd_id']=$current_opd_master[0]->opd_id; + $data['opd_session_id']=$current_opd_master[0]->id; + $data['p_id']=$current_opd_master[0]->p_id; + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_patient_old_medicine',$data); + + } + + + public function show_medical_item($p_id) + { + $data['p_id']=$p_id; + + $sql="SELECT * + from invoice_med_master + WHERE patient_id=$p_id + ORDER BY id desc"; + $query = $this->db->query($sql); + $data['invoice_med_master']= $query->result(); + + $this->load->view('dashboard/opd_medical_bill',$data); + + } + + public function show_profile_investigation($p_id) + { + $data['p_id']=$p_id; + + $sql="SELECT i.id,i.inv_date,i.invoice_code,GROUP_CONCAT(t.item_name) as Item_list,i.net_amount, + i.attach_id, + date_format(i.inv_date,'%d-%m-%Y') as inv_date_str + FROM invoice_master i JOIN invoice_item t ON i.id=t.inv_master_id + WHERE i.attach_id=$p_id + GROUP BY i.id "; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + //$this->load->view('Person/person_file_show',$data); + + $this->load->view('dashboard/Investigation_history',$data); + + } + + public function Prescription($opdid) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $pno=$data['opd_master'][0]->p_id; + $doc_id=$data['opd_master'][0]->doc_id; + + $sql="select d.id,d.p_code,d.p_fname,d.p_title,d.mphone1,d.mphone2, + if(d.gender=1,'Male','Female') as xgender,Get_Age(d.dob) as age, + d.dob,d.zip,d.email1,d.email2,d.register_date,d.add1,d.add2,d.city, + d.state,d.country,d.active, group_concat(distinct m.SpecName) as SpecName + from (doctor_master d left join (doc_spec s + join med_spec m on s.med_spec_id=m.id) on d.id=s.doc_id) + where d.id=".$doc_id." group by d.id"; + + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + + $sql="SELECT m.mor_id,m.morbidities,c.p_id + FROM morbidities_master m left JOIN patient_morbidities c ON m.mor_id=c.morbidities AND c.p_id=$pno + Where m.active=1"; + $query = $this->db->query($sql); + $data['morbidities']= $query->result(); + + + $sql="select * from opd_prescription where visit_status=0 and opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_prescription']= $query->result(); + + $sql="select * + from patient_master_exten where id=".$pno; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select * + from patient_master where id=".$pno; + $query = $this->db->query($sql); + $data['Pdata']= $query->result(); + + $sql="select * from invprofiles "; + $query = $this->db->query($sql); + $data['invprofiles']= $query->result(); + + $sql="select * from investigation where short_name<>'' order by short_name,sort_id "; + $query = $this->db->query($sql); + $data['short_investigation']= $query->result(); + + $sql="select * from complaints_master where show_in_short=1 order by Name "; + $query = $this->db->query($sql); + $data['short_complaint']= $query->result(); + + $data['doc_id']=$doc_id; + + if(count($data['opd_prescription'])==0) + { + $datainsert = array( + 'opd_id' => $opdid, + 'p_id' => $pno, + 'doc_id'=>$doc_id, + 'update_by'=>$user_name + ); + + $this->Prescription_M->insert_opd_prescription($datainsert); + + $sql="select * from opd_prescription where session_id=0 and opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_prescription']= $query->result(); + } + + //old Data from Last OPD + $sql="Select * from opd_prescription where p_id=$pno and opd_id<$opdid order by opd_id desc limit 1"; + $query = $this->db->query($sql); + $opd_prescription_old= $query->result(); + + $data['old_complaint_list']=array(); + $data['old_diagnosis_list']=array(); + $data['old_Provisional_diagnosis_list']=array(); + + if(count($opd_prescription_old)>0) + { + $str_complaint=trim(trim($opd_prescription_old[0]->complaints,',')); + if(strlen($str_complaint)>1) + { + $data['old_complaint_list']=explode(',',$str_complaint); + } + + $str_diagnosis=trim(trim($opd_prescription_old[0]->diagnosis,',')); + if(strlen($str_diagnosis)>1){ + $data['old_diagnosis_list']=explode(',',$str_diagnosis); + } + + $str_Provisional_diagnosis=trim(trim($opd_prescription_old[0]->Provisional_diagnosis,',')); + if(strlen($str_Provisional_diagnosis)>1){ + $data['old_Provisional_diagnosis_list']=explode(',',$str_Provisional_diagnosis); + } + } + + $opd_session_id=$data['opd_prescription'][0]->id; + + $data['p_id']=$pno; + $data['opd_id']=$opdid; + $data['opd_session_id']=$opd_session_id; + + $this->load->view('dashboard/OPDPrescription',$data); + } + + public function get_finding_exam() + { + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select distinct Finding_Examinations from opd_prescription where Finding_Examinations like '%".$q."%' "; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['Finding_Examinations'])); + $new_row['value']=htmlentities(stripslashes($row['Finding_Examinations'])); + + //$new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function show_profile_image($p_id,$opd_id,$doc_id) + { + $data['p_id']=$p_id; + + $sql="select *,IFNULL(GET_AGE_BY_DOB(dob),age) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate, + if(gender=1,'Male','Female') as xgender , + if(date_add(insert_date,interval 12 hour)>sysdate(),1,0) as p_edit + from patient_master where id=".$p_id; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $data['opd_id']=$opd_id; + $data['doc_id']=$doc_id; + + + $this->load->view('dashboard/person_profile_photo_from_doctor',$data); + } + + public function prescribed_dose($opd_id,$opd_session_id) + { + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $data['opd_drug']= $query->result(); + + $sql="select * from opd_dose_shed "; + $query = $this->db->query($sql); + $data['opd_dose_shed']= $query->result(); + + $sql="select * from opd_dose_when"; + $query = $this->db->query($sql); + $data['opd_dose_when']= $query->result(); + + $sql="select * from opd_dose_frequency"; + $query = $this->db->query($sql); + $data['opd_dose_frequency']= $query->result(); + + $sql="select * from opd_dose_where"; + $query = $this->db->query($sql); + $data['opd_dose_where']= $query->result(); + + $sql="select * from opd_dose_duration"; + $query = $this->db->query($sql); + $opd_dose_duration= $query->result(); + + $sql="select * from med_formulation"; + $query = $this->db->query($sql); + $med_formulation= $query->result(); + + $sql="SELECT o.id,o.next_visit_desc,DATE_ADD(CURDATE(),INTERVAL o.no_of_days DAY) AS next_date, + Concat(next_visit_desc,' (', Date_Format(DATE_ADD(CURDATE(),INTERVAL o.no_of_days DAY),'%d-%m-%Y') ,')') as next_visit_day + FROM opd_nextvisit o order by no_of_days"; + $query = $this->db->query($sql); + $data['opd_nextvisit']= $query->result(); + + $data['opd_dose_duration']=''; + foreach($opd_dose_duration as $row) + { + $data['opd_dose_duration'].='"'.$row->duration.'",'; + } + + $data['med_formulation']=''; + foreach($med_formulation as $row) + { + $data['med_formulation'].='"'.$row->formulation.'",'; + } + + + $sql="select * from opd_dose_remark"; + $query = $this->db->query($sql); + $opd_dose_remark= $query->result(); + + $data['opd_dose_remark']=''; + foreach($opd_dose_remark as $row) + { + $data['opd_dose_remark'].='"'.$row->dose_remark.'",'; + } + + + $sql="select * from opd_advice"; + $query = $this->db->query($sql); + $data['opd_advise']= $query->result(); + + $sql="select * from opd_master where opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select * + from opd_prescription_advice where opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_patient_advice']= $query->result(); + + $data['advice_given']=$this->load->view('dashboard/opd_prescribed_advice',$data,true); + + $sql="select * from opd_prescription where opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_prescription']= $query->result(); + + $data['doc_id']=$data['opd_master'][0]->doc_id; + $data['opd_id']=$opd_id; + $data['opd_session_id']=$opd_session_id; + $data['p_id']=$data['opd_master'][0]->p_id; + + $this->load->view('dashboard/opd_prescribed_dose',$data); + + } + + + function add_patient_advice() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $opd_id=$this->input->post('opd_id'); + $opd_pre_id=$this->input->post('opd_session_id'); + + $advice_id=$this->input->post('advice_id'); + + $sql="select * from opd_advice where id=$advice_id"; + $query = $this->db->query($sql); + $opd_advice= $query->result(); + + $opd_advice_text=""; + $opd_advice_text_hindi=""; + + if(count($opd_advice)>0){ + $opd_advice_text=$opd_advice[0]->advice; + $opd_advice_text_hindi=$opd_advice[0]->advice_hindi; + } + + $data_insert=array( + 'opd_id'=>$opd_id, + 'opd_pre_id'=>$opd_pre_id, + 'advice_id'=>$advice_id, + 'advice_txt'=>$opd_advice_text, + 'advice_txt_hindi'=>$opd_advice_text_hindi, + ); + + + $this->Prescription_M->insert_opd_patient_advice($data_insert); + + $sql="select * + from opd_prescription_advice where opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_patient_advice']= $query->result(); + + $this->load->view('dashboard/opd_prescribed_advice',$data); + + + } + + function del_patient_advice($advice_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $sql="select * from opd_prescription_advice where id=$advice_id"; + $query = $this->db->query($sql); + $opd_advice= $query->result(); + + $opd_id=$opd_advice[0]->opd_id; + + + $this->Prescription_M->remove_opd_patient_advice($advice_id); + + $sql="select * + from opd_prescription_advice where opd_id=$opd_id"; + $query = $this->db->query($sql); + $data['opd_patient_advice']= $query->result(); + + $this->load->view('dashboard/opd_prescribed_advice',$data); + + } + + public function get_invprofiles($invPCode) + { + if($invPCode=='') + { + $invPCode="0"; + }else{ + $invPCode = str_replace('-',',',$invPCode); + } + + $sql="select p.Code as p_Code,p.Name,i.Name,i.Code as i_Code + from (invprofiles p join invtprofiles j on p.Code=j.ProfileCode ) + join investigation i on i.Code=j.InvestigationCode + where p.Code in (".$invPCode.") + order by p.Name,j.printOrder"; + $query = $this->db->query($sql); + $invprofiles= $query->result(); + + $content=""; + + foreach($invprofiles as $row) + { + $content.= '
+ +
'; + } + + $content.=''; + + echo $content; + } + + public function add_AdviseInvest($invACode,$opdSession) + { + $rangeArray = explode("-",$invACode); + + foreach($rangeArray as $value) + { + $sql="select * from opd_prescription_investigation + where opd_pre_id=".$opdSession." and investigation_code=".$value." order by investigation_name"; + $query = $this->db->query($sql); + $invChk= $query->result(); + + if(count($invChk)==0) + { + $sql="select * + from investigation + where Code='".$value."' "; + $query = $this->db->query($sql); + $invprofiles= $query->result(); + + $investigation_name=""; + if(count($invprofiles)>0) + { + $investigation_name=$invprofiles[0]->Name; + } + + $datainsert = array( + 'opd_pre_id' => $opdSession, + 'investigation_code' => $value, + 'investigation_name' => $investigation_name + ); + + + $this->Prescription_M->insert_p_investigation($datainsert); + } + } + + $sql="select * from opd_prescription_investigation + where opd_pre_id=".$opdSession." order by investigation_name"; + $query = $this->db->query($sql); + $invOPDprofiles= $query->result(); + + $content=""; + + foreach($invOPDprofiles as $row) + { + $content.= ' + + + + '; + } + $content.="
'.$row->investigation_name.' Remove
"; + echo $content; + } + + public function Remove_AdviseInvest($invACode,$opdSession) + { + $sql="select * from opd_prescription_investigation + where opd_pre_id=".$opdSession." and investigation_code=".$invACode." "; + + $query = $this->db->query($sql); + $invChk= $query->result(); + + + + if(count($invChk)>0) + { + $this->Prescription_M->remove_p_investigation($invChk[0]->id); + } + + $sql="select * from opd_prescription_investigation + where opd_pre_id=".$opdSession." order by investigation_name"; + $query = $this->db->query($sql); + $invOPDprofiles= $query->result(); + + $content=""; + + foreach($invOPDprofiles as $row) + { + $content.= ' + + + + '; + } + $content.="
'.$row->investigation_name.' Remove
"; + echo $content; + } + + public function get_complaints(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from complaints_master where Name like '%".$q."%' "; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['Name'])); + $new_row['value']=htmlentities(stripslashes($row['Name'])); + + $new_row['complaints_no']=htmlentities(stripslashes($row['Code'])); + + $new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + + public function get_surgery(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from surgery where Name like '%".$q."%' "; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['Name'])); + $new_row['value']=htmlentities(stripslashes($row['Name'])); + + $new_row['surgery_no']=htmlentities(stripslashes($row['Code'])); + + $new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_disease(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from disease_master where Name like '%".$q."%' order by Name"; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['Name'])); + $new_row['value']=htmlentities(stripslashes($row['Name'])); + + $new_row['complaints_no']=htmlentities(stripslashes($row['Code'])); + + $new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_investigation(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from investigation where Name like '%".$q."%' or short_name like '%".$q."%' order by Name"; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['Name'])); + $new_row['value']=htmlentities(stripslashes($row['Name'])); + + $new_row['investigation_no']=htmlentities(stripslashes($row['Code'])); + + $new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function vital_data($opd_session_id) + { + $sql="select * from opd_prescription where id=".$opd_session_id; + $query = $this->db->query($sql); + $opd_prescription= $query->result(); + + $content="

"; + + if($opd_prescription[0]->bp<>'') + { + $content.="BP :".$opd_prescription[0]->bp." / ".$opd_prescription[0]->diastolic."
"; + } + + if($opd_prescription[0]->pulse<>'') + { + $content.="Pulse :".$opd_prescription[0]->pulse."
"; + } + + if($opd_prescription[0]->temp<>'') + { + $content.="Temp :".$opd_prescription[0]->temp." C"."
"; + } + + if($opd_prescription[0]->spo2<>'') + { + $content.="SpO2 :".$opd_prescription[0]->spo2." %"."
"; + } + + if($opd_prescription[0]->glucose<>'') + { + $content.="Blood Sugar :".$opd_prescription[0]->glucose."
"; + } + + $content.="

"; + + echo $content; + + } + + public function get_remark($p_id) + { + $sql="select * from patient_remark where p_id=".$p_id." Order by id desc"; + $query = $this->db->query($sql); + $patient_remark= $query->result(); + + $content=""; + + foreach($patient_remark as $row) + { + $content.="

".nl2br($row->remark)."
"; + $content.="Update By:".$row->insert_by."
"; + } + + $data['content']= $content; + + + } + + public function patient_remark($p_id) + { + $sql="select *,Date_Format(insert_datetime,'%d/%m/%Y %H:%i') as ins_time from patient_remark where p_id=".$p_id." Order by id desc"; + $query = $this->db->query($sql); + $data['patient_remark']= $query->result(); + + $sql="select * from tag_master Order by tag_name"; + $query = $this->db->query($sql); + $data['tag_master']= $query->result(); + + $sql="SELECT a.*,t.tag_name,t.tag_type_id + FROM patient_tag_assign a JOIN tag_master t ON a.tag_id=t.id + WHERE isdelete=0 and a.p_id=$p_id"; + $query = $this->db->query($sql); + $data['patient_tag_list']= $query->result(); + + $data['p_id']=$p_id; + + $this->load->view('dashboard/patient_remark',$data); + } + + + + public function get_medical(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from opd_med_master + where item_name like '%".$q."%' order by item_name"; + + $sql=$sql." limit 10"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['item_name'])).' ['.htmlentities(stripslashes($row['formulation'])).']'; + $new_row['value']=htmlentities(stripslashes($row['item_name'])); + $new_row['med_id']=htmlentities(stripslashes($row['id'])); + $new_row['item_name']=htmlentities(stripslashes($row['item_name'])); + $new_row['formulation']=htmlentities(stripslashes($row['formulation'])); + $new_row['genericname']=htmlentities(stripslashes($row['genericname'])); + + $new_row['dosage']=htmlentities(stripslashes($row['dosage'])); + $new_row['dosage_when']=htmlentities(stripslashes($row['dosage_when'])); + $new_row['dosage_freq']=htmlentities(stripslashes($row['dosage_freq'])); + $new_row['no_of_days']=htmlentities(stripslashes($row['no_of_days'])); + $new_row['qty']=htmlentities(stripslashes($row['qty'])); + $new_row['remark']=htmlentities(stripslashes($row['remark'])); + + $row_set[] = $new_row; //build an array + } + }else{ + $row_set[] =''; + } + + echo json_encode($row_set); //format the array into json data + } + } + + // Enhanced medicine autocomplete API + public function get_medicine_autocomplete() + { + $this->load->helper('url'); + + // Get search parameters + $query = $this->input->get('query') ?: $this->input->get('term'); + $category = $this->input->get('category') ?: 'medicine_name'; + $limit = (int)($this->input->get('limit') ?: 10); + + if (empty($query) || strlen($query) < 1) { + echo json_encode(['success' => false, 'data' => []]); + return; + } + + $user = $this->ion_auth->user()->row(); + $doc_id = $user->id; + + $response_data = []; + + switch($category) { + case 'medicine_name': + $sql = "SELECT DISTINCT item_name as text, 'global' as scope, id as med_id, formulation, genericname + FROM opd_med_master + WHERE item_name LIKE ? + ORDER BY item_name + LIMIT ?"; + $result = $this->db->query($sql, ['%' . $query . '%', $limit]); + + foreach($result->result() as $row) { + $response_data[] = [ + 'text' => $row->text, + 'scope' => $row->scope, + 'med_id' => $row->med_id, + 'formulation' => $row->formulation, + 'genericname' => $row->genericname + ]; + } + break; + + case 'dosage': + $dosage_patterns = [ + '1-0-1', '1-1-1', '0-1-0', '1-0-0', '0-0-1', '2-1-1', '1-1-2', + '1/2-0-1/2', '1/2-1/2-1/2', '2-0-2', '1-2-1', '3-2-1', '1-1-1-1', + '2-2-2', '1/4-1/4-1/4', '3/4-3/4-3/4', 'As required', 'SOS' + ]; + foreach($dosage_patterns as $pattern) { + if (stripos($pattern, $query) !== false) { + $response_data[] = ['text' => $pattern, 'scope' => 'global']; + } + } + break; + + case 'dosage_when': + $when_options = [ + 'Before meal', 'After meal', 'With meal', 'Empty stomach', + 'At bedtime', 'Morning', 'Evening', 'As directed' + ]; + foreach($when_options as $option) { + if (stripos($option, $query) !== false) { + $response_data[] = ['text' => $option, 'scope' => 'global']; + } + } + break; + + case 'dosage_frequency': + $frequency_options = [ + 'Daily', 'Twice daily', 'Thrice daily', 'Four times daily', + 'Once weekly', 'Twice weekly', 'Every other day', 'As needed', + 'Every 4 hours', 'Every 6 hours', 'Every 8 hours', 'Every 12 hours' + ]; + foreach($frequency_options as $option) { + if (stripos($option, $query) !== false) { + $response_data[] = ['text' => $option, 'scope' => 'global']; + } + } + break; + + case 'dosage_duration': + $duration_options = [ + '3 days', '5 days', '7 days', '10 days', '14 days', '21 days', '30 days', + '1 week', '2 weeks', '3 weeks', '1 month', '2 months', '3 months', + 'Till symptoms subside', 'Continue as advised' + ]; + foreach($duration_options as $option) { + if (stripos($option, $query) !== false) { + $response_data[] = ['text' => $option, 'scope' => 'global']; + } + } + break; + } + + echo json_encode([ + 'success' => true, + 'data' => array_slice($response_data, 0, $limit) + ]); + } + + public function opd_prescription_save() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_update_info = $user->first_name.''. $user->last_name.'['.$user->id.']'.date('d-m-Y H:i:s'); + + $opd_session_id=$this->input->post('opd_session_id'); + $opd_id=$this->input->post('opd_id'); + $input_Examinations=$this->input->post('input_Examinations'); + $input_Prescriber=$this->input->post('input_Prescriber'); + + $p_id=$this->input->post('p_id'); + + $input_complaints=trim($this->input->post('input_complaints')); + $input_Investigation=trim($this->input->post('input_Investigation')); + $input_diagnosis=trim($this->input->post('input_diagnosis')); + $input_Provisional_diagnosis=trim($this->input->post('input_Provisional_diagnosis')); + + $input_BP=$this->input->post('input_BP'); + $input_Diastolic=$this->input->post('input_Diastolic'); + $input_Height=$this->input->post('input_Height'); + $input_Weight=$this->input->post('input_Weight'); + $input_Waist=$this->input->post('input_Waist'); + $input_RR=$this->input->post('input_RR'); + + $input_Tempature=$this->input->post('input_Tempature'); + $input_Pulse=$this->input->post('input_Pulse'); + + $input_SPO2=$this->input->post('input_SPO2'); + $input_glucose=$this->input->post('input_glucose'); + + $opd_prescription_paediatric_chk=$this->input->post('opd_prescription_paediatric_chk'); + $opd_prescription_pregnancy_chk=$this->input->post('opd_prescription_pregnancy_chk'); + $opd_prescription_lactation_chk=$this->input->post('opd_prescription_lactation_chk'); + $opd_prescription_liver_insufficiency_chk=$this->input->post('opd_prescription_liver_insufficiency_chk'); + $opd_prescription_renal_insufficiency_chk=$this->input->post('opd_prescription_renal_insufficiency_chk'); + $opd_prescription_pulmonary_insufficiency_chk=$this->input->post('opd_prescription_pulmonary_insufficiency_chk'); + $opd_prescription_corona_suspected_chk=$this->input->post('opd_prescription_corona_suspected_chk'); + $opd_prescription_dengue_chk=$this->input->post('opd_prescription_dengue_chk'); + + $opd_prescription_smoking_chk=$this->input->post('opd_prescription_smoking_chk'); + $opd_prescription_alcohol_chk=$this->input->post('opd_prescription_alcohol_chk'); + $opd_prescription_drug_chk=$this->input->post('opd_prescription_drug_chk'); + + + $input_pallor=$this->input->post('input_pallor'); + $input_Icterus=$this->input->post('input_Icterus'); + $input_cyanosis=$this->input->post('input_cyanosis'); + $input_clubbing=$this->input->post('input_clubbing'); + $input_edema=$this->input->post('input_edema'); + + $pain_value=$this->input->post('pain_value'); + + $morbidities = $this->input->post('morbidities_list'); + + $morbidities_list = explode("-", $morbidities); + + $sql="select * from opd_prescription where opd_id=".$opd_id." and id=".$opd_session_id; + $query = $this->db->query($sql); + $dataRec= $query->result(); + + $content="Nothing Done"; + + if(count($dataRec)>0) + { + $dataupdate = array( + 'Finding_Examinations' => strtoupper($input_Examinations), + 'Prescriber_Remarks' => strtoupper($input_Prescriber), + 'bp' => $input_BP, + 'diastolic' => $input_Diastolic, + 'pulse' => $input_Pulse, + 'height' => $input_Height, + 'weight' => $input_Weight, + 'waist' => $input_Waist, + 'temp' => $input_Tempature, + 'rr_min' => $input_RR, + 'spo2' => $input_SPO2, + 'glucose' => $input_glucose, + 'update_by' => $user_update_info, + + 'complaints' => strtoupper($input_complaints), + 'Investigation' => strtoupper($input_Investigation), + 'diagnosis' => strtoupper($input_diagnosis), + 'Provisional_diagnosis' => strtoupper($input_Provisional_diagnosis), + + 'paediatric' => $opd_prescription_paediatric_chk, + 'pregnancy' => $opd_prescription_pregnancy_chk, + 'lactation' => $opd_prescription_lactation_chk, + 'liver_insufficiency' => $opd_prescription_liver_insufficiency_chk, + 'renal_insufficiency' => $opd_prescription_renal_insufficiency_chk, + 'pulmonary_insufficiency' => $opd_prescription_pulmonary_insufficiency_chk, + 'corona_suspected'=> $opd_prescription_corona_suspected_chk, + 'dengue'=> $opd_prescription_dengue_chk, + + 'pallor' => strtoupper($input_pallor), + 'Icterus' => strtoupper($input_Icterus), + 'cyanosis' => strtoupper($input_cyanosis), + 'clubbing' => strtoupper($input_clubbing), + 'edema' => strtoupper($input_edema), + + 'pain_value' => $pain_value, + + ); + + $dataPatientMaster=array( + 'is_smoking' => $opd_prescription_smoking_chk, + 'is_alcohol'=> $opd_prescription_alcohol_chk, + 'is_drug_abuse'=> $opd_prescription_drug_chk, + ); + + $this->Prescription_M->update_opd_prescription($dataupdate,$opd_session_id); + + $this->Patient_M->update($dataPatientMaster,$p_id); + + $sql="SELECT m.mor_id,m.morbidities + FROM morbidities_master m Where m.active=1"; + $query = $this->db->query($sql); + $morbidities_data= $query->result(); + + + foreach($morbidities_data as $row){ + if(in_array($row->mor_id,$morbidities_list)){ + $this->Prescription_M->update_patient_morbidities($p_id,$row->mor_id,0); + }else{ + $this->Prescription_M->update_patient_morbidities($p_id,$row->mor_id,1); + } + } + + $content="Update Done"; + } + + echo $content; + } + + public function save_prescribed_extra() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + $opd_session_id=$this->input->post('opd_session_id'); + + $advice=$this->input->post('input_advice'); + $next_visit=$this->input->post('input_next_visit'); + $refer_to=$this->input->post('input_refer_to'); + + $sql="select * from opd_prescription where id=".$opd_session_id; + $query = $this->db->query($sql); + $dataRec= $query->result(); + + $content="Nothing Done"; + + if(count($dataRec)>0) + { + $dataupdate = array( + 'advice' => $advice, + 'next_visit' => $next_visit, + 'refer_to'=> $refer_to, + ); + + + $this->Prescription_M->update_opd_prescription($dataupdate,$opd_session_id); + + $content="Update Done"; + } + + echo $content; + } + + + + + + + //Medical + + public function add_medical() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $input_med_name=strtoupper($this->input->post('input_med_name')); + $input_med_type=$this->input->post('input_med_type'); + $input_dosage=$this->input->post('input_dosage'); + $input_dosage_when=$this->input->post('input_dosage_when'); + $input_dosage_freq=$this->input->post('input_dosage_freq'); + $input_dose_where=$this->input->post('input_dose_where'); + $input_no_of_days=$this->input->post('input_no_of_days'); + $input_qty=$this->input->post('input_qty'); + $input_remark=strtoupper($this->input->post('input_remark')); + $hid_med_id=$this->input->post('hid_med_id'); + $opd_session_id=$this->input->post('opd_session_id'); + $opd_med_item_id=$this->input->post('opd_med_item_id'); + + $insert_master = array( + 'item_name' => $input_med_name, + 'formulation' => $input_med_type, + ); + + if($hid_med_id==0) + { + $sql="Select * from opd_med_master Where Trim(item_name)='$input_med_name'"; + $query = $this->db->query($sql); + $opd_med_master= $query->result(); + + if(count($opd_med_master)>0){ + $hid_med_id=$opd_med_master[0]->id; + }else{ + $hid_med_id=$this->Prescription_M->insert_med_master($insert_master); + } + } + + $datainsert = array( + 'opd_pre_id' => $opd_session_id, + 'med_name' => $input_med_name, + 'med_id' => $hid_med_id, + 'med_type' => $input_med_type, + 'dosage' => $input_dosage, + 'dosage_when' => $input_dosage_when, + 'dosage_freq' => $input_dosage_freq, + 'dosage_where' => $input_dose_where, + 'qty' => $input_qty, + 'no_of_days' => $input_no_of_days, + 'remark' => $input_remark, + 'update_by' => $user_name + ); + + $update_master = array( + 'formulation' => $input_med_type, + 'dosage' => $input_dosage, + 'dosage_when' => $input_dosage_when, + 'dosage_freq' => $input_dosage_freq, + 'dosage_where' => $input_dose_where, + 'qty' => $input_qty, + 'no_of_days' => $input_no_of_days, + 'remark' => $input_remark, + ); + + $this->Prescription_M->update_med_master($update_master,$hid_med_id); + + if($opd_med_item_id>0) + { + $this->Prescription_M->update_p_medical($datainsert,$opd_med_item_id); + }else{ + $this->Prescription_M->insert_p_medical($datainsert); + } + + $content=""; + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $data['opd_drug']= $query->result(); + + $content=$this->load->view('dashboard/opd_prescription_med_list',$data,TRUE); + + echo $content; + + } + + public function medical_Select() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $opd_session_id=$this->input->post('opd_session_id'); + $rec_id=$this->input->post('med_prec_id'); + + $sql="select * from opd_prescrption_prescribed + where id=".$rec_id." and opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $dataRec= $query->result(); + + $rvar=array( + "id" => $dataRec[0]->id, + "opd_session_id" => $opd_session_id, + "med_name" => $dataRec[0]->med_name, + "med_type" => $dataRec[0]->med_type, + "dosage" => $dataRec[0]->dosage, + "dosage_when" => $dataRec[0]->dosage_when, + "dosage_freq" => $dataRec[0]->dosage_freq, + "no_of_days" => $dataRec[0]->no_of_days, + "qty" => $dataRec[0]->qty, + "remark" => $dataRec[0]->remark, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function medical_prescribed_Remove($p_med_id,$opd_session_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + + + $sql="select * from opd_prescrption_prescribed + where id=$p_med_id"; + $query = $this->db->query($sql); + $dataRec= $query->result(); + + if(count($dataRec)>0) + { + $this->load->model('Doctor_M'); + $this->Prescription_M->remove_p_medical($p_med_id); + } + + $content=""; + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $data['opd_drug']= $query->result(); + + $content=$this->load->view('dashboard/opd_prescription_med_list',$data,TRUE); + + echo $content; + } + + public function update_medical() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $medical_remarks=$this->input->post('medical_remarks'); + $opd_session_id=$this->input->post('opd_session_id'); + $rec_id=$this->input->post('invACode'); + + $sql="select * from opd_prescrption_prescribed + where id=".$rec_id." and opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $dataRec= $query->result(); + + $content="Nothing Done"; + + if(count($dataRec)>0) + { + $dataupdate = array( + 'remark' => $medical_remarks, + 'update_by' => $user_name + ); + + + $this->Prescription_M->update_p_medical($dataupdate,$rec_id); + + $content="Update Done"; + } + + echo $content; + } + + + public function remove_medical($p_med_id,$rx_group_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $sql="select * from opd_prescrption_prescribed_template + where id=$p_med_id"; + $query = $this->db->query($sql); + $dataRec= $query->result(); + + if(count($dataRec)>0) + { + $this->load->model('Doctor_M'); + $this->Doctor_M->remove_p_medical($p_med_id); + } + + $sql="select * from opd_prescription_template + Where id=$rx_group_id"; + $query = $this->db->query($sql); + $data['opd_prescription_template']= $query->result(); + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed_template pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + Where rx_group_id=$rx_group_id"; + $query = $this->db->query($sql); + $data['opd_prescrption_prescribed_template']= $query->result(); + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_medicine_list',$data); + } + + + public function opd_prescription_print($opdid,$opd_session_id,$print_type=0) + { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="Select * from opd_master where opd_id=$opdid"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pno=$opd_master[0]->p_id; + + $doc_id=0; + $no_opd_days=5-1; + + if(count($opd_master)>0){ + + $doc_id=$opd_master[0]->doc_id; + + $sql="select d.* ,group_concat(m.SpecName) as SpecName + FROM (doctor_master d left JOIN doc_spec s on d.id =s.doc_id) + join med_spec m on s.med_spec_id =m.id + WHERE d.id=$doc_id "; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + } + + $sql="SELECT o.*,DATE_FORMAT(o.apointment_date,'%d-%m-%Y') as str_apointment_date, + + date_format(date_add(o.apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date, + date_format(opd_book_date,'%d-%m-%Y %H:%i') as str_opd_book_date , + (case o.payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str , + d.doc_sign,DATE_FORMAT(o.last_opdvisit_date,'%d-%m-%Y') as str_last_opdvisit_date, + d.opd_print_format + from opd_master o JOIN doctor_master d ON o.doc_id=d.id where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $data['opd_master']=$opd_master; + + $sql="select * from opd_prescription where opd_id=".$opdid." and id=".$opd_session_id; + $query = $this->db->query($sql); + $opd_prescription= $query->result(); + + $sql="select * from opd_prescription_advice where opd_id=".$opdid." and opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $opd_prescription_advice= $query->result(); + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$opd_master[0]->apointment_date."') AS str_age, + date_format(last_visit,'%d-%m-%Y %H:%i') as last_visit_str + from patient_master where id='".$opd_master[0]->p_id."' "; + $query = $this->db->query($sql); + $pdata= $query->result(); + + $sql="Select count(*) as rec_opd from opd_master where p_id=$pno"; + $query = $this->db->query($sql); + $no_opd= $query->result(); + + $total_no_visit=$no_opd[0]->rec_opd; + + $data['patient_master']=$pdata; + $patient_master=$pdata; + + $total_no_visit=$no_opd[0]->rec_opd+$patient_master[0]->no_of_visit; + + $sql="select *,date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date , + date_format(apointment_date,'%d-%m-%Y') as s_opd_date + from opd_master where p_id=".$opd_master[0]->p_id." and doc_id=".$opd_master[0]->doc_id." + and apointment_date >= date_add(sysdate(),interval -$no_opd_days day) and opd_fee_type<>3"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $data['old_opd']=$old_opd; + + $sql="select * from hc_insurance where id=".$opd_master[0]->insurance_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + $data['insurance']=$insurance; + + if($opd_master[0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$opd_master[0]->insurance_case_id; + $query = $this->db->query($sql); + $case_master= $query->result(); + + $data['case_master']=$case_master; + } + + $old_uhid=''; + if($patient_master[0]->udai<>"") + { + $old_uhid= ' /'.$patient_master[0]->udai; + } + $data['old_uhid']=$old_uhid; + + $exp_date=""; + + if($opd_master[0]->opd_fee_type=='3'){ + if(count($old_opd)>0){ + $exp_date= 'OPD Start Date : '.$old_opd[0]->s_opd_date.'
Valid Upto :'.$old_opd[0]->opd_Exp_Date.'
'; + } + }else{ + $exp_date="Valid Upto : ".$opd_master[0]->opd_Exp_Date .""; + } + + $last_opdvisit_date=""; + + if($opd_master[0]->last_opdvisit_date=='') + { + if($patient_master[0]->last_visit=='') + { + $last_opdvisit_date=""; + }else{ + $last_opdvisit_date='
Last Visit :'.$patient_master[0]->last_visit_str; + } + + + }else{ + $last_opdvisit_date='
Last Visit :'.$opd_master[0]->str_last_opdvisit_date; + } + + $sql="SELECT group_concat(m.short_name) AS m_name + FROM morbidities_master m JOIN patient_morbidities c ON m.mor_id=c.morbidities AND c.p_id=".$pno; + $query = $this->db->query($sql); + $patient_morbidities= $query->result(); + + $data['morbidities']=""; + + if($patient_morbidities[0]->m_name<>'') + { + $data['morbidities']=$patient_morbidities[0]->m_name; + } + + $data['Complication']=''; + if($opd_prescription[0]->pregnancy==1) + { + $data['Complication'].='Pregnancy,'; + } + + if($opd_prescription[0]->lactation==1) + { + $data['Complication'].='Lactation,'; + } + + if($opd_prescription[0]->liver_insufficiency==1) + { + $data['Complication'].='Liver insufficiency,'; + } + + if($opd_prescription[0]->renal_insufficiency==1) + { + $data['Complication'].='Renal Insufficiency,'; + } + + if($opd_prescription[0]->pulmonary_insufficiency==1) + { + $data['Complication'].='Pulmonary Insufficiency,'; + } + + if($opd_prescription[0]->corona_suspected==1) + { + $data['Complication'].='Corona Suspected,'; + } + + if($opd_prescription[0]->dengue==1) + { + $data['Complication'].='Dengue,'; + } + + $data['Addiction']=''; + + if($patient_master[0]->is_smoking==1) + { + $data['Addiction'].='Smoking,'; + } + + if($patient_master[0]->is_alcohol==1) + { + $data['Addiction'].='Alcoholic,'; + } + + if($patient_master[0]->is_drug_abuse==1) + { + $data['Addiction'].='Drug Abuse,'; + } + + + + $data['exp_date']=$exp_date; + $data['last_opdvisit_date']=$last_opdvisit_date; + + $data['doc_name']='Dr. '.$opd_master[0]->doc_name; + $data['doc_sign']=nl2br($opd_master[0]->doc_sign); + $data['SpecName']=$doctor_master[0]->SpecName; + + + $data['pName']=$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname) ; + $data['pRelative']=$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname) ; + $data['age_sex']=$patient_master[0]->str_age.' / '.$patient_master[0]->xgender; + $data['opd_no']=$opd_master[0]->opd_code; + $data['opd_date']=$opd_master[0]->str_apointment_date; + + $data['opd_fee']= 'Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc ; + $data['opd_fee_desc']= $opd_master[0]->opd_fee_desc ; + + $data['opd_sr_no']=$opd_master[0]->opd_no; + + $data['str_opd_book_date']=$opd_master[0]->str_opd_book_date; + + + $data['short_info']='Sr No.: '.$opd_master[0]->opd_no .' +
OPD Fee : Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc .'
+ UHID : '.$patient_master[0]->p_code.'
+ P Add. :'.$patient_master[0]->add1.','.$patient_master[0]->city.''; + + $data['short_info_1']='Sr No.: '.$opd_master[0]->opd_no .' + / OPD Fee : Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc .' / + UHID : '.$patient_master[0]->p_code.' / No. of Visit : '.$total_no_visit.'
'.$last_opdvisit_date; + + $data['uhid_no']=$patient_master[0]->p_code; + $data['phoneno']=$patient_master[0]->mphone1; + $data['p_address']=$patient_master[0]->add1.','.$patient_master[0]->city.''; + $data['total_no_visit']=$total_no_visit; + $data['exp_date']=$exp_date; + + $data['opd_book_date']=$opd_master[0]->opd_book_date; + $sql="SELECT pt.* ,d.dose_show_sign AS dose_shed,d.dose_show_desc AS dose_shed_hindi, + dw.dose_sign_desc AS dose_when,dw.dose_sign_hindi AS dose_when_hindi, + df.dose_sign_desc AS dose_frequency,df.dose_sign_hindi AS dose_frequency_hindi, + d_on.dose_sign_desc AS dose_where,d_on.dose_sign_hindi AS dose_where_hindi, + m.genericname + FROM ((((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id) + LEFT JOIN opd_med_master m ON pt.med_id =m.id + where opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $opd_p_prescribed= $query->result(); + + $top_content=""; + $barContent=""; + + $top_content.="

OPD No.:".$opd_master[0]->opd_code." / Date : ".$opd_master[0]->str_apointment_date."

"; + $top_content.="

Patient ID :".$pdata[0]->p_code."
+ Patient Name : ".$pdata[0]->p_fname."
+ Gender: ".$pdata[0]->xgender."
+ Age:".$pdata[0]->str_age."

"; + + $barContent.="OPD No:".$opd_master[0]->opd_code. PHP_EOL ."OD:".$opd_master[0]->str_apointment_date. PHP_EOL ."Doc.:".$opd_master[0]->doc_name."[".$opd_master[0]->doc_spec."]". PHP_EOL ; + $barContent.="PID:".$pdata[0]->p_code. PHP_EOL ."PN:".$pdata[0]->p_fname."/".$pdata[0]->xgender."/A:".$pdata[0]->str_age. PHP_EOL; + + $vital_content=""; + + if($opd_prescription[0]->pulse<>'') + { + $vital_content.=" Pulse : ".$opd_prescription[0]->pulse." bpm"; + } + + if($opd_prescription[0]->diastolic<>'') + { + + if($opd_prescription[0]->bp<>'') + { + $vital_content.=" BP : ".$opd_prescription[0]->bp; + } + + $vital_content.="/".$opd_prescription[0]->diastolic; + + $vital_content.=" mmHg"; + } + + if($opd_prescription[0]->spo2<>'') + { + $vital_content.=" / SpO2: ".$opd_prescription[0]->spo2." %"; + } + + if($opd_prescription[0]->temp<>'') + { + $vital_content.=" / Temp: ".$opd_prescription[0]->temp." F"; + } + + + if($opd_prescription[0]->weight<>'') + { + $vital_content.=" / Weight : ".$opd_prescription[0]->weight." KG"; + } + + if($opd_prescription[0]->height<>'') + { + $vital_content.=" / Height : ".$opd_prescription[0]->height." cm"; + } + + $vital_content="

".$vital_content."

"; + + $Complaint=""; + + if($opd_prescription[0]->complaints!='') + { + $Complaint="Complaint : "; + $Complaint.=''.nl2br(trim(trim($opd_prescription[0]->complaints),",")).'
'; + } + + $painscale=""; + + if($opd_prescription[0]->pain_value>0) + { + $painscale="Pain Scale : "; + $pain_value=$opd_prescription[0]->pain_value; + if($pain_value==1){ + $painscale.='Mild Pain'; + }elseif($pain_value==2){ + $painscale.='Moderate'; + }elseif($pain_value==3){ + $painscale.='Intence'; + }elseif($pain_value==4){ + $painscale.='Worst Pain Possible'; + } + } + + + $data['painscale_img']=''; + if($opd_prescription[0]->pain_value>=0) + { + $data['painscale_img']=''; + } + + $Provisional_diagnosis=""; + + if($opd_prescription[0]->Provisional_diagnosis!='') + { + $Provisional_diagnosis="Provisional Diagnosis : "; + $Provisional_diagnosis.=' '.nl2br(trim(trim($opd_prescription[0]->Provisional_diagnosis),",")).'
'; + + } + + $diagnosis=""; + + if($opd_prescription[0]->diagnosis!='') + { + $diagnosis="Diagnosis : "; + $diagnosis.=' '.nl2br(trim(trim($opd_prescription[0]->diagnosis),",")).'
'; + + } + + $investigation=""; + if($opd_prescription[0]->investigation!='') + { + $investigation="Investigation Advised : "; + $investigation.=' '.nl2br(trim(trim($opd_prescription[0]->investigation),",")).'
'; + } + + + $Finding_Examinations=""; + + if($opd_prescription[0]->Finding_Examinations!='') + { + $Finding_Examinations="Findings :
"; + $Finding_Examinations.=' '.nl2br(trim(trim($opd_prescription[0]->Finding_Examinations),",")).'
'; + + } + + $Prescriber_Remarks=""; + + if($opd_prescription[0]->Prescriber_Remarks!='') + { + $Prescriber_Remarks="Prescriber Diagnosis :
"; + $Prescriber_Remarks.=' '.nl2br(trim(trim($opd_prescription[0]->Prescriber_Remarks),",")).'
'; + + } + + + $advice=""; + + if(($opd_prescription[0]->advice!='') || count($opd_prescription_advice)>0) + { + $advice="Advice : "; + } + + if($opd_prescription[0]->advice!='') + { + $advice.=''.nl2br($opd_prescription[0]->advice).'
'; + } + + foreach($opd_prescription_advice as $row){ + $advice.=''.$row->advice_txt_hindi.'
'; + } + + $next_visit=""; + + if($opd_prescription[0]->next_visit!='') + { + $next_visit="Next Visit : "; + $next_visit.=''.$opd_prescription[0]->next_visit.'
'; + } + + $refer_to=""; + + if($opd_prescription[0]->refer_to!='') + { + $refer_to="Refer To : "; + $refer_to.=''.$opd_prescription[0]->refer_to.'
'; + } + + $medical=''; + $sr_no=1; + if(count($opd_p_prescribed)>0) + { + $medical="

Rx :

"; + $medical.= ' + + + + + + + '; + + foreach($opd_p_prescribed as $row) + { + $medical_extend=""; + + $medical.=' + + + + + '; + $medical.=' + + '; + + $sr_no=$sr_no+1; + + } + $medical.="
Medicine NameDosageQtyDay
'.$sr_no.' - '.$row->med_type.' '.$row->med_name.''.$row->dose_shed.' / '.$row->dose_shed_hindi.' '.$row->dose_when_hindi.' '.$row->dose_frequency_hindi.''.$row->qty.''.$row->no_of_days.'
'; + if(strlen($row->genericname)>0 || strlen($row->remark)>0 || strlen($row->dose_shed_hindi)>0) + { + if(strlen($row->genericname)>1) + { + $medical.='

Composition : '.$row->genericname.'

'; + } + + if(strlen($row->remark)>0) + { + $medical.='

Notes : '.$row->remark.'

'; + } + } + + $medical.='
"; + } + + + $doctor=""; + $doctor.='

Dr. '.$opd_master[0]->doc_name.'
['.$opd_master[0]->doc_spec.']

'; + + $data['Complaint']= trim(trim($Complaint),",") ; + $data['diagnosis']= trim(trim($diagnosis),","); + $data['Provisional_diagnosis']= trim(trim($Provisional_diagnosis),","); + $data['investigation']= trim(trim($investigation),","); + $data['medical']= trim(trim($medical),","); + $data['doctor']= trim(trim($doctor),","); + $data['top_content']= trim(trim($top_content),","); + $data['vital_content']= trim(trim($vital_content),","); + + $data['Finding_Examinations']= trim(trim($Finding_Examinations),","); + $data['Prescriber_Remarks']= trim(trim($Prescriber_Remarks),","); + + $data['advice']= trim(trim($advice),","); + $data['next_visit']= trim(trim($next_visit),","); + $data['refer_to']= trim(trim($refer_to),","); + + $data['painscale']=$painscale; + + + $this->load->library('M_pdf'); + + $file_name='Prescription-Rx-'.$opd_master[0]->opd_code."-".date('Ymdhis').".pdf"; + + //$filepath=$folder_name.'/'.$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + + if($print_type==0) + { + $print_format=$doctor_master[0]->rx_plain_paper; + $content=$this->load->view('/dashboard/'.$print_format,$data,TRUE); + }elseif($print_type==1){ + $print_format=$doctor_master[0]->rx_blank_letter_head; + $content=$this->load->view('/dashboard/'.$print_format,$data,TRUE); + }else{ + $print_format=$doctor_master[0]->rx_pre_print_letter_head_format; + $content=$this->load->view('/dashboard/'.$print_format,$data,TRUE); + } + + // OPD Visit Done + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.':T-'.date('d-m-Y h:m:s'); + + $status_str='Visit Done : Auto'; + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $dataupdate = array( + 'opd_status' => 2, + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + + // OPD Visit Done End Here + + $this->m_pdf->pdf->shrink_tables_to_fit = 1; + //echo $content; + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($file_name,"I"); + + } + + public function upload_video() + { + $folder_name='uploads/opdvideo/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + + if(isset($_FILES["audiovideo"])){ + // Define a name for the file + $fileName = "myaudiovideo.webm"; + + // In this case the current directory of the PHP script + $uploadDirectory = $folder_name.'/'. $fileName; + + // Move the file to your server + if (!move_uploaded_file($_FILES["audiovideo"]["tmp_name"], $uploadDirectory)) { + echo("Couldn't upload video !"); + } + else{ + echo("File Moved"); + } + } + elseif(isset($_FILES["audio"])){ + // Define a name for the file + $fileName = "myaudio.webm"; + + // In this case the current directory of the PHP script + $uploadDirectory = $folder_name.'/'. $fileName; + + // Move the file to your server + if (!move_uploaded_file($_FILES["audio"]["tmp_name"], $uploadDirectory)) { + echo("Couldn't upload video !"); + } + else{ + echo("File Moved"); + } + } + elseif(isset($_FILES["video"])){ + // Define a name for the file + $fileName = "myvideo.webm"; + + // In this case the current directory of the PHP script + $uploadDirectory = $folder_name.'/'. $fileName; + + // Move the file to your server + if (!move_uploaded_file($_FILES["video"]["tmp_name"], $uploadDirectory)) { + echo("Couldn't upload video !"); + } + else{ + echo("File Moved"); + } + } + elseif(isset($_FILES["stream"])){ + // Define a name for the file + $fileName = $_POST["name"]; + $file_number = $_POST["file_number"]; + $opd_id=$_POST["opd_id"]; + $file_name_id=$_POST["file_name_id"]; + + $folder_name=$folder_name.'/'.$opd_id; + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + // In this case the current directory of the PHP script + $uploadDirectory = $folder_name.'/'. $fileName.'.webm'; + + // Move the file to your server + if (!move_uploaded_file($_FILES["stream"]["tmp_name"], $uploadDirectory)) { + echo("Couldn't upload video !"); + } + else{ + //update last file + $last_file_number=$file_number-1; + $strFile2 = $folder_name.'/'."Main_video_".$file_number.'.webm'; + $strFile1 = $folder_name.'/'."Main_video_".$last_file_number.'.webm'; + + $final_file=$folder_name.'/'.$file_name_id.'_'.$file_number.'.webm'; + + $last_final_file=$folder_name.'/'.$file_name_id.'_'.$last_file_number.'.webm'; + + if($last_file_number>0) + { + $last_final_file=$folder_name.'/'.$file_name_id.'_'.$last_file_number.'.webm'; + } + + $chk_file=file_exists($last_final_file); + if($chk_file==1) + { + //First File + $objFH = fopen( $last_final_file, "rb" ); + $strBuffer1 = fread( $objFH, filesize( $last_final_file) ); + fclose( $objFH ); + + //Second File + $objFH = fopen( $strFile2, "rb" ); + $strBuffer2 = fread( $objFH, filesize( $strFile2) ); + fclose( $objFH ); + + // manipulate buffers here... + $strBuffer3 = $strBuffer1 . $strBuffer2; + + // open for write/binary-safe + $objFH = fopen( $final_file, "wb" ); + fwrite( $objFH, $strBuffer3 ); + fclose( $objFH ); + + unlink($last_final_file); + unlink($strFile2); + //unlink($strFile1); + }else{ + + //Second File + $objFH = fopen( $strFile2, "rb" ); + $strBuffer2 = fread( $objFH, filesize( $strFile2) ); + fclose($objFH); + + // manipulate buffers here... + $strBuffer3 = $strBuffer2; + + // open for write/binary-safe + $objFH = fopen( $final_file, "wb" ); + fwrite( $objFH, $strBuffer3 ); + fclose( $objFH ); + + echo 'File Not Found'; + unlink($strFile2); + } + + $data_upload = array( + 'opd_id' => $opd_id, + 'full_path' => $final_file, + ); + + $this->load->model('FileOPDRec_M'); + + $this->FileOPDRec_M->insert($data_upload,$file_name_id); + + echo("Success"); + + + } + } + else{ + echo "No file uploaded"; + } + } + + //Suggest Panel + + function new_rx_group($doc_id=0) + { + $data['doc_id']=$doc_id; + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_new',$data); + } + + function rx_group($opd_id,$doc_id) + { + $data['opd_id']=$opd_id; + $data['doc_id']=$doc_id; + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_save',$data); + } + + function rx_group_select($rx_group_id) + { + $opd_session_id = $this->input->post('opd_session_id'); + $rx_group_id=$this->input->post('rx_group_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.date('d-m-Y H:i:s'); + + + + $sql="select * from opd_prescrption_prescribed_template + Where rx_group_id=$rx_group_id"; + $query = $this->db->query($sql); + $prescrption_prescribed= $query->result(); + + if(count($prescrption_prescribed)>0 && $rx_group_id>0) + { + foreach($prescrption_prescribed as $row) + { + $prescrption_prescribed_data=array( + 'opd_pre_id' => $opd_session_id, + 'med_id' => $row->med_id, + 'med_name' => $row->med_name, + 'med_type' => $row->med_type, + 'dosage' => $row->dosage, + 'dosage_when' => $row->dosage_when, + 'dosage_freq' => $row->dosage_freq, + 'qty' => $row->qty, + 'no_of_days' => $row->no_of_days, + 'remark' => $row->remark, + 'update_by' => $user_name, + ); + + $this->Prescription_M->insert_p_medical($prescrption_prescribed_data); + + } + } + + $content=""; + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $data['opd_drug']= $query->result(); + + $content=$this->load->view('dashboard/opd_prescription_med_list',$data,TRUE); + + echo $content; + } + + function add_medicince_opd($opd_pre_prescribed_id,$opd_session_id) + { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.date('d-m-Y H:i:s'); + + + + $sql="select * from opd_prescrption_prescribed + Where id=$opd_pre_prescribed_id"; + $query = $this->db->query($sql); + $prescrption_prescribed= $query->result(); + + foreach($prescrption_prescribed as $row) + { + $prescrption_prescribed_data=array( + 'opd_pre_id' => $opd_session_id, + 'med_id' => $row->med_id, + 'med_name' => $row->med_name, + 'med_type' => $row->med_type, + 'dosage' => $row->dosage, + 'dosage_when' => $row->dosage_when, + 'dosage_freq' => $row->dosage_freq, + 'dosage_where' => $row->dosage_where, + 'qty' => $row->qty, + 'no_of_days' => $row->no_of_days, + 'remark' => $row->remark, + 'update_by' => $user_name, + ); + + $this->Prescription_M->insert_p_medical($prescrption_prescribed_data); + + } + + $content=""; + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $data['opd_drug']= $query->result(); + + $content=$this->load->view('dashboard/opd_prescription_med_list',$data,TRUE); + + echo $content; + } + + function add_medicine_opd_all($current_opd_id,$opd_session_id) + { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.date('d-m-Y H:i:s'); + + + + $sql="select * from opd_prescrption_prescribed + Where opd_pre_id=$opd_session_id"; + $query = $this->db->query($sql); + $prescrption_prescribed= $query->result(); + + if(count($prescrption_prescribed)>0) + { + foreach($prescrption_prescribed as $row) + { + $prescrption_prescribed_data=array( + 'opd_pre_id' => $current_opd_id, + 'med_id' => $row->med_id, + 'med_name' => $row->med_name, + 'med_type' => $row->med_type, + 'dosage' => $row->dosage, + 'dosage_when' => $row->dosage_when, + 'dosage_freq' => $row->dosage_freq, + 'qty' => $row->qty, + 'no_of_days' => $row->no_of_days, + 'remark' => $row->remark, + 'update_by' => $user_name, + ); + + $this->Prescription_M->insert_p_medical($prescrption_prescribed_data); + + } + } + + $content=""; + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_session_id; + $query = $this->db->query($sql); + $data['opd_drug']= $query->result(); + + $content=$this->load->view('dashboard/opd_prescription_med_list',$data,TRUE); + + echo $content; + } + + + + function save_rx_group_list($doc_id=0) + { + $sql="SELECT p.*,group_concat(m.med_name SEPARATOR '
' ) AS med_name_list + from opd_prescription_template p LEFT JOIN opd_prescrption_prescribed_template m + ON p.id=m.rx_group_id + WHERE p.doc_id=$doc_id or p.doc_id=0 + GROUP BY p.id"; + $query = $this->db->query($sql); + $data['rx_group_list']= $query->result(); + + $data['Color']=array( + 'bg-primary text-white', + 'bg-secondary text-white', + 'bg-success text-white', + 'bg-danger text-white', + 'bg-warning text-dark', + 'bg-info text-white', + 'bg-light text-dark', + 'bg-dark text-white', + 'bg-white text-dark', + ); + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_list',$data); + } + + function save_rx_group_show($rx_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select * from opd_prescription_template where id=$rx_id"; + $query = $this->db->query($sql); + $rx_master= $query->result(); + + $sql="select * from opd_prescrption_prescribed_template where rx_group_id=$rx_id"; + $query = $this->db->query($sql); + $rx_prescribed= $query->result(); + + $this->load->view('dashboard/opd_prescription_suggest_panel/opd_prev',$data); + + } + + + function update_opd_queue($opd_session_id) + { + $sql="select * from opd_prescription where id=$opd_session_id"; + $query = $this->db->query($sql); + $opd_prescription= $query->result(); + + if(count($opd_prescription)>0){ + $doc_id=$opd_prescription[0]->doc_id; + $date_opd_visit=$opd_prescription[0]->date_opd_visit; + + $this->load->model('Opd_M'); + $this->Opd_M->update_opd_queue_no($opd_session_id,$doc_id,$date_opd_visit); + } + + echo 'Queue Update'; + + } + + function rx_group_panel() + { + $sql="select * from opd_prescription_template order by rx_group_name"; + $query = $this->db->query($sql); + $data['rx_master']= $query->result(); + + $this->load->view('dashboard/rx_group',$data); + + } + + + function rx_group_list() + { + $sql="select * from opd_prescription_template order by rx_group_name"; + $query = $this->db->query($sql); + $data['rx_master']= $query->result(); + + $this->load->view('dashboard/rx_group_list',$data); + + } + + function save_rx_group_edit($rx_id) + { + + $sql="select * from opd_prescription_template where id=$rx_id"; + $query = $this->db->query($sql); + $data['rx_master']= $query->result(); + + $sql="select * from opd_prescrption_prescribed_template where rx_group_id=$rx_id"; + $query = $this->db->query($sql); + $data['rx_prescribed']= $query->result(); + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_show',$data); + + } + + + + function save_rx_group_from_opd_prescription() + { + $opd_id = $this->input->post('opd_session_id'); + $rx_group_name=$this->input->post('rx_group_name'); + $doc_id=$this->input->post('doc_id'); + + $this->load->model('Doctor_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $sql="select * from opd_prescription + Where id=$opd_id"; + $query = $this->db->query($sql); + $opd_prescription= $query->result(); + + echo $sql; + + $rx_group_id=0; + + if(count($opd_prescription)>0) + { + $opd_prescription_data=array( + 'rx_group_name' => $rx_group_name, + 'doc_id' => $doc_id, + 'update_by' => $user_name, + 'Finding_Examinations' => $opd_prescription[0]->Finding_Examinations, + 'Prescriber_Remarks' => $opd_prescription[0]->Prescriber_Remarks, + 'complaints' => $opd_prescription[0]->complaints, + 'diagnosis' => $opd_prescription[0]->diagnosis, + 'investigation' => $opd_prescription[0]->investigation, + ); + + $opd_pre_id=$opd_prescription[0]->id; + + $rx_group_id=$this->Doctor_M->insert_opd_prescription_template($opd_prescription_data); + + $sql="select * from opd_prescrption_prescribed + Where opd_pre_id=$opd_pre_id"; + $query = $this->db->query($sql); + $prescrption_prescribed= $query->result(); + + if(count($prescrption_prescribed)>0 && $rx_group_id>0) + { + foreach($prescrption_prescribed as $row) + { + $prescrption_prescribed_data=array( + 'rx_group_id' => $rx_group_id, + 'med_id' => $row->med_id, + 'med_name' => $row->med_name, + 'med_type' => $row->med_type, + 'dosage' => $row->dosage, + 'dosage_when' => $row->dosage_when, + 'dosage_freq' => $row->dosage_freq, + 'qty' => $row->qty, + 'no_of_days' => $row->no_of_days, + 'remark' => $row->remark, + 'update_by' => $user_name, + ); + + $rx_group_sub=$this->Doctor_M->insert_opd_prescrption_prescribed_template($prescrption_prescribed_data); + } + } + } + + echo $rx_group_id; + } + + function save_rx_group() + { + $rx_group_name = $this->input->post('input_rx_group_name'); + $complaints=$this->input->post('input_complaints'); + $diagnosis=$this->input->post('input_diagnosis'); + $investigation=$this->input->post('input_investigation'); + $Finding_Examinations=$this->input->post('input_Finding_Examinations'); + $id=$this->input->post('hid_rx_id'); + + $this->load->model('Doctor_M'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $opd_prescription_data=array( + 'rx_group_name' => $rx_group_name, + 'update_by' => $user_name, + 'Finding_Examinations' => $Finding_Examinations, + 'complaints' => $complaints, + 'diagnosis' => $diagnosis, + 'investigation' => $investigation, + ); + + if($id>0) + { + $this->Doctor_M->update_opd_prescription_template($opd_prescription_data,$id); + $rx_group_id=$id; + $show_text="Data Saved"; + }else{ + $rx_group_id=$this->Doctor_M->insert_opd_prescription_template($opd_prescription_data); + $show_text="Data Added"; + } + + $rvar=array( + 'insertid' =>$rx_group_id, + 'show_text'=>$show_text + ); + + + echo json_encode($rvar); + + } + + function rx_group_medicine($rx_group_id) + { + $sql="select * from opd_prescription_template + Where id=$rx_group_id"; + $query = $this->db->query($sql); + $data['opd_prescription_template']= $query->result(); + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed_template pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + Where rx_group_id=$rx_group_id"; + $query = $this->db->query($sql); + $data['opd_prescrption_prescribed_template']= $query->result(); + + $sql="select * from opd_dose_shed "; + $query = $this->db->query($sql); + $data['opd_dose_shed']= $query->result(); + + $sql="select * from opd_dose_when"; + $query = $this->db->query($sql); + $data['opd_dose_when']= $query->result(); + + $sql="select * from opd_dose_frequency"; + $query = $this->db->query($sql); + $data['opd_dose_frequency']= $query->result(); + + $sql="select * from opd_dose_where"; + $query = $this->db->query($sql); + $data['opd_dose_where']= $query->result(); + + $data['rx_group_id']=$rx_group_id; + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_medicine',$data); + + } + + + function rx_opd_medicine() + { + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_med_master pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + Order by pt.item_name"; + $query = $this->db->query($sql); + $data['opd_med_master']= $query->result(); + + $sql="select * from opd_dose_shed "; + $query = $this->db->query($sql); + $data['opd_dose_shed']= $query->result(); + + $sql="select * from opd_dose_when"; + $query = $this->db->query($sql); + $data['opd_dose_when']= $query->result(); + + $sql="select * from opd_dose_frequency"; + $query = $this->db->query($sql); + $data['opd_dose_frequency']= $query->result(); + + $sql="select * from opd_dose_where"; + $query = $this->db->query($sql); + $data['opd_dose_where']= $query->result(); + + + + $this->load->view('dashboard/opd_prescription_suggest_panel/opd_medicine_panel',$data); + + } + + + function rx_group_medicine_save($rx_group_id) + { + $this->load->model('Doctor_M'); + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $med_name = $this->input->post('input_med_name'); + $med_type=$this->input->post('input_med_type'); + $dosage=$this->input->post('input_dosage'); + $dosage_when=$this->input->post('input_dosage_when'); + $dosage_freq=$this->input->post('input_dosage_freq'); + $no_of_days=$this->input->post('input_no_of_days'); + $qty=$this->input->post('input_qty'); + $remark=$this->input->post('input_remark'); + $med_id=$this->input->post('hid_med_id'); + $dosage_where=$this->input->post('input_dose_where'); + $genericname=$this->input->post('input_genericname'); + + $rx_group_id=$rx_group_id; + $hid_p_med_id=$this->input->post('hid_p_med_id'); + + $insert_master = array( + 'item_name' => $med_name, + 'formulation' => $med_type, + 'dosage' => $dosage, + 'dosage_when' => $dosage_when, + 'dosage_freq' => $dosage_freq, + 'dosage_where' => $dosage_where, + 'genericname' => $genericname, + 'qty' => $qty, + 'no_of_days' => $no_of_days, + 'remark' => $remark, + 'genericname' => $genericname + ); + + if($med_id==0) + { + $med_id=$this->Prescription_M->insert_med_master($insert_master); + }else{ + $update_master = array( + 'dosage' => $dosage, + 'dosage_when' => $dosage_when, + 'dosage_freq' => $dosage_freq, + 'dosage_where' => $dosage_where, + 'qty' => $qty, + 'no_of_days' => $no_of_days, + 'remark' => $remark, + 'genericname' => $genericname + ); + + $this->Prescription_M->update_med_master($update_master,$med_id); + } + + $prescrption_prescribed_data=array( + 'rx_group_id' => $rx_group_id, + 'med_id' => $med_id, + 'med_name' => $med_name, + 'med_type' => $med_type, + 'dosage' => $dosage, + 'dosage_when' => $dosage_when, + 'dosage_freq' => $dosage_freq, + 'qty' => $qty, + 'no_of_days' => $no_of_days, + 'remark' => $remark, + 'dosage_where'=>$dosage_where, + 'update_by' => $user_name, + ); + + if($hid_p_med_id>0) + { + $rx_group_id_INSERT=$this->Doctor_M->update_opd_prescrption_prescribed_template($prescrption_prescribed_data,$hid_p_med_id); + $show_text="Data Update"; + }else{ + $rx_group_id_INSERT=$this->Doctor_M->insert_opd_prescrption_prescribed_template($prescrption_prescribed_data); + $show_text="Data Added"; + } + + $sql="select * from opd_prescrption_prescribed_template + Where id=$rx_group_id"; + $query = $this->db->query($sql); + $data['prescrption_prescribed']= $query->result(); + + $sql="SELECT * ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed_template pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + Where rx_group_id=$rx_group_id"; + $query = $this->db->query($sql); + $data['opd_prescrption_prescribed_template']= $query->result(); + + $this->load->view('dashboard/opd_prescription_suggest_panel/rx_group_medicine_list',$data); + + } + + + public function medical_Select_prescription_template() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $p_med_id=$this->input->post('p_med_id'); + + $sql="select * from opd_prescrption_prescribed_template + where id=$p_med_id"; + $query = $this->db->query($sql); + $prescribed_template= $query->result(); + + $rvar=array( + "med_id" => $prescribed_template[0]->med_id, + "med_name" => $prescribed_template[0]->med_name, + "med_type" => $prescribed_template[0]->med_type, + "dosage" => $prescribed_template[0]->dosage, + "dosage_when" => $prescribed_template[0]->dosage_when, + "dosage_freq" => $prescribed_template[0]->dosage_freq, + "qty" => $prescribed_template[0]->qty, + "no_of_days" => $prescribed_template[0]->no_of_days, + "remark" => $prescribed_template[0]->remark, + "p_med_id"=>$p_med_id, + 'genericname'=>$prescribed_template[0]->genericname, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + function patient_glucose_data($p_id) + { + $sql="Select p.id,Date_Format(p.test_datetime,'%d-%m-%Y') AS test_date, + if(p.test_type=0,p.test_value,'') AS r_sugar, + if(p.test_type=1,p.test_value,'') AS f_sugar, + if(p.test_type=2,p.test_value,'') AS a_sugar + from patient_glucose_chart p + where p.p_id=$p_id order by p.test_datetime desc"; + $query = $this->db->query($sql); + $data['patient_glucose_data']= $query->result(); + + $data['p_id']=$p_id; + + $this->load->view('dashboard/patient_glucose_data',$data); + } + + function add_glucose_value($p_id) + { + + + $patient_glucose_data=array( + 'p_id' => $p_id, + 'test_datetime'=> str_to_MysqlDate($this->input->post('datepicker_dot')), + 'test_value' => $this->input->post('input_glucose_value'), + 'test_type' => $this->input->post('input_test_type'), + ); + + $rx_group_id_INSERT=$this->Prescription_M->insert_patient_glucose_chart($patient_glucose_data); + + $send_error=validation_errors(); + $rvar=array( + 'insertid' =>$rx_group_id_INSERT, + 'msg'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + function patient_glucose_data_del($p_id,$g_id) + { + + $this->Prescription_M->remove_patient_glucose_chart($g_id); + + $sql="Select p.id,Date_Format(p.test_datetime,'%d-%m-%Y') AS test_date, + if(p.test_type=0,p.test_value,'') AS r_sugar, + if(p.test_type=1,p.test_value,'') AS f_sugar, + if(p.test_type=2,p.test_value,'') AS a_sugar + from patient_glucose_chart p + where p.p_id=$p_id order by p.test_datetime desc"; + $query = $this->db->query($sql); + $data['patient_glucose_data']= $query->result(); + + $data['p_id']=$p_id; + + $content=$this->load->view('dashboard/patient_glucose_data',$data,true); + + echo $content; + } + + function patient_investigation_data($p_id) + { + $sql="Select p.* + from patient_investigation p + where p.p_id=$p_id order by p.date_investigation desc"; + $query = $this->db->query($sql); + $data['patient_investigation_data']= $query->result(); + + $data['p_id']=$p_id; + + $this->load->view('dashboard/patient_investigation',$data); + } + + function add_investigation_value($p_id) + { + + + $normal_range=''; + $isbold=''; + $out_range=''; + + $patient_investigation_data=array( + 'p_id' => $p_id, + 'date_investigation'=> str_to_MysqlDate($this->input->post('datepicker_investigation')), + 'investigation_id' => $this->input->post('input_investigation_ID'), + 'investigation_name' => $this->input->post('input_investigation'), + 'result' => $this->input->post('input_investigation_value'), + 'result_text' => $this->input->post('input_investigation_report'), + 'normal_range' => $normal_range, + 'isbold' => $isbold, + 'out_range' => $out_range, + ); + + $investigation_INSERT=$this->Prescription_M->insert_patient_investigation($patient_investigation_data); + + $send_error=validation_errors(); + $rvar=array( + 'insertid' =>$investigation_INSERT, + 'msg'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + function patient_investigation_value_del($p_id,$inv_id) + { + + $this->Prescription_M->remove_patient_investigation($inv_id); + + $sql="Select p.* + from patient_investigation p + where p.p_id=$p_id order by p.date_investigation desc"; + $query = $this->db->query($sql); + $data['patient_investigation_data']= $query->result(); + + $data['p_id']=$p_id; + + $content=$this->load->view('dashboard/patient_investigation',$data,true); + + echo $content; + + } + + function doc_online($doc_id) + { + $sql="Select * from doctor_master where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + $data['doc_name']=$doctor_master[0]->p_fname; + $data['doc_id']=$doc_id; + + $this->load->view('center_room/center_room',$data); + + } + + // OPD Medicince + + function opd_medicince() + { + $sql="Select id,item_name,formulation,genericname,company_name from opd_med_master order by item_name"; + $query = $this->db->query($sql); + $data['opd_med_master']= $query->result(); + + $this->load->view('OPD/opd_medicince',$data); + } + + function opd_medicince_remove($med_id) + { + $this->Prescription_M->remove_med_master($med_id); + echo 'Item Deleted'; + } + + function opd_medicince_show($med_id) + { + $sql="Select * from opd_med_master where id=$med_id"; + $query = $this->db->query($sql); + $opd_med_master= $query->result(); + + if(count($opd_med_master)>0) + { + echo ''.$opd_med_master[0]->id.' + '.$opd_med_master[0]->formulation.' '.$opd_med_master[0]->item_name.' + '.$opd_med_master[0]->genericname.' + '.$opd_med_master[0]->company_name.' + Edit + Remove'; + }else{ + echo ' + + + + + '; + } + + } + + function opd_medicince_edit($med_id) + { + $sql="Select * from opd_med_master where id=$med_id"; + $query = $this->db->query($sql); + $data['opd_med_master']= $query->result(); + + if (isset($data['opd_med_master'][0]->id)) { + if (isset($_POST) && count($_POST) > 0) { + + $company_id=$this->input->post('company_id'); + $formulation = $this->input->post('formulation'); + + $sql="Select * from med_company where id=$company_id"; + $query = $this->db->query($sql); + $med_company= $query->result(); + + if(count($med_company)>0){ + $company_name=$med_company[0]->company_name; + }else{ + $company_name=''; + } + + $sql="Select * from med_formulation where formulation='$formulation'"; + $query = $this->db->query($sql); + $med_formulation= $query->result(); + + if(count($med_formulation)>0){ + $med_formulation_id=$med_formulation[0]->id; + }else{ + $med_formulation_id=0; + } + + $params = array( + 'item_name' => $this->input->post('item_name'), + 'formulation' => $this->input->post('formulation'), + 'formulation_id' => $med_formulation_id, + 'company_id' => $company_id, + 'company_name' => $company_name, + 'genericname' => $this->input->post('genericname'), + ); + + $this->Prescription_M->update_med_master($params,$med_id); + + echo 'Data Updated'; + } else { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $this->load->view('OPD/opd_medicince_edit',$data); + } + } else { + echo 'The Medicince you are trying to edit does not exist.'; + } + + + } + + function opd_medicince_add() + { + if (isset($_POST) && count($_POST) > 0) { + + $company_id=$this->input->post('company_id'); + $formulation = $this->input->post('formulation'); + + + $sql="Select * from med_company where id=$company_id"; + $query = $this->db->query($sql); + $med_company= $query->result(); + + if(count($med_company)>0){ + $company_name=$med_company[0]->company_name; + }else{ + $company_name=''; + } + + $sql="Select * from med_formulation where formulation='$formulation'"; + $query = $this->db->query($sql); + $med_formulation= $query->result(); + + if(count($med_formulation)>0){ + $med_formulation_id=$med_formulation[0]->id; + }else{ + $med_formulation_id=0; + } + + $params = array( + 'item_name' => $this->input->post('item_name'), + 'formulation' => $this->input->post('formulation'), + 'formulation_id' => $med_formulation_id, + 'company_id' => $company_id, + 'company_name' => $company_name, + 'genericname' => $this->input->post('genericname'), + ); + + $this->Prescription_M->insert_med_master($params); + + echo 'Data Insert'; + } else { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $this->load->view('OPD/opd_medicince_add',$data); + } + + + } + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Opd_print.php b/old_code_ci3/controllers/Opd_print.php new file mode 100644 index 0000000..ff04e0a --- /dev/null +++ b/old_code_ci3/controllers/Opd_print.php @@ -0,0 +1,904 @@ +db->query($sql); + $opd_master= $query->result(); + + $doc_id=0; + $no_opd_days=5-1; + + if(count($opd_master)>0){ + + $doc_id=$opd_master[0]->doc_id; + + $sql="select * + from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + $sql="select d.* ,group_concat(m.SpecName) as SpecName + FROM (doctor_master d left JOIN doc_spec s on d.id =s.doc_id) + join med_spec m on s.med_spec_id =m.id + WHERE d.id=$doc_id "; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + } + + $sql="SELECT o.*,DATE_FORMAT(o.apointment_date,'%d-%m-%Y') as str_apointment_date, + date_format(opd_book_date,'%d-%m-%Y %H:%i') as str_opd_book_date , + date_format(date_add(o.apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date, + (case o.payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str , + d.doc_sign,DATE_FORMAT(o.last_opdvisit_date,'%d-%m-%Y') as str_last_opdvisit_date, + d.opd_print_format + from opd_master o JOIN doctor_master d ON o.doc_id=d.id where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $data['opd_master']=$opd_master; + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$opd_master[0]->apointment_date."') AS age , + date_format(last_visit,'%d-%m-%Y') as last_visit_str + from patient_master where id='".$opd_master[0]->p_id."' "; + $query = $this->db->query($sql); + $patient_master= $query->result(); + + $pid=$opd_master[0]->p_id; + + $sql="Select count(*) as rec_opd from opd_master where p_id=$pid"; + $query = $this->db->query($sql); + $no_opd= $query->result(); + + $data['patient_master']=$patient_master; + + $total_no_visit=$no_opd[0]->rec_opd+$patient_master[0]->no_of_visit; + + $sql="select *,date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date + from opd_master where p_id=".$opd_master[0]->p_id." and doc_id=".$opd_master[0]->doc_id." + and apointment_date >= date_add(sysdate(),interval -$no_opd_days day) and opd_fee_type<>3"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $data['old_opd']=$old_opd; + + $sql="select * from hc_insurance where id=".$opd_master[0]->insurance_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + $data['insurance']=$insurance; + + $data['case_id']=''; + + if($opd_master[0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$opd_master[0]->insurance_case_id; + $query = $this->db->query($sql); + $case_master= $query->result(); + + $data['case_master']=$case_master; + + if(count($case_master)>0){ + $data['case_id']="Org. Case ID : ".$case_master[0]->case_id_code; + } + } + + $old_uhid=''; + if($patient_master[0]->udai<>"") + { + $old_uhid= ' /'.$patient_master[0]->udai; + } + $data['old_uhid']=$old_uhid; + + $exp_date=""; + + if($opd_master[0]->opd_fee_type=='3'){ + if(count($old_opd)>0){ + $exp_date= 'OPD Start Date : '.$old_opd[0]->s_opd_date.'
Valid Upto :'.$old_opd[0]->opd_Exp_Date.'
'; + } + }else{ + $exp_date="Valid Upto : ".$opd_master[0]->opd_Exp_Date .""; + } + + if($opd_master[0]->last_opdvisit_date=='') + { + if($patient_master[0]->last_visit=='') + { + $last_opdvisit_date=""; + }else{ + $last_opdvisit_date='
Last Visit :'.$patient_master[0]->last_visit_str; + } + + + }else{ + $last_opdvisit_date='
Last Visit :'.$opd_master[0]->str_last_opdvisit_date; + } + + $data['last_opdvisit_date']=$last_opdvisit_date; + + $data['exp_date']=$exp_date; + + $data['doc_info']='Dr. '.$opd_master[0]->doc_name.'
'.nl2br($opd_master[0]->doc_sign); + $data['SpecName']=$doctor_master[0]->SpecName; + $data['str_opd_book_date']=$opd_master[0]->str_opd_book_date; + + $content=' + + + + + + +
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+ Mob :'.$patient_master[0]->mphone1 .'
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.' ,'.$patient_master[0]->city.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ Date: '.$opd_master[0]->str_apointment_date .'
'.$exp_date.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .'] + +
+ Dr. '.$opd_master[0]->doc_name.'
+ '.$doctor_master[0]->SpecName.'
+ '.nl2br($doctor_master[0]->doc_sign).' +
+
No. of Visit : '.$total_no_visit.'
+
'; + //echo $content; + + + $data['content']=$content; + + $content_3=' + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+ Phone No. :'.$patient_master[0]->mphone1 .'
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.' ,'.$patient_master[0]->city.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .']
+ Date: '.$opd_master[0]->str_apointment_date .' + '.$last_opdvisit_date.'
+ No. of Visit : '.$total_no_visit.$exp_date.' +
+ '; + + $data['content_3']=$content_3; + + + $content_4=' + + + + + +
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+ Phone No. :'.$patient_master[0]->mphone1 .'
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.' ,'.$patient_master[0]->city.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ Date: '.$opd_master[0]->str_apointment_date .' + '.$last_opdvisit_date.'
+ No. of Visit : '.$total_no_visit.'
'.$exp_date.' +
+ '; + + $data['content_4']=$content_4; + + $data['pName']=$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname) ; + $data['pRelative']=$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname) ; + $data['age_sex']=$patient_master[0]->age.' / '.$patient_master[0]->xgender; + $data['opd_no']=$opd_master[0]->opd_code; + $data['opd_date']=$opd_master[0]->str_apointment_date; + + $data['opd_fee']= 'Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc ; + + $data['opd_fee_desc']= $opd_master[0]->opd_fee_desc ; + + $data['opd_sr_no']=$opd_master[0]->opd_no; + + $data['short_info']='Sr No.: '.$opd_master[0]->opd_no .' +
OPD Fee : Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc .'
+ UHID : '.$patient_master[0]->p_code.'
+ P Add. :'.$patient_master[0]->add1.','.$patient_master[0]->city.''; + + $data['short_info_1']='Sr No.: '.$opd_master[0]->opd_no .' + / OPD Fee : Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc .' / + UHID : '.$patient_master[0]->p_code.' / No. of Visit : '.$total_no_visit.'
'.$last_opdvisit_date; + + $data['uhid_no']=$patient_master[0]->p_code; + $data['phoneno']=$patient_master[0]->mphone1; + $data['p_address']=$patient_master[0]->add1.','.$patient_master[0]->city.''; + $data['opd_fee']= 'Rs.'.$opd_master[0]->opd_fee_amount .' '.$opd_master[0]->opd_fee_desc ; + $data['total_no_visit']=$total_no_visit; + $data['exp_date']=$exp_date; + + $data['opd_book_date']=$opd_master[0]->opd_book_date; + + $this->load->library('m_pdf'); + + $file_name='opd_parchi-'.$opdid.'-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + if($opd_master[0]->opd_print_format==''){ + $print_content=$this->load->view('dashboard/opd_print_parcha',$data,TRUE); + }else{ + $print_content=$this->load->view('dashboard/'.$opd_master[0]->opd_print_format,$data,TRUE); + } + + //echo $print_content; + + $this->m_pdf->pdf->WriteHTML($print_content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function opd_blank_print($opdid) + { + $bar_content=""; + + $sql="Select * from opd_master where opd_id=$opdid"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $p_id=$opd_master[0]->p_id; + + $sql="Select count(*) as No_visit from opd_master where p_id=$p_id"; + $query = $this->db->query($sql); + $no_of_opd_data= $query->result(); + + $no_of_visit=$no_of_opd_data[0]->No_visit; + + $doc_id=0; + $no_opd_days=5-1; + + if(count($opd_master)>0){ + + $doc_id=$opd_master[0]->doc_id; + + $sql="select * + from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + } + + + $sql="SELECT o.*,DATE_FORMAT(o.apointment_date,'%d-%m-%Y') as str_apointment_date, + date_format(date_add(o.apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date, + (case o.payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str , + d.doc_sign,DATE_FORMAT(o.last_opdvisit_date,'%d-%m-%Y') as str_last_opdvisit_date, + d.opd_print_format,d.opd_blank_print + from opd_master o JOIN doctor_master d ON o.doc_id=d.id where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $data['opd_master']=$opd_master; + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$opd_master[0]->apointment_date."') AS age from patient_master where id='".$opd_master[0]->p_id."' "; + $query = $this->db->query($sql); + $patient_master= $query->result(); + + $data['patient_master']=$patient_master; + + $sql="select *,date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date , + date_format(apointment_date,'%d-%m-%Y') as s_opd_date + from opd_master where p_id=".$opd_master[0]->p_id." and doc_id=".$opd_master[0]->doc_id." + and apointment_date >= date_add(sysdate(),interval -$no_opd_days day) and opd_fee_type<>3"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $data['old_opd']=$old_opd; + + $sql="select * from hc_insurance where id=".$opd_master[0]->insurance_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + $data['insurance']=$insurance; + + if($opd_master[0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$opd_master[0]->insurance_case_id; + $query = $this->db->query($sql); + $case_master= $query->result(); + + $data['case_master']=$case_master; + } + + $old_uhid=''; + if($patient_master[0]->udai<>"") + { + $old_uhid= ' /'.$patient_master[0]->udai; + } + $data['old_uhid']=$old_uhid; + + $exp_date=""; + + if($opd_master[0]->opd_fee_type=='3'){ + if(count($old_opd)>0){ + $exp_date= 'OPD Start Date : '.$old_opd[0]->s_opd_date.'
Valid Upto :'.$old_opd[0]->opd_Exp_Date.'
'; + } + }else{ + $exp_date="Valid Upto : ".$opd_master[0]->opd_Exp_Date .""; + } + + if($opd_master[0]->last_opdvisit_date=='') + { + $last_opdvisit_date=""; + }else{ + $last_opdvisit_date='Last Visit :'.$opd_master[0]->str_last_opdvisit_date; + } + + $data['exp_date']=$exp_date; + + $bar_content.=$patient_master[0]->p_code.'/'.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname); + $bar_content.='/'.$opd_master[0]->opd_no.'/'.$opd_master[0]->str_apointment_date.'/'.date('dmYHis'); + + $content=' + + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+ Phone No. :'.$patient_master[0]->mphone1 .'
+
+ Sr No.: '.$opd_master[0]->opd_no .'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .']
+ Date: '.$opd_master[0]->str_apointment_date .'
'.$exp_date.'
+
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.' ,'.$patient_master[0]->city.' + '.$last_opdvisit_date.'
+ No. of Visit : '.$no_of_visit.' +
+ '; + $data['content']=$content; + + $content_2=' + + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ Gender : '.$patient_master[0]->xgender.' / Age : '.$patient_master[0]->age.'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+
+ Phone No. :'.$patient_master[0]->mphone1 .'
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.'
'.$patient_master[0]->city.' +
No. of Visit : '.$no_of_visit.' +
'.$last_opdvisit_date.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .']
+ Date: '.$opd_master[0]->str_apointment_date .' +
+ '; + //echo $content; + + $data['content_2']=$content_2; + + $content_3=' + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+ Phone No. :'.$patient_master[0]->mphone1 .'
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.' ,'.$patient_master[0]->city.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .']
+ Date: '.$opd_master[0]->str_apointment_date .' + '.$last_opdvisit_date.'
+ No. of Visit : '.$no_of_visit.' +
+ '; + + $data['content_3']=$content_3; + + $content_4=' + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+ Phone No. :'.$patient_master[0]->mphone1 .'
+ Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2.' ,'.$patient_master[0]->city.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ Date: '.$opd_master[0]->str_apointment_date .' + '.$last_opdvisit_date.'
+ No. of Visit : '.$no_of_visit.' +
+ '; + + $data['content_4']=$content_4; + + + $data['patient_master']=$patient_master; + $data['opd_master']=$opd_master; + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetWatermarkText(H_Name); + //$this->m_pdf->pdf->showWatermarkText = false; + + $file_name='opd_parchi-'.$opdid.'-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$print_content=$this->load->view('dashboard/opd_letter_head_print',$data,TRUE); + + $print_content=$this->load->view('dashboard/'.$opd_master[0]->opd_blank_print,$data,TRUE); + + //echo $print_content; + + $this->m_pdf->pdf->WriteHTML($print_content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + + + public function opd_day_care($opdid) + { + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + date_format(date_add(apointment_date,interval 4 day),'%d-%m-%Y') as opd_Exp_Date, + (case payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str + from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$opd_master[0]->apointment_date."') AS age from patient_master where id='".$opd_master[0]->p_id."' "; + $query = $this->db->query($sql); + $patient_master= $query->result(); + + $sql="select *,date_format(date_add(apointment_date,interval 4 day),'%d-%m-%Y') as opd_Exp_Date , + date_format(apointment_date,'%d-%m-%Y') as s_opd_date + from opd_master where p_id=".$opd_master[0]->p_id." and opd_id < ".$opdid." + order by opd_id desc limit 1"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $sql="select *,date_format(date_add(apointment_date,interval 4 day),'%d-%m-%Y') as opd_Exp_Date , + date_format(apointment_date,'%d-%m-%Y') as s_opd_date + from opd_master where p_id=".$opd_master[0]->p_id." and doc_id=".$opd_master[0]->doc_id." + and apointment_date > date_add(sysdate(),interval -5 day) and opd_fee_type<>3"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $data['old_opd']=$old_opd; + + $sql="select * from hc_insurance where id=".$opd_master[0]->insurance_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + if($opd_master[0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$opd_master[0]->insurance_case_id; + $query = $this->db->query($sql); + $case_master= $query->result(); + } + + $old_uhid=''; + if($patient_master[0]->udai<>"") + { + $old_uhid= ' /'.$patient_master[0]->udai; + } + + + $content='
+ + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Sex : '.$patient_master[0]->xgender.' '.$patient_master[0]->age.'
+
+ Date: '.$opd_master[0]->str_apointment_date .'
+ Admit Time: ____________________
+ Discharge Time: ___________________
+
'; + + //echo $content; + $data['content']=$content; + $data['patient_master']=$patient_master; + $data['opd_master']=$opd_master; + + $this->load->library('m_pdf'); + + $file_name='opd_parchi-'.$opdid.'-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $print_content=$this->load->view('dashboard/day_care_format',$data,TRUE); + + //echo $print_content; + + $this->m_pdf->pdf->WriteHTML($print_content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function opd_Cont_print($opdid) + { + $sql="Select * from opd_master where opd_id=$opdid"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $doc_id=0; + $no_opd_days=5-1; + + if(count($opd_master)>0){ + + $doc_id=$opd_master[0]->doc_id; + + $sql="select * + from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + } + + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date, + (case payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str + from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$opd_master[0]->apointment_date."') AS age from patient_master where id='".$opd_master[0]->p_id."' "; + $query = $this->db->query($sql); + $patient_master= $query->result(); + + $sql="select *,date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date , + date_format(apointment_date,'%d-%m-%Y') as s_opd_date + from opd_master where p_id=".$opd_master[0]->p_id." and opd_id < ".$opdid." + order by opd_id desc limit 1"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $sql="select *,date_format(date_add(apointment_date,interval $no_opd_days day),'%d-%m-%Y') as opd_Exp_Date , + date_format(apointment_date,'%d-%m-%Y') as s_opd_date + from opd_master where p_id=".$opd_master[0]->p_id." and doc_id=".$opd_master[0]->doc_id." + and apointment_date >= date_add(sysdate(),interval -$no_opd_days day) and opd_fee_type<>3"; + $query = $this->db->query($sql); + $old_opd= $query->result(); + + $data['old_opd']=$old_opd; + + $sql="select * from hc_insurance where id=".$opd_master[0]->insurance_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + if($opd_master[0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$opd_master[0]->insurance_case_id; + $query = $this->db->query($sql); + $case_master= $query->result(); + } + + $old_uhid=''; + if($patient_master[0]->udai<>"") + { + $old_uhid= ' /'.$patient_master[0]->udai; + } + + $exp_date=""; + + if($opd_master[0]->opd_fee_type=='3'){ + if(count($old_opd)>0){ + $exp_date= 'OPD Start Date : '.$old_opd[0]->s_opd_date.'
Valid Upto :'.$old_opd[0]->opd_Exp_Date.'
'; + } + }else{ + $exp_date="Valid Upto : ".$opd_master[0]->opd_Exp_Date .""; + } + + $content=' + + + + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Sex : '.$patient_master[0]->xgender.' '.$patient_master[0]->age.'
+ P.No. :'.$patient_master[0]->mphone1 .'
+
+ Sr No.: '.$opd_master[0]->opd_no .'
+ OPD No.: '.$opd_master[0]->opd_code.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .']
+ Date: '.$opd_master[0]->str_apointment_date .'
'.$exp_date.' +
+ Dr. '.$opd_master[0]->doc_name.' + '.nl2br($opd_master[0]->doc_sign).' +
'; + + //echo $content; + + $this->load->library('m_pdf'); + + $file_name='opd_parchi-'.$opdid.'-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$print_content=$this->load->view('dashboard/day_care_format',$data,TRUE); + + //echo $print_content; + + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function invoice_print_pdf($opdid) + { + $sql="Select * from opd_master where opd_id=$opdid"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $doc_id=0; + $no_opd_days=5-1; + + if(count($opd_master)>0){ + + $doc_id=$opd_master[0]->doc_id; + + $sql="select * + from doctor_master + where id=$doc_id"; + $query = $this->db->query($sql); + $doctor_master= $query->result(); + + if(count($doctor_master)>0) + { + $no_opd_days=$doctor_master[0]->opd_valid_no_days-1; + } + } + + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + (case payment_status when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'Org. Credit' else 'Pending' end) as Payment_type_str + from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$opd_master[0]->apointment_date."') AS age + from patient_master where id='".$opd_master[0]->p_id."' "; + + $query = $this->db->query($sql); + $patient_master= $query->result(); + + $sql="select * from hc_insurance where id=".$opd_master[0]->insurance_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + if($opd_master[0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$opd_master[0]->insurance_case_id; + $query = $this->db->query($sql); + $case_master= $query->result(); + } + + // Content Start From here + + $content='

OPD Invoice Receipt

'; + + $itemlist='Items:'; + + $content.=' + + + + + +
+ To
+ UHID : '.$patient_master[0]->p_code.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Sex : '.$patient_master[0]->xgender.' '.$patient_master[0]->age.'
P.No. :'.$patient_master[0]->mphone1 .'
+ Address : '.$patient_master[0]->add1.','.$patient_master[0]->city.'
+
+ Invoice No. : '.$opd_master[0]->opd_code.'
+ Date : '.$opd_master[0]->str_apointment_date.'
+ Print Time : '.date('d-m-Y H:i:s').' +
+ +
'; + $content.=' + + + + + + + '; + + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + + if($opd_master[0]->opd_discount>0 ) + { + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + + } + + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + + $content.='
Date Charge NameDoctor NameDescriptionAmount
'.$opd_master[0]->str_apointment_date.'Consultation FeeDr.'.$opd_master[0]->doc_name.''.$opd_master[0]->opd_fee_desc.'Rs.'.$opd_master[0]->opd_fee_gross_amount.'
# Deduction '.$opd_master[0]->opd_disc_remark.' Rs.'.$opd_master[0]->opd_discount.'
# Net Amount Rs.'.$opd_master[0]->opd_fee_amount.'
'; + + // Content End Here + + if($opd_master[0]->payment_id>0 ) + { + $content.='Payment No. :'.$opd_master[0]->payment_id.'
'; + } + + $content.=' +
+ + + + + + + + + +
+ Amount in Words : Rs. '.number_to_word($opd_master[0]->opd_fee_amount).' + + +
+ Prepared By :'.$opd_master[0]->prepared_by.' + + Signature +
'; + + $data['content']=$content; + + $data['bar_content']=$patient_master[0]->p_code.':OPD-'.$opd_master[0]->opd_code.':T'.date('dmYhms'); + + //echo $content; + //$this->load->library("Pdf"); + //create_Invoice_pdf($content,$bar_content,'opd_invoice-'.$opdid.'-'.date('Yms')); + + //load mPDF library + + $this->load->library('m_pdf'); + + $file_name='opd_parchi-'.$opdid.'-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $print_content=$this->load->view('dashboard/opd_invoice_print',$data,TRUE); + + //$print_content=$content; + + + //echo $print_content; + $this->m_pdf->pdf->SetJS('this.print();'); + + $this->m_pdf->pdf->WriteHTML($print_content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + } + +} diff --git a/old_code_ci3/controllers/Opdcase.php b/old_code_ci3/controllers/Opdcase.php new file mode 100644 index 0000000..29359b0 --- /dev/null +++ b/old_code_ci3/controllers/Opdcase.php @@ -0,0 +1,218 @@ +db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 group by d.id "; + $query = $this->db->query($sql); + $data['doc_spec_l']= $query->result(); + + $sql="select * from hc_insurance_card where p_id='".$pno."' "; + $query = $this->db->query($sql); + $data['insurance_card']= $query->result(); + + $this->load->view('opd_app_insurance_V',$data); + } + + public function showfee() + { + $sql="select * from doc_opd_fee where doc_id=".$this->input->post('doc_id'); + $query = $this->db->query($sql); + $data['doc_fee_a']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName,if(d.gender=1,'Male','Female') as xGender + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=".$this->input->post('doc_id')." group by d.id "; + $query = $this->db->query($sql); + $doc_info= $query->result(); + + $content=''; + + $content.= '

Name : '.$doc_info[0]->p_fname.' / Specialization: '.$doc_info[0]->SpecName.' / + Gender : '.$doc_info[0]->xGender.'

'; + $content.= ''; + + $sql="select * from hc_insurance where id=".$this->input->post('insurance_id'); + $query = $this->db->query($sql); + $data['opd_fee_a']= $query->result(); + + foreach($data['opd_fee_a'] as $row) + { + $content.= '
'; + } + + $content.=""; + + $rvar=array( + 'csrfName' => $this->security->get_csrf_token_name(), + 'csrfHash' => $this->security->get_csrf_hash(), + 'content'=>$content + ); + + $encode_data = json_encode($rvar); + + echo $encode_data ; + } + + public function invoice($opdid) + { + $sql="select *,date_format(apointment_date,'%d-%m-%Y') as str_apointment_date, + (case payment_status when 1 Then 'cash' when 2 then 'Bank Card' when 3 then 'ECHS Credit' else 'Pending' end) as Payment_type_str from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['opd_master'][0]->p_id."' "; + + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from ipd_master where ipd_status=0 and p_id=".$data['opd_master'][0]->p_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from organization_case_master + where status=0 and case_type=0 and p_id=".$data['patient_master'][0]->id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $sql="select * from hc_insurance where id=".$data['opd_master'][0]->insurance_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=1 and refund_type_id=".$opdid; + $query = $this->db->query($sql); + $data['refund_order']= $query->result(); + + if(count($data['refund_order'])>0) + { + $data['refund_status']=1; // Refund Pending + }else{ + $data['refund_status']=0 ; //No Pending + } + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as paid_amount from payment_history where payof_type=1 and payof_id=".$opdid; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $data['paid_amount']=0; + + if($data['payment_history'][0]->paid_amount=='' || $data['payment_history'][0]->paid_amount==0 ) + { + $data['paid_amount']=0; + }else{ + $data['paid_amount']=$data['payment_history'][0]->paid_amount; + } + + $opd_fee_gross_amount=$data['opd_master'][0]->opd_fee_amount; + + if($data['opd_master'][0]->payment_mode==4) + { + $data['pending_amount']=0; + }else{ + $data['pending_amount']=$opd_fee_gross_amount-$data['paid_amount']; + } + + + $this->load->view('opd_invoice_V',$data); + } + + public function invoice_print($opdid) + { + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$data['opd_master'][0]->p_id."' "; + + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from hc_insurance where id=".$data['opd_master'][0]->insurance_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + if($data['opd_master'][0]->insurance_case_id>0) + { + $sql="select * from organization_case_master where id=".$data['opd_master'][0]->insurance_case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + } + + $this->load->view('invoice_print_v',$data); + } + + public function confirm_opd() + { + $this->load->model('Opd_M'); + + $sql="select * from patient_master where id=".$this->input->post('pid'); + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select d.id ,d.p_fname ,group_concat(m.SpecName) as SpecName,if(d.gender=1,'Male','Female') as xGender + from doctor_master d join doc_spec s join med_spec m on d.id =s.doc_id and s.med_spec_id =m.id + where d.active=1 and d.id=".$this->input->post('doc_id')." group by d.id "; + $query = $this->db->query($sql); + $data['doc_info']= $query->result(); + + $sql="select * from hc_insurance where id=".$this->input->post('insurance_id'); + $query = $this->db->query($sql); + $data['doc_fee']= $query->result(); + + $opd_fee_amount=$data['doc_fee'][0]->opd_fee; + $opd_fee_desc=$data['doc_fee'][0]->opd_desc; + + $data['insert'] = array( + 'p_id' => $this->input->post('pid'), + 'P_name' => $data['person_info'][0]->p_fname, + 'doc_id' => $this->input->post('doc_id'), + 'insurance_id' => $this->input->post('insurance_id'), + 'opd_fee_id' => $this->input->post('fee_id'), + 'opd_fee_amount' => $opd_fee_amount, + 'opd_fee_gross_amount' => $opd_fee_amount, + 'opd_fee_desc' => $opd_fee_desc, + 'doc_name' => $data['doc_info'][0]->p_fname, + 'doc_spec' => $data['doc_info'][0]->SpecName, + 'apointment_date' =>str_to_MysqlDate($this->input->post('datepicker_appointment')), + 'opd_fee_type' => '1' + ); + + $inser_id=$this->Opd_M->insert( $data['insert']); + + $rvar=array( + 'insertid' =>$inser_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function confirm_payment() + { + + } + } \ No newline at end of file diff --git a/old_code_ci3/controllers/Org_Packing.php b/old_code_ci3/controllers/Org_Packing.php new file mode 100644 index 0000000..2fd91f3 --- /dev/null +++ b/old_code_ci3/controllers/Org_Packing.php @@ -0,0 +1,602 @@ +load->view('Org/Org_packing'); + } + + public function Search_packing() + { + $sdata=trim($this->input->post('txtsearch')); + + if(trim($sdata)=='') + { + $sql="SELECT p.id,date_format(p.date_of_create,'%d-%m-%Y') AS d_o_c, + p.label_no,p.files_status,COUNT(c.id) AS No_Rec, + if(p.org_type=0,'OPD','IPD') as list_type + FROM org_packing p left JOIN organization_case_master c ON p.id=c.packing_id + GROUP BY p.id + ORDER BY p.date_of_create desc limit 50"; + }else{ + + $numric_condition=""; + + if(is_numeric($sdata)) + { + $numric_condition=" OR p.Invoice_no=".$sdata ; + } + + $sql="SELECT p.id,date_format(p.date_of_create,'%d-%m-%Y') AS d_o_c, + p.label_no,p.files_status,COUNT(c.id) AS No_Rec, + if(p.org_type=0,'OPD','IPD') as list_type + FROM org_packing p left JOIN organization_case_master c ON p.id=c.packing_id + where (p.label_no LIKE '%".$sdata."%' ".$numric_condition." ) + GROUP BY p.id + ORDER BY p.date_of_create desc limit 50"; + } + + $query = $this->db->query($sql); + $data['packing_list']= $query->result(); + + $this->load->view('Org/Search_result',$data); + + } + + public function PackingNew() + { + $this->load->view('Org/new_Org_Packing'); + + } + + public function PackingEdit($id) + { + $data['id']=$id; + + $sql="select * from org_packing where id=$id"; + $query = $this->db->query($sql); + $data['org_packing']= $query->result(); + + $this->load->view('Org/edit_Org_Packing',$data); + + } + + public function CreatePackNew() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_packingcode', + 'label' => 'Invoice No', + 'rules' => 'required|min_length[3]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + + $invoice_code=$this->input->post('input_packingcode'); + $org_type=$this->input->post('cbo_billtype'); + $datepicker_packing=$this->input->post('datepicker_packing'); + + if(is_numeric($invoice_code)) + $where=" where label_no=".$invoice_code ; + else + $where=" where label_no='".$invoice_code."'"; + + $sql="select count(*) as no_rec from org_packing ".$where; + $query = $this->db->query($sql); + $chk_rec= $query->result(); + + if($chk_rec[0]->no_rec==0) + { + $Udata = array( + 'date_of_create'=> str_to_MysqlDate($datepicker_packing), + 'label_no'=> $invoice_code, + 'org_type'=>$org_type + ); + + $this->load->model('Ocasemaster_M'); + + $inser_id=$this->Ocasemaster_M->insert_org_pack($Udata); + $send_msg="Added Successfully"; + + if($inser_id>0) + { + $show_text=$send_msg; + }else{ + $show_text=$send_msg; + } + }else{ + $show_text='Record Already Exist'; + $inser_id=0; + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function EditPack() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_packingcode', + 'label' => 'Invoice No', + 'rules' => 'required|min_length[3]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + + $invoice_code=$this->input->post('input_packingcode'); + $org_type=$this->input->post('cbo_billtype'); + $datepicker_packing=$this->input->post('datepicker_packing'); + $id=$this->input->post('packing_id'); + + if(is_numeric($invoice_code)) + $where=" label_no=".$invoice_code ; + else + $where=" label_no='".$invoice_code."'"; + + $sql="select count(*) as no_rec from org_packing where id<>$id and ".$where; + $query = $this->db->query($sql); + $chk_rec= $query->result(); + + if($chk_rec[0]->no_rec==0) + { + $Udata = array( + 'date_of_create'=> str_to_MysqlDate($datepicker_packing), + 'label_no'=> $invoice_code, + 'org_type'=>$org_type + ); + + $this->load->model('Ocasemaster_M'); + + $inser_id=$this->Ocasemaster_M->update_org_pack($Udata,$id); + $send_msg="Update Successfully"; + + if($inser_id>0) + { + $show_text=$send_msg; + }else{ + $show_text=$send_msg; + } + }else{ + $show_text='Record Already Exist'; + $inser_id=0; + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function PackNewEdit($id) + { + $sql="select * + from org_packing + where id=".$id; + $query = $this->db->query($sql); + $data['org_packing']= $query->result(); + + $sql="SELECT o.*,o.case_id_code,o.insurance_company_name, + p.p_code,p.p_fname,p.age,o.insurance_no,o.insurance_no_1, + if(o.case_type=0,'OPD','IPD') as IPD_OPD + FROM organization_case_master o JOIN patient_master_exten p ON o.p_id=p.id + WHERE o.packing_id=$id + ORDER BY o.packing_short"; + $query = $this->db->query($sql); + $data['org_packing_list']= $query->result(); + + $data['packing_id']=$id; + + $data['org_packing_list']=$this->load->view('Org/org_packing_list',$data,true); + + $this->load->view('Org/Org_item_Edit',$data); + } + + public function PackMasterEdit($id) + { + $sql="select p.*,s.name_supplier from purchase_invoice p join med_supplier s on p.sid=s.sid where p.id=".$inv_id; + $query = $this->db->query($sql); + $data['inv_master_data']= $query->result(); + + $sql="select * from purchase_invoice_item where purchase_id='".$inv_id."' "; + $query = $this->db->query($sql); + $data['purchase_item']= $query->result(); + + $this->load->view('Medical/Purchase/purchase_invoice_master_edit',$data); + + } + + public function Pack_list($packing_id) + { + $sql="SELECT o.*,o.case_id_code,o.insurance_company_name, + p.p_code,p.p_fname,p.age,o.insurance_no,o.insurance_no_1, + if(o.case_type=0,'OPD','IPD') as IPD_OPD + FROM organization_case_master o JOIN patient_master_exten p ON o.p_id=p.id + WHERE o.packing_id=$packing_id + ORDER BY o.packing_short"; + $query = $this->db->query($sql); + $data['org_packing_list']= $query->result(); + + $data['packing_id']=$packing_id; + + $this->load->view('Org/org_packing_list',$data); + + } + + + public function Add_list($org_id,$packing_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' ['.date('d-m-Y h:i:s').']'; + + $sql="SELECT * + FROM organization_case_master o + WHERE o.packing_id=$packing_id and id=$org_id"; + $query = $this->db->query($sql); + $org_check= $query->result(); + + + $sql="SELECT Max(o.packing_short) as m_short + FROM organization_case_master o + WHERE o.packing_id=$packing_id + ORDER BY o.packing_short"; + $query = $this->db->query($sql); + $org_short_max= $query->result(); + + $max_short_no=$org_short_max[0]->m_short; + + $max_short_no=$max_short_no+1; + + $dataupdate = array( + 'packing_id' => $packing_id, + 'packing_update_by'=> $user_name, + 'packing_short' => $max_short_no + ); + + $this->load->model('Ocasemaster_M'); + + if(count($org_check)>0) + { + $send_msg="Already Added"; + }else{ + $this->Ocasemaster_M->update($dataupdate,$org_id); + $send_msg="Added Successfully"; + } + + $sql="SELECT o.*,o.case_id_code,o.insurance_company_name, + p.p_code,p.p_fname,p.age,o.insurance_no,o.insurance_no_1, + if(o.case_type=0,'OPD','IPD') as IPD_OPD + FROM organization_case_master o JOIN patient_master_exten p ON o.p_id=p.id + WHERE o.packing_id=$packing_id + ORDER BY o.packing_short"; + $query = $this->db->query($sql); + $data['org_packing_list']= $query->result(); + + $data['packing_id']=$packing_id; + + $this->load->view('Org/org_packing_list',$data); + } + + public function remove_item_packing($org_id,$packing_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' ['.date('d-m-Y h:i:s').']'; + + $dataupdate = array( + 'packing_id' => 0, + 'packing_update_by'=> $user_name, + 'packing_short' => 0 + ); + + $this->load->model('Ocasemaster_M'); + + $this->Ocasemaster_M->update($dataupdate,$org_id); + $send_msg="Remove Successfully"; + + $sql="SELECT o.*,o.case_id_code,o.insurance_company_name, + p.p_code,p.p_fname,p.age,o.insurance_no,o.insurance_no_1, + if(o.case_type=0,'OPD','IPD') as IPD_OPD + FROM organization_case_master o JOIN patient_master_exten p ON o.p_id=p.id + WHERE o.packing_id=$packing_id + ORDER BY o.packing_short"; + $query = $this->db->query($sql); + $data['org_packing_list']= $query->result(); + + $data['packing_id']=$packing_id; + + $this->load->view('Org/org_packing_list',$data); + } + + public function Print_List($Packing_id,$output=0) + { + $sql="SELECT * + FROM organization_case_master + WHERE packing_id=$Packing_id"; + $query = $this->db->query($sql); + $org_master= $query->result(); + + if($org_master[0]->case_type==0) + { + redirect('/Org_Packing/Print_opd_List/'.$Packing_id.'/'.$output); + }else{ + redirect('/Org_Packing/Print_ipd_List/'.$Packing_id.'/'.$output); + } + } + + function Print_opd_List($Packing_id,$output=0) + { + $sql="SELECT org.*, group_concat(opd.doc_name) AS Doc_name, + p.p_code,p.p_fname,p.age, + if(org.case_type=0,'OPD','IPD') as IPD_OPD, + (org.inv_opd_amt+org.inv_opd_charge_amt+inv_opd_med_amt) AS claim_amt, + if(opd.opd_id IS NULL,Date_Format(MIN(i.inv_date),'%d-%m-%Y'),Date_Format(MIN(opd.apointment_date),'%d-%m-%Y')) AS opd_date + FROM ((organization_case_master org JOIN patient_master_exten p ON org.p_id=p.id) + LEFT JOIN opd_master opd ON org.id=opd.insurance_case_id) + LEFT JOIN invoice_master i ON org.id=i.insurance_case_id + WHERE org.packing_id=$Packing_id + GROUP BY org.id + ORDER BY org.packing_short"; + $query = $this->db->query($sql); + $org_packing_list= $query->result(); + + $data['Packing_id']=$Packing_id; + + $content=""; + + $content.=''; + + $content.=' + + + + + + + + + + + + + + '; + $sr_no=0; + + foreach($org_packing_list as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + + + '; + } + + $content.="
Set No.Sr.NoClaim IDBill No.Name of PatientOPD DateConsultant NameSub. DateAmount ClaimedPassed Amt.Ded. amt
'.$row->packing_short.''.$sr_no.''.$row->insurance_no_1.''.$row->id.''.$row->p_fname.''.$row->opd_date.''.$row->Doc_name.''.$row->org_submit_date.''.$row->claim_amt.''.$row->final_approve_amount.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + + $file_name='Report-ORG-'.date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'OPD_Org_List'.date('Ymdhis')); + } + } + + function Print_ipd_List($Packing_id,$output=0) + { + $sql="SELECT org.*,ipd.doc_name AS Doc_name, + p.p_code,p.p_fname,p.age, + if(org.case_type=0,'OPD','IPD') as IPD_OPD, + ipd.net_amount AS claim_amt, + ipd.str_register_date,ipd.str_discharge_date,org.org_submit_date,ipd.ipd_code, + DATE_FORMAT(org.org_submit_date,'%d-%m-%Y') AS str_org_submit_date, + ipd.id as ipd_id + FROM ((organization_case_master org JOIN patient_master_exten p ON org.p_id=p.id) + JOIN v_ipd_list ipd ON ipd.id=org.ipd_id) + WHERE org.packing_id=$Packing_id + ORDER BY org.packing_short"; + $query = $this->db->query($sql); + $org_packing_list= $query->result(); + + $sql="Select * from org_packing where id=$Packing_id"; + $query = $this->db->query($sql); + $org_packing= $query->result(); + + $org_packing_set=$org_packing[0]->label_no; + + $data['Packing_id']=$Packing_id; + + $content=""; + + $content.=''; + + $content.=' + + + + + + + + + + + + + + + + '; + $sr_no=0; + + foreach($org_packing_list as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + + + + + '; + } + + $content.="
Set No.Sr.NoIPD No.Claim IDBill No.Name of PatientAdmit. Dt.Discharge Dt.Sub. DateConsultant NameAmount ClaimedPassed Amt.Ded. amt
'.$org_packing_set.''.$sr_no.''.$row->ipd_code.''.$row->insurance_no_1.''.$row->ipd_id.''.$row->p_fname.''.$row->str_register_date.''.$row->str_discharge_date.''.$row->str_org_submit_date.''.$row->Doc_name.''.$row->claim_amt.''.$row->final_approve_amount.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + + $file_name='Report-ipd_org-'.date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'OPD_Org_List'.date('Ymdhis')); + } + + } + + public function org_case_search() + { + + $search_string = $this->input->post('data_search'); + $data['packing_id']=$this->input->post('packing_id'); + + $sql="select * + from org_packing + where id=".$data['packing_id']; + $query = $this->db->query($sql); + $data['org_packing']= $query->result(); + + $list_type=$data['org_packing'][0]->org_type; + $data['list_type']=$list_type; + + if(strlen($search_string)>3) + { + + if($list_type==0) + { + $sql="SELECT o.*,o.case_id_code,o.insurance_company_name, + p.p_code,p.p_fname,p.age,o.insurance_no,o.insurance_no_1, + if(o.case_type=0,'OPD','IPD') as IPD_OPD + FROM organization_case_master o JOIN patient_master_exten p ON o.p_id=p.id + WHERE o.case_type=0 and (o.case_id_code LIKE '%$search_string' + OR o.insurance_no='$search_string' + OR o.insurance_no_1='$search_string' + OR o.ipd_id='$search_string') + ORDER BY o.id Limit 10"; + }else{ + $sql="SELECT o.*,o.case_id_code,o.insurance_company_name, p.p_code,p.p_fname,p.age,o.insurance_no, + o.insurance_no_1, if(o.case_type=0,'OPD','IPD') as IPD_OPD + FROM (organization_case_master o JOIN patient_master_exten p ON o.p_id=p.id ) + JOIN ipd_master i ON o.ipd_id=i.id + WHERE o.case_type=1 and (o.case_id_code LIKE '%$search_string' + OR o.insurance_no='$search_string' + OR o.insurance_no_1='$search_string' + OR i.ipd_code LIKE '%$search_string') + ORDER BY o.id Limit 10"; + } + + $query = $this->db->query($sql); + $data['org_list']= $query->result(); + + $this->load->view('Org/org_list',$data); + + + }else{ + echo 'Search with Min 4 Char.'; + } + + } + + +} diff --git a/old_code_ci3/controllers/OrganizationInvoice.php b/old_code_ci3/controllers/OrganizationInvoice.php new file mode 100644 index 0000000..2ee9759 --- /dev/null +++ b/old_code_ci3/controllers/OrganizationInvoice.php @@ -0,0 +1,368 @@ +input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('invoice_M'); + + $showcontent1='
+
+ Print +
+
+ Payment Method by : '; + $showcontent2='
'; + + if($this->input->post('mode')==1) + { + + $data = array( + + 'payment_mode'=> '1', + 'payment_status'=>'1' + + ); + + $this->invoice_M->update( $data,$this->input->post('oid')); + + $status='CASH'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==2) + { + $FormRules = array( + array( + 'field' => 'input_card_mac', + 'label' => 'Card Bank Name', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + array( + 'field' => 'input_card_digit', + 'label' => 'Card Last 4 Digit ', + 'rules' => 'required|min_length[4]|max_length[4]' + ), + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[3]|max_length[15]' + ) + ); + $this->form_validation->set_rules($FormRules); + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'payment_mode'=> '2', + 'payment_status'=>'1', + 'card_bank'=>$this->input->post('input_card_mac'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'card_tran_id'=>$this->input->post('input_card_tran') + ); + $this->Opd_M->update( $data,$this->input->post('oid')); + + $status='Bank Card'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + if($this->input->post('mode')==3) + { + $data = array( + + 'payment_mode'=> '3', + 'payment_status'=>'1', + 'ech_clam_id'=>$this->input->post('input_claim_id'), + + ); + + $this->invoice_M->update( $data,$this->input->post('oid')); + + $status='ECHS Credit'; + $showcontent=$showcontent1.$status.$showcontent2; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + if($this->input->post('mode')==0) + { + + } + } + + public function addPathTest($pno,$ins_id=0) + { + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $sql="select * from hc_item_type"; + + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $ins_comp_id=0; + + if($ins_id>1) + { + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $ins_comp_id=$data['hc_insurance_card'][0]->insurance_id; + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + } + + if($ins_comp_id<2) + { + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=1"; + }else{ + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc from v_hc_items_with_insurance + where itype=1 and hc_insurance_id in (0,".$ins_comp_id.")"; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + $this->load->model('invoice_M'); + + $sql="select count(*) as no_invoice from invoice_master where invoice_status=0 and attach_id=".$pno; + $query = $this->db->query($sql); + $data['chk_draft_invoice']= $query->result(); + + if($data['chk_draft_invoice'][0]->no_invoice<1) + { + $data['insert_invoice'] = array( + 'attach_type' => '0', + 'attach_id' => $pno, + 'inv_date' => str_to_MysqlDate(date('d/m/Y')), + 'inv_name' => $data['person_info'][0]->p_fname, + 'ins_id' => $ins_comp_id, + 'inv_a_code' => $data['person_info'][0]->p_code + ); + $inser_id=$this->invoice_M->create_invoice( $data['insert_invoice']); + }else{ + $sql="select id from invoice_master where invoice_status=0 and attach_id=".$pno; + $query = $this->db->query($sql); + $data['invoice_id']= $query->result(); + + $inser_id=$data['invoice_id'][0]->id; + } + + if($inser_id) + { + $sql="select * from invoice_master where id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + } + + $this->load->view('Invoice_PathLab',$data); + } + + public function list_pathtest_bytype() + { + $tid=$this->input->post('itype_idv'); + $ins_id=$this->input->post('ins_id'); + + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=".$tid; + + if($ins_id>1) + { + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc from v_hc_items_with_insurance + where itype=".$tid." and hc_insurance_id in (0,".$ins_id.")"; + + }else{ + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=".$tid; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + echo '
+ +
'; + + } + + + + public function showinvoice($invoice_id) + { + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + + $this->load->view('Invoice_PathLab_final_V',$data); + } + + public function showitem($type) + { + $this->load->model('invoice_M'); + + if($type>0) + { + $ins_id=$this->input->post('ins_id'); + + $sql="select * from hc_items where id=".$this->input->post('itype_name_id'); + if($ins_id>1) + { + $sql="select id,Concat(idesc,' : [',amount1,']',if(hc_insurance_id=0,'','-INS')) as sdesc,amount1 from v_hc_items_with_insurance + where id=".$this->input->post('itype_name_id')." and hc_insurance_id in (0,".$ins_id.")"; + + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount1; + + $amount_value=$this->input->post('input_qty')*$item_rate; + + } + else + { + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc,amount from hc_items where id=".$this->input->post('itype_name_id'); + + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount; + + $amount_value=$this->input->post('input_qty')*$item_rate; + } + + $data['insert_invoice_item'] = array( + 'inv_master_id' => $this->input->post('lab_invoice_id'), + 'item_type' => $this->input->post('itype_idv'), + 'item_id' => $this->input->post('itype_name_id'), + 'item_name' => $data['itemlist'][0]->sdesc, + 'item_rate' => $item_rate, + 'item_added_date' => str_to_MysqlDate(date('d/m/Y')), + 'item_qty' => $this->input->post('input_qty'), + 'item_amount' => $amount_value + ); + + $inser_id=$this->invoice_M->addinvoiceitem( $data['insert_invoice_item']); + + }else{ + $this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + $sql="select i.*,t.desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + echo ' + + + + + + + + + '; + + $srno=1; + + foreach($data['invoiceDetails'] as $row) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + + echo ' + + + + + + + + +
#TypeTest NameRateQtyAmount
'.$srno.''.$row->desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Gross Total'.$data['invoiceGtotal'][0]->Gtotal.'
'; + } + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Orgcase.php b/old_code_ci3/controllers/Orgcase.php new file mode 100644 index 0000000..89c05ae --- /dev/null +++ b/old_code_ci3/controllers/Orgcase.php @@ -0,0 +1,1255 @@ +input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9]/', '', $sdata); + + $sql = "select c.id,c.p_id,c.case_id_code,sum(o.opd_fee_amount) as OPD_Amount,sum(i.net_amount) as Invoice_Amount, + c.insurance_company_name,c.p_name,p.p_code,c.date_registration,insurance_card_name, + (case c.status when 0 then 'Pending' + when 1 then 'Ready for submission' + when 2 then 'Submitted' + when 3 then 'Payment Done' + else 'Other' end) as str_status, + Date_Format(c.date_registration,'%d-%m-%Y') as date_registration_in + from (organization_case_master c join patient_master p on c.p_id=p.id ) + left join opd_master o on c.id=o.insurance_case_id + left join invoice_master i on c.id=i.insurance_case_id + group by c.id "; + + if($sdata!='') + { + $sql.=" WHERE case_id_code = '".$sdata."' or p_name like '%".$sdata."%' or + p_code = '".$sdata." order by c.id desc limit 20"; + }else + { + $sql.=" order by c.id desc limit 20"; + } + + $query = $this->db->query($sql); + $data['searchdata']= $query->result(); + + $this->load->view('Invoice/Case_List',$data); + } + + public function search_all() + { + $this->load->view('Invoice/case_list_all'); + } + + public function case_invoice($casecode,$print=0,$caseid=0,$med_include=1) + { + if($caseid<1) + { + $sql="select * from organization_case_master where case_id_code='".$casecode."'"; + }else{ + $sql="select * from organization_case_master where id='".$caseid."'"; + } + + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $pno=$data['orgcase'][0]->p_id; + $caseid=$data['orgcase'][0]->id; + + $this->db->query("CALL p_org_update(".$caseid.")"); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$inc_card_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + //$sql="select * from v_case_invoice v + // where v.id=".$caseid." order by Charge_type,Adate "; + + //$query = $this->db->query($sql); + //$data['showinvoice']= $query->result(); + + $sql="select * from v_case_invoice_1 v + where v.id=".$caseid." order by Charge_type,Adate "; + $query = $this->db->query($sql); + $data['showinvoice1']= $query->result(); + + $sql="select * from v_case_invoice_2 v + where v.id=".$caseid." order by Charge_type,Adate "; + $query = $this->db->query($sql); + $data['showinvoice2']= $query->result(); + + //$sql="select sum(amount) as GTotal from v_case_invoice v + // where v.id=".$caseid." "; + //$query = $this->db->query($sql); + //$data['invoiceGtotal']= $query->result(); + + $sql="select m.*,m.id as med_id + from invoice_med_master m join ipd_master p join organization_case_master o + on m.ipd_id=p.id and p.case_id=o.id and m.ipd_credit=1 and m.ipd_credit_type=1 + where o.id=".$caseid." "; + + $query = $this->db->query($sql); + $data['MedInvoice_data']= $query->result(); + + $sql="select sum(m.net_amount) as Med_Amount,o.id ,count(m.id) as no_inv + from invoice_med_master m join ipd_master p join organization_case_master o + on m.ipd_id=p.id and p.case_id=o.id and m.ipd_credit=1 and m.ipd_credit_type=1 + where o.id=".$caseid." group by o.id "; + + $query = $this->db->query($sql); + $data['MedInvoice']= $query->result(); + + if(count($data['MedInvoice'])==0) + { + $sql="select m.* ,m.id as med_id + from invoice_med_master m join organization_case_master o + on m.case_id=o.id and m.case_credit=1 + where o.id=".$caseid." "; + + $query = $this->db->query($sql); + $data['MedInvoice_data']= $query->result(); + + $sql="select sum(m.net_amount) as Med_Amount,o.id ,count(m.id) as no_inv + from invoice_med_master m join organization_case_master o + on m.case_id=o.id and m.case_credit=1 + where o.id=".$caseid." group by o.id "; + + $query = $this->db->query($sql); + $data['MedInvoice']= $query->result(); + } + + $data['med_include']=$med_include; + + $sql="select p.* ,date_format(payment_date,'%d-%m-%Y') as str_date, + if(credit_debit=0,if(payment_mode=1,'CASH','BANK'),if(payment_mode=1,'CASH RETURN','BANK RETURN')) as Pay_mode + from payment_history p + where p.payof_type=3 and p.payof_id=$caseid"; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + + if($print>0) + { + $this->load->library('m_pdf'); + $file_name='Org_Invoice_-'.$casecode.'-'.date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->curlAllowUnsafeSslRequests = true; + $this->m_pdf->useSubstitutions = false; + $print_content=$this->load->view('Invoice/caseinvoice_print_V',$data,TRUE); + //echo $print_content; + $this->m_pdf->pdf->WriteHTML($print_content); + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + $this->load->view('Invoice/caseinvoice_V',$data); + } + + } + + public function case_invoice_ipd($caseid) + { + $sql="select * from organization_case_master where id='".$caseid."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $pno=$data['orgcase'][0]->p_id; + $caseid=$data['orgcase'][0]->id; + + $this->db->query("CALL p_org_update(".$caseid.")"); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$inc_card_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + //$sql="select * from v_case_invoice v + // where v.id=".$caseid." order by Charge_type,Adate "; + + //$query = $this->db->query($sql); + //$data['showinvoice']= $query->result(); + + $sql="select * from v_case_invoice_1 v + where v.id=".$caseid." order by Charge_type,Adate "; + $query = $this->db->query($sql); + $data['showinvoice1']= $query->result(); + + $sql="select * from v_case_invoice_2 v + where v.id=".$caseid." order by Charge_type,Adate "; + $query = $this->db->query($sql); + $data['showinvoice2']= $query->result(); + + $this->load->view('Invoice/caseinvoice_ipd_V',$data); + + } + + public function ORG_info(){ + + $org_no = $this->input->post('input_org_no'); + + $sql="select * from organization_case_master + where case_type=0 and case_id_code='$org_no' "; + $query = $this->db->query($sql); + $data_org= $query->result(); + + if(count($data_org)>0) + { + $UHID=$data_org[0]->p_id; + + $sql="select * from patient_master_exten where id='$UHID' "; + $query = $this->db->query($sql); + $data_person= $query->result(); + + $Patient_id=$data_person[0]->id; + $Patient_info=$data_person[0]->p_code.'/'.$data_person[0]->p_fname.' '.$data_person[0]->p_relative.' '.$data_person[0]->p_rname.' /Age :'.$data_person[0]->str_age; + + $org_info=$Patient_info.'/'.$data_org[0]->insurance_company_name. + '/Reg.:'.$data_org[0]->insurance_no_1.'/Reg.Dt:'.$data_org[0]->date_registration; + + $org_id=$data_org[0]->id; + + }else{ + $org_id=0; + $org_info=''; + + } + + $rvar=array( + 'org_id' =>$org_id, + 'org_info'=>$org_info + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function update_itemrateqty() + { + $item_type_id=$this->input->post('item_type_id'); + $item_id=$this->input->post('item_id'); + + $rate=$this->input->post('rate'); + $orgcode=$this->input->post('orgcode'); + $insurance_id=$this->input->post('insurance_id'); + $master_item_id=$this->input->post('master_item_id'); + + $sql="select * from invoice_item + where id=".$item_id." "; + $query = $this->db->query($sql); + $invoice_item= $query->result(); + + $qty=0; + + if(count($invoice_item)>0) + { + $qty=$invoice_item[0]->item_qty; + } + + $this->load->model('invoice_M'); + + $amount_value=$qty * $rate; + + $data['update_invoice_item'] = array( + 'item_qty' => $qty, + 'item_rate' => $rate, + 'item_amount' => $amount_value, + 'org_code' => $orgcode + ); + + $inser_id=$this->invoice_M->update_item( $data['update_invoice_item'],$item_id); + + $this->load->model('item_M'); + + $data['update_insurance_item'] = array( + 'hc_items_id' => $master_item_id, + 'hc_insurance_id' => $insurance_id, + 'amount1' => $amount_value, + 'code' => $orgcode + ); + + + $sql="select * from hc_items_insurance where hc_items_id=".$master_item_id." and hc_insurance_id=".$insurance_id; + $query = $this->db->query($sql); + $chkitem= $query->result(); + + if($insurance_id==2) + { + if(count($chkitem)>0 ) + { + $insDone=$this->item_M->update_in_item( $data['update_insurance_item'],$chkitem[0]->id); + }else{ + $insDone=$this->item_M->insert_in_item( $data['update_insurance_item']); + } + } + + + $sql="select * from invoice_item where id=".$item_id; + $query = $this->db->query($sql); + $data['invoiceitem']= $query->result(); + + $invoice_id=0; + + if(count($data['invoiceitem'])>0) + { + $invoice_id=$data['invoiceitem'][0]->inv_master_id; + } + + $sql="select i.*,t.group_desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select *,(case payment_mode when 1 Then 'Cash' when 2 then 'Bank Card' when 3 then 'IPD Credit' when 4 then 'Org. Credit' else 'Pending' end) as Payment_type_str from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $discount_amount=$data['invoice_master'][0]->discount_amount ; + $correction_amount=$data['invoice_master'][0]->correction_amount ; + + $total_amount=$data['invoiceGtotal'][0]->Gtotal; + $net_amount=$total_amount-$discount_amount; + $net_amount=$net_amount-$correction_amount; + $balance_amount=$net_amount; + + $dataupdate = array( + 'total_amount' => $total_amount, + 'net_amount' => $net_amount + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + } + + public function update_status() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Ocasemaster_M'); + + $case_id=$this->input->post('caseid'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from organization_case_master where id='".$case_id."'"; + $query = $this->db->query($sql); + $case_master= $query->result(); + + $log=$case_master[0]->log.'\nUpdate Status:'.$this->input->post('status').'-Upd By:'.$user_name.'['.$user_id.']'.date('d/m/Y H:m:s'); + + $status=$this->input->post('status'); + + $org_submit_date= str_to_MysqlDate($this->input->post('org_submit_date')); + + $data = array( + 'status'=> $status, + 'log'=>$log, + ); + + if($status==1) + { + $data['org_submit_date']=$org_submit_date; + } + + $this->Ocasemaster_M->update( $data,$case_id); + + } + + public function org_contingent_update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $htmldata=$this->input->post('HTMLData'); + $case_id=$this->input->post('case_id'); + + $this->load->model('Ocasemaster_M'); + $data['master'] = array( + 'contingent_bill' => $htmldata, + 'contingent_update_by' => $user_name + ); + + $case_id=$this->input->post('case_id'); + $this->Ocasemaster_M->update($data['master'],$case_id); + + $rvar=array( + 'update' =>'1', + 'msg' => 'Update Done '.$case_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function case_invoice_print($caseid) + { + + $sql="select * from organization_case_master where id=".$caseid; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $pno=$data['orgcase'][0]->p_id; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$inc_card_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from v_case_invoice v + where v.id=".$caseid." order by s_Date "; + + $query = $this->db->query($sql); + $data['showinvoice']= $query->result(); + + $sql="select sum(amount) as GTotal from v_case_invoice v + where v.id=".$caseid." "; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $this->load->view('Invoice/caseinvoice_V',$data); + + } + + public function getCaseTable() + { + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 =>'case_id_code', + 1 => 'Reg_No', + 2 => 'p_f_info', + 3 => 'date_registration', + 4=> 'insurance_card_name', + 5=> 'insurance_company_name', + 6=> 'str_status' + ); + + // getting total number records without any search + $sql_f_all = "select c.id,c.p_id,c.case_id_code,Concat(c.insurance_no,'/',c.insurance_no_1) as Reg_No, + c.insurance_company_name,Concat(c.p_name,'
','[',p_code,if(i.id is null,'',concat('/',i.ipd_code)),']') as p_f_info,p.p_code, + c.date_registration,c.insurance_card_name,c.status, + (case c.status when 0 then 'Pending' + when 1 then 'Ready for submission' + when 2 then 'submitted' else 'Other' end) as str_status,c.insurance_id, + Date_Format(c.date_registration,'%d-%m-%Y') as date_registration_in ,i.ipd_code "; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from ((organization_case_master c join patient_master p on c.p_id=p.id ) + left join ipd_master i on c.id=i.case_id and p.id=i.p_id) "; + + $total_sql=$sql_count.$sql_from; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE c.case_type=0 "; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //CaseCode-InsuranceCard-ClaimNo + $sql_where.=" AND case_id_code LIKE '%".$requestData['columns'][0]['search']['value']."' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //p_code-P-Name + $sql_where.=" AND ( p.p_fname LIKE '%".$requestData['columns'][1]['search']['value']."%' "; + $sql_where.=" OR p.mphone1 LIKE '".$requestData['columns'][1]['search']['value']."' "; + $sql_where.=" OR i.ipd_code LIKE '%".$requestData['columns'][1]['search']['value']."' "; + $sql_where.=" OR p_code LIKE '%".$requestData['columns'][1]['search']['value']."' )"; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][2]['search']['value']) ){ //insurance_card_name + $sql_where.=" AND c.insurance_card_name LIKE '%".$requestData['columns'][2]['search']['value']."%' "; + $sql_where_flag=1; + } + + //if( !empty($requestData['columns'][3]['search']['value']) ){ //insurance_company_name + // $sql_where.=" AND insurance_company_name LIKE '%".$requestData['columns'][3]['search']['value']."%' "; + // $sql_where_flag=1; + //} + + if( !empty($requestData['columns'][3]['search']['value'])){ //insurance_card_name + + if($requestData['columns'][3]['search']['value'] < 0){ + $sql_where.=" AND c.insurance_id not in (1,2,53,63) "; + $sql_where_flag=1;} + + if($requestData['columns'][3]['search']['value']>0){ + $sql_where.=" AND c.insurance_id = '".$requestData['columns'][3]['search']['value']."' "; + $sql_where_flag=1;} + } + + + if( !empty($requestData['columns'][4]['search']['value']) ){ //insurance_company_name + $sql_where.=" AND ( c.insurance_no LIKE '".$requestData['columns'][4]['search']['value']."%' "; + $sql_where.=" OR c.insurance_no_1 LIKE '".$requestData['columns'][4]['search']['value']."%' ) "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][5]['search']['value'])){ //insurance_card_name + $sql_where.=" AND c.status = '".$requestData['columns'][5]['search']['value']."' "; + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" group by c.id ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function contingent_bill($caseid,$print=0) + { + $sql="select * from organization_case_master where id='".$caseid."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $pno=$data['orgcase'][0]->p_id; + $caseid=$data['orgcase'][0]->id; + $claim_id=$data['orgcase'][0]->insurance_no_1; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$inc_card_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $content=$data['orgcase'][0]->contingent_bill; + + if($print==1) + { + //echo $content; + $page_head=""; + + $content=$page_head.$content; + //create_report_pdf($content,'Report_1.pdf'); + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + $this->load->view('Invoice/Org_Contingent_bill',$data); + } + + } + + + public function create_contingent_bill($caseid) + { + $sql="select * from organization_case_master where id='".$caseid."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + $pno=$data['orgcase'][0]->p_id; + $caseid=$data['orgcase'][0]->id; + $claim_id=$data['orgcase'][0]->insurance_no_1; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $ins_comp_id=$data['orgcase'][0]->insurance_id; + $inc_card_id=$data['orgcase'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$inc_card_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from v_case_invoice v + where v.id=".$caseid." order by Charge_type,Adate "; + + $query = $this->db->query($sql); + $data['showinvoice']= $query->result(); + + $sql="select sum(amount) as GTotal from v_case_invoice v + where v.id=".$caseid." "; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $content=""; + + + $content.='

CLAIM ID : '.$claim_id.'

'; + $content.="

Name of Hospital : ".H_Name."

"; + + $content.='

CONTINGENT BILL

'; + + $content.=''; + $content.=''; + $content.=''; + $content.=''; + $content.=''; + $content.='
Voucher No. ______________________________Date : ………………………
Amount of allotment : Rs.……………………………
Amount expended and for which bills have already been submitted for payment :Rs.……………………………
Balance of allotment excliding the amount of this bills :Rs.……………………………
'; + $content.='

Expenditure an account of : Treatment/ Super Treatment/ Special investigation / Consultant fee

'; + + $content.=''; + $content.=''; + $content.=''; + $content.=''; + $content.=''; + $content.=''; + + $content.=''; + $content.="'; + $content.="'; + $content.="'; + $content.=''; + $content.='
In respect of
Name of Patient: '.strtoupper($data['orgcase'][0]->p_name).'
Relation : '.strtoupper($data['orgcase'][0]->relation_with_cardholder).'Service No.: '.strtoupper($data['orgcase'][0]->insurance_no_2).'
ESM Name : ".strtoupper($data['orgcase'][0]->insurance_card_name).'ECHS CARD No. : ".strtoupper($data['orgcase'][0]->insurance_no).'Rank : ".strtoupper($data['orgcase'][0]->card_remark).'
'; + + $content.='

Authority:
'; + $content.='Government of India letter No. 24 (3)/03/US/(WE)/D (Res) (i) dated 08 Sep 2003
'; + $content.='Government of India letter No. 24 (8)/03/US/(WE)/D (Res) dated 19 Dec 2003
'; + $content.='Central Organization ECHS Letter NoB/49773/AG/ECHS dated 25 May 2004.

'; + + $sql='select c.id,c.case_id_code,c.p_id,sum(o.opd_fee_amount) as tamount, + count(o.opd_id) as item_qty,Min(o.opd_fee_amount) as rate + from opd_master o join organization_case_master c on o.insurance_case_id=c.id + where opd_status in (1,2) and id='.$caseid.' group by c.id'; + + $query = $this->db->query($sql); + $opd= $query->result(); + + $sql="select i.item_type,t.`desc` AS item_name,sum(i.item_amount) as tamount,sum(i.item_qty) as unit,i.item_rate + from invoice_master m join invoice_item i join hc_item_type t + on m.id=i.inv_master_id and i.item_type=t.itype_id + where item_type=34 and m.ipd_include=1 and invoice_status=1 and + insurance_case_id=$caseid + group by i.item_type"; + $query = $this->db->query($sql); + $data['invoice_list_1']= $query->result(); + + $sql="select i.item_type,t.`desc` AS item_name,sum(i.item_amount) as tamount,sum(i.item_qty) as unit,i.item_rate + from invoice_master m join invoice_item i join hc_item_type t + on m.id=i.inv_master_id and i.item_type=t.itype_id + where item_type not in (34,35) and m.ipd_include=1 and invoice_status=1 and + insurance_case_id=$caseid + group by i.item_type"; + $query = $this->db->query($sql); + $data['invoice_list_2']= $query->result(); + + $sql="select i.item_type,t.`desc` AS item_name,sum(i.item_amount) as tamount,sum(i.item_qty) as unit,i.item_rate + from invoice_master m join invoice_item i join hc_item_type t + on m.id=i.inv_master_id and i.item_type=t.itype_id + where item_type=35 and m.ipd_include=1 and invoice_status=1 and + insurance_case_id=$caseid + group by i.item_type"; + $query = $this->db->query($sql); + $data['invoice_list_3']= $query->result(); + + $sql="select i.item_type,i.item_name,t.group_desc,sum(i.item_amount) as tamount,sum(i.item_qty) as unit, + i.item_rate + FROM (ipd_master m join ipd_invoice_item i on m.id=i.ipd_id) + join ipd_item_type t ON i.item_type=t.itype_id + and i.item_type=t.itype_id + WHERE i.package_id=0 and t.itype_id=2 AND m.case_id=$caseid + group by i.item_type"; + $query = $this->db->query($sql); + $data['ipd_invoice_list_1']= $query->result(); + + $sql="select i.item_type,i.item_name,t.group_desc,sum(i.item_amount) as tamount,sum(i.item_qty) as unit, + i.item_rate + FROM (ipd_master m join ipd_invoice_item i on m.id=i.ipd_id) + join ipd_item_type t ON i.item_type=t.itype_id + and i.item_type=t.itype_id + WHERE i.package_id=0 and t.itype_id not in (2,6) AND m.case_id=$caseid + group by i.item_type"; + $query = $this->db->query($sql); + $data['ipd_invoice_list_2']= $query->result(); + + $sql="select i.item_type,i.item_name,t.group_desc,sum(i.item_amount) as tamount,sum(i.item_qty) as unit, + i.item_rate + FROM (ipd_master m join ipd_invoice_item i on m.id=i.ipd_id) + join ipd_item_type t ON i.item_type=t.itype_id + and i.item_type=t.itype_id + WHERE i.package_id=0 and t.itype_id=6 AND m.case_id=$caseid + group by i.item_type"; + $query = $this->db->query($sql); + $data['ipd_invoice_list_3']= $query->result(); + + $sql="select sum(m.net_amount) as Med_Amount,o.id ,count(m.id) as no_inv + from invoice_med_master m join ipd_master p join organization_case_master o + on m.ipd_id=p.id and p.case_id=o.id and m.ipd_credit=1 and m.ipd_credit_type=1 + where o.id=".$caseid." group by o.id "; + $query = $this->db->query($sql); + $data['MedInvoice']= $query->result(); + + $sql="SELECT p.* + FROM ipd_package p JOIN ipd_master m ON p.ipd_id=m.id + WHERE m.case_id=$caseid"; + $query = $this->db->query($sql); + $data['ipd_package']= $query->result(); + + + if(count($data['MedInvoice'])==0) + { + $sql="select sum(m.net_amount) as Med_Amount,o.id ,count(m.id) as no_inv + from invoice_med_master m join organization_case_master o + on m.case_id=o.id and m.case_credit=1 + where o.id=".$caseid." group by o.id "; + + $query = $this->db->query($sql); + $data['MedInvoice']= $query->result(); + } + + $sql="select p.* from ipd_master p join organization_case_master o + on p.case_id=o.id where o.id=". $caseid; + $query = $this->db->query($sql); + $IPDMaster= $query->result(); + + $tableHead=' + + + + + + + + + '; + $tbody=""; + $srno=0; + $total_gross_bill=0.00; + + if(count($opd)>0) + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$opd[0]->tamount; + } + + foreach($data['ipd_package'] as $row) + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->package_Amount; + } + + foreach($data['invoice_list_1'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + foreach($data['ipd_invoice_list_1'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + foreach($data['invoice_list_2'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + foreach($data['ipd_invoice_list_2'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + foreach($data['invoice_list_3'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + foreach($data['ipd_invoice_list_3'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + + + foreach($data['ipd_invoice_list_2'] as $row) + { + if($row->item_type<>'') + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + '; + $tbody.=""; + $total_gross_bill=$total_gross_bill+$row->tamount; + } + } + + if(count($data['MedInvoice'])>0) + { + $srno=$srno+1; + $tbody.=''; + $tbody.=' + + '; + $tbody.=''; + $total_gross_bill=$total_gross_bill+$data['MedInvoice'][0]->Med_Amount; + } + + $tbody.=''; + + if(count($IPDMaster)>0) + { + if($IPDMaster[0]->chargeamount1>0) + { + $tbody.=''; + $tbody.=' + '; + $tbody.=''; + $total_gross_bill=$total_gross_bill+$IPDMaster[0]->chargeamount1; + } + + if($IPDMaster[0]->chargeamount2>0) + { + $tbody.=''; + $tbody.=' + '; + $tbody.=''; + $total_gross_bill=$total_gross_bill+$IPDMaster[0]->chargeamount2; + } + + if($IPDMaster[0]->Discount>0) + { + $tbody.=''; + $tbody.=' + '; + $tbody.=''; + $total_gross_bill=$total_gross_bill-$IPDMaster[0]->Discount; + } + + if($IPDMaster[0]->Discount2>0) + { + $tbody.=''; + $tbody.=' + '; + $tbody.=''; + $total_gross_bill=$total_gross_bill-$IPDMaster[0]->Discount2; + } + + if($IPDMaster[0]->Discount3>0) + { + $tbody.=''; + $tbody.=' + '; + $tbody.=''; + $total_gross_bill=$total_gross_bill-$IPDMaster[0]->Discount3; + } + + } + + $tableFooter=""; + $tableFooter.=''; + + $tableFooter.="
Sr.No.DateDetails of ExpenditureNumber or QuantityRatePerAmount
'.$srno.''.date('Y-m-d').'OPD'.$opd[0]->rate.''.$opd[0]->item_qty.''.$opd[0]->rate.'CGHS'.$opd[0]->tamount.'
'.$srno.''.date('Y-m-d').'Package :'.$row->package_name.''.$row->package_Amount.'1'.$row->package_Amount.'CGHS'.$row->package_Amount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').''.$row->item_name.''.$row->item_rate.''.$row->unit.''.$row->item_rate.'CGHS'.$row->tamount.'
'.$srno.''.date('Y-m-d').'Medicine'.$data['MedInvoice'][0]->Med_Amount.''.$data['MedInvoice'][0]->no_inv.''.$data['MedInvoice'][0]->Med_Amount.''.$data['MedInvoice'][0]->Med_Amount.'
Gross Total '.Round($total_gross_bill,0).'
'.$IPDMaster[0]->charge1.''.$IPDMaster[0]->chargeamount1.'
'.$IPDMaster[0]->charge2.''.$IPDMaster[0]->chargeamount2.'
'.$IPDMaster[0]->Discount_Remark.''.$IPDMaster[0]->Discount.'
'.$IPDMaster[0]->Discount_Remark2.''.$IPDMaster[0]->Discount3.'
'.$IPDMaster[0]->Discount_Remark3.''.$IPDMaster[0]->Discount3.'
Net Total '.Round($total_gross_bill,0).'
"; + + $content.=$tableHead.$tbody.$tableFooter; + + $content.="

Net Amount due(In words) : Rs. ".number_to_word(Round($total_gross_bill,0))."

"; + + $content.=""; + $content.="
Date : ......................Pre Received Payment
From : ...........................................
"; + + $content.='

Certified that
'; + $content.='

  1. Certified that above have been claimed on the basis of approved charges as noted in MOA signed for the treatment of ECHS member.
  2. '; + $content.='
  3. The rate is/are fair and reasonable and less than CGHS rates
  4. '; + $content.='
  5. The expenditure incurred is debatable to major Head 2076 Minor head 107, Sub Head E-Medical treatment related expenditure code head 365/00.
  6. '; + $content.='
  7. The expenditure has been incurred the interest of Ex-Serviceman

'; + + $content.=''; + $content.='
Vetted and Recommended / Not RecommendedSig of OIC ECHS Polyclinic

Date : ......................

Place: ......................
.....................
'; + + $dataupdate = array( + 'contingent_bill' => $content + ); + + $this->load->model('Ocasemaster_M'); + $this->Ocasemaster_M->update($dataupdate,$caseid); + + $sql="select * from organization_case_master where id='".$caseid."'"; + $query = $this->db->query($sql); + $data['orgcase']= $query->result(); + + echo 'Created'; + + //create_report_pdf($content,'Report_1.pdf'); + + } + + public function org_confirm_payment() + { + $amount_r=$this->input->post('amount_r'); + $amount_d=$this->input->post('amount_d'); + $amount_claim=$this->input->post('amount_claim'); + $amount_tds=$this->input->post('amount_tds'); + $date_payment=str_to_MysqlDate($this->input->post('date_payment')); + $pay_info=$this->input->post('pay_info'); + $org_id=$this->input->post('org_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.date('d-m-Y H:i:s'); + + $this->load->model('Ocasemaster_M'); + + $data= array( + 'pay_date_received' => $date_payment, + 'amount_recived' => $amount_r, + 'amount_deduction' => $amount_d, + 'amount_claim' => $amount_claim, + 'amount_tds' => $amount_tds, + 'amount_payment_info' => $pay_info, + 'status' => '3', + 'amount_update_by' => $user_name + ); + + $this->Ocasemaster_M->update( $data,$org_id); + + $rvar=array( + 'update' =>1, + 'showcontent'=>'Update' + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + + public function org_payment_request() + { + $sql="select * from org_payment_request "; + $query = $this->db->query($sql); + $data['org_info']= $query->result(); + + $sql="select * from v_ipd_list where org_id='".$data['org_info'][0]->id."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$data['org_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $this->load->view('Invoice/org_case_payment',$data); + } + + public function load_model_box($caseidcode) + { + $sql="select * from organization_case_master where case_id_code='".$caseidcode."' "; + $query = $this->db->query($sql); + $data['org_info']= $query->result(); + + $sql="select * from v_ipd_list where org_id='".$data['org_info'][0]->id."' "; + $query = $this->db->query($sql); + $data['ipd_info']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$data['org_info'][0]->p_id."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + $this->load->view('Invoice/org_case_payment',$data); + } + + public function payment_request() + { + $input_pay_amount=$this->input->post('input_pay_amount'); + $caseidcode=$this->input->post('caseid'); + $input_remark=$this->input->post('input_remark'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.date('d-m-Y H:i:s'); + + $sql="select * from organization_case_master where id='".$caseidcode."' "; + $query = $this->db->query($sql); + $org_info= $query->result(); + + $sql="select * from org_payment_request where payment_process=0 and org_id='".$caseidcode."' "; + $query = $this->db->query($sql); + $org_payment_request= $query->result(); + + $patient_id=0; + $org_date=date('Y-m-d H:i:s'); + + if(count($org_info)>0) + { + $patient_id=$org_info[0]->p_id; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$patient_id."' "; + $query = $this->db->query($sql); + $person_info= $query->result(); + + $org_date=$org_info[0]->insert_datetime; + $patient_name=$person_info[0]->p_fname; + + $org_code=$org_info[0]->case_id_code; + } + + $paydata = array( + 'org_id'=> $caseidcode, + 'org_code'=>$org_code, + 'patient_id'=>$patient_id, + 'org_date'=>$org_date, + 'patient_name'=>$patient_name, + 'payment_amount'=>$input_pay_amount, + 'payment_request_datetime'=>date('Y-m-d H:i:s'), + 'request_by_id'=>$user_id, + 'request_by'=>$user_name, + 'remark'=>$input_remark, + ); + + $this->load->model('Payment_M'); + + if(count($org_payment_request)<1) + { + $insert_id=$this->Payment_M->insert_org_payment($paydata); + }else{ + $this->Payment_M->update_org_payment($paydata,$org_payment_request[0]->id); + $insert_id=$org_payment_request[0]->id; + } + + echo 'Request has been Created : Req. ID -> '.$insert_id; + } + + + public function refund_request() + { + $input_refund_amount=$this->input->post('input_refund_amount'); + $caseidcode=$this->input->post('caseid'); + $input_remark=$this->input->post('input_refund_remark'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'.date('d-m-Y H:i:s'); + + $sql="select * from organization_case_master where id='".$caseidcode."' "; + $query = $this->db->query($sql); + $org_info= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=3 and refund_type_id=$caseidcode"; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + $patient_id=0; + $org_date=date('Y-m-d H:i:s'); + + if(count($org_info)>0) + { + $patient_id=$org_info[0]->p_id; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) as str_age from patient_master where id='".$patient_id."' "; + $query = $this->db->query($sql); + $person_info= $query->result(); + + $org_date=$org_info[0]->insert_datetime; + $patient_name=$person_info[0]->p_fname; + + $org_code=$org_info[0]->case_id_code; + } + + $RefundRequest = array( + 'refund_type' => 3, + 'refund_type_id' => $caseidcode, + 'refund_type_code' => $org_code, + 'refund_type_reason' => $input_remark, + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $input_refund_amount, + 'patient_id' => $patient_id, + 'patient_name' =>$patient_name + ); + + $this->load->model('Payment_M'); + + if(count($refund_order)<1) + { + $insert_id=$this->Payment_M->insert_refundorder($RefundRequest); + echo 'Refund Request has been Created : Req. ID -> '.$insert_id; + }else{ + echo 'Refund Request Pending, Please Refund or Cancel Last Refund Request'; + } + + } + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Package.php b/old_code_ci3/controllers/Package.php new file mode 100644 index 0000000..d186a93 --- /dev/null +++ b/old_code_ci3/controllers/Package.php @@ -0,0 +1,342 @@ +db->query($sql); + $data['data'] = $query->result(); + + $this->load->view('IPD_Package/item_type_search_v', $data); + } + + public function search_adv($itype_id = 1) + { + + $sql = "SELECT * FROM package where pakage_group_id=" . $itype_id; + $query = $this->db->query($sql); + $data = $query->result(); + echo ' Print

'; + + echo ' + + + + + + + + '; + if (count($data) > 0) { + for ($i = 0; $i < count($data); ++$i) { + echo ' + + + + '; + } + } + + echo ' + + + + + + + +
Package NameAmount
' . $data[$i]->ipd_pakage_name . '' . $data[$i]->Pakage_Min_Amount . ' + +
Package NameAmount
'; + echo ""; + } + + public function search() + { + $sql = "SELECT * FROM package_group order by pakage_group_name"; + $query = $this->db->query($sql); + $data['package_group'] = $query->result(); + + $sql = "SELECT * FROM package where pakage_group_id=1"; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $this->load->view('IPD_Package/item_search_V', $data); + } + + + public function search_ipd() + { + $sql = "SELECT * FROM ipd_item_type order by group_desc"; + $query = $this->db->query($sql); + $data['labitemtype'] = $query->result(); + + $sql = "SELECT * FROM ipd_items where itype=1"; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $this->load->view('IPD_Package/item_search_V', $data); + } + + public function search_print($itype_id = 1) + { + + $sql = "SELECT * FROM v_hc_items where itype=" . $itype_id . " order by group_desc"; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $this->load->view('IPD_Package/item_item_list', $data); + } + + function itemtype_record($id) + { + $sql = "SELECT *,(case is_ipd_opd when 0 then 'OPD-IPD' when 1 then 'OPD' when 2 then 'IPD' end) as isIPD_OPD + FROM hc_item_type where itype_id='" . $id . "' order by group_desc"; + $query = $this->db->query($sql); + $data['data_item'] = $query->result(); + + $this->load->view('IPD_Package/item_type_profile', $data); + } + + function item_record($id) + { + + $sql = "select * from package where id=" . $id; + $query = $this->db->query($sql); + $data['data_item'] = $query->result(); + + $sql = "select * from v_insurance_package_list where c_item_id=$id"; + $query = $this->db->query($sql); + $data['data_insurance_item'] = $query->result(); + + $sql = "select * from hc_insurance where id>1"; + $query = $this->db->query($sql); + $data['data_insurance'] = $query->result(); + + $this->load->view('IPD_Package/item_profile_V', $data); + } + + public function UpdateRecord() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Package_M'); + + $data = array( + 'ipd_pakage_name' => $this->input->post('input_Package_name'), + 'Pakage_description' => $this->input->post('input_Pakage_description'), + 'Pakage_Min_Amount' => $this->input->post('input_Pakage_Min_Amount'), + 'update_by' => date('Y-m-d H:i:s') + ); + $old_id = $this->input->post('p_id'); + $update = $this->Package_M->update($data, $old_id); + + if ($update > 0) { + $rvar = array( + 'update' => 1, + 'showcontent' => Show_Alert('success', 'Saved', 'Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function AddRecord() + { + $sql = "select * from package_group"; + $query = $this->db->query($sql); + $data['data_item_type'] = $query->result(); + + $this->load->view('IPD_Package/item_create_V', $data); + } + + + public function AddItemTypeRecord() + { + $this->load->view('IPD_Package/item_type_create'); + } + + public function CreateRecord() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Package_M'); + $data = array( + 'pakage_group_id' => $this->input->post('Item_Type'), + 'ipd_pakage_name' => $this->input->post('input_Item_name'), + 'Pakage_Min_Amount' => $this->input->post('input_amount'), + 'update_date' => date('Y-m-d H:i:s'), + + ); + + $inser_id = $this->Package_M->insert($data); + + if ($inser_id > 0) { + + $rvar = array( + 'insertid' => $inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function AddInsuranceItemRecord() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Package_M'); + $data = array( + 'hc_items_id' => $this->input->post('p_id'), + 'hc_insurance_id' => $this->input->post('ins_company_name'), + 'i_amount' => $this->input->post('input_amount'), + 'code' => $this->input->post('input_item_code') + ); + + $inser_id = $this->Package_M->insert_in_item($data); + + if ($inser_id > 0) { + $sql = "select * from v_insurance_package_list where c_item_id=" . $this->input->post('p_id'); + $query = $this->db->query($sql); + $data_insurance_item = $query->result(); + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data_insurance_item); ++$i) { + echo ' + + + + + '; + } + echo '
Company NameAmountCodeAction
' . $data_insurance_item[$i]->ins_company_name . '' . $data_insurance_item[$i]->i_amount . '' . $data_insurance_item[$i]->code . '
'; + } + } + + public function remove_record_item() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Package_M'); + $data = array( + 'isdelete' => $this->input->post('in_remove_id') + ); + + $inser_id = $this->Package_M->delete_in_item($data, $this->input->post('in_remove_id')); + + if ($inser_id > 0) { + $sql = "select * from v_insurance_item_list where c_item_id=" . $this->input->post('p_id'); + $query = $this->db->query($sql); + $data_insurance_item = $query->result(); + + echo ' + + + + + + + + + '; + for ($i = 0; $i < count($data_insurance_item); ++$i) { + echo ' + + + + + '; + } + echo '
Company NameAmountCodeAction
' . $data_insurance_item[$i]->ins_company_name . '' . $data_insurance_item[$i]->i_amount . '' . $data_insurance_item[$i]->code . '
'; + } + } + + + public function _render_page($view, $data = null, $returnhtml = false) //I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data : $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html; //This will return html on 3rd argument being true + } + + + public function CreateItemTypeRecord() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Package_M'); + $data = array( + 'is_ipd_opd' => $this->input->post('Item_Type_ipd'), + 'group_desc' => $this->input->post('input_Item_type') + ); + + $inser_id = $this->Package_M->insert_type($data); + + if ($inser_id > 0) { + + $rvar = array( + 'insertid' => $inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function UpdateItemTypeRecord() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $this->load->model('Package_M'); + + $data = array( + 'is_ipd_opd' => $this->input->post('Item_Type_ipd'), + 'group_desc' => $this->input->post('input_Item_type') + ); + + $old_id = $this->input->post('itemtype_id'); + $update = $this->Package_M->update_type($data, $old_id); + + if ($update > 0) { + $rvar = array( + 'update' => 1, + 'showcontent' => Show_Alert('success', 'Saved', 'Data Saved successfully') + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } +} diff --git a/old_code_ci3/controllers/PathLab.php b/old_code_ci3/controllers/PathLab.php new file mode 100644 index 0000000..a60011e --- /dev/null +++ b/old_code_ci3/controllers/PathLab.php @@ -0,0 +1,1354 @@ +input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('Invoice_M'); + $this->load->model('Payment_M'); + + $invoice_id=$this->input->post('invoice_id'); + + $sql="select * from invoice_master where id='".$invoice_id."'"; + $query = $this->db->query($sql); + $inv_master= $query->result(); + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as tPayment + from payment_history where payof_type=2 and payof_id='".$invoice_id."'"; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $TotPaymentR=0; + + if(count($payment_history)>0) + { + $TotPaymentR=$payment_history[0]->tPayment; + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $pay_remark=''; + + if($inv_master[0]->discount_amount>0) + { + $pay_remark='Dis.Amt.:'.$inv_master[0]->discount_desc.' /Amount: '. $inv_master[0]->discount_amount.'/Update:'.$inv_master[0]->disc_update_by; + } + + $amountpaid=$this->input->post('input_amount_paid'); + $bank_id=$this->input->post('cbo_pay_type'); + + if($amountpaid<0){ + $amountpaid=$amountpaid*-1; + } + + $amountbalanace=0.00; + + if($amountpaid < $inv_master[0]->net_amount ); + { + $amountbalanace=$inv_master[0]->net_amount-$TotPaymentR; + } + + if($this->input->post('mode')==1) + { + $paydata = array( + 'payment_mode'=> '1', + 'payof_type'=>'2', + 'payof_id'=>$invoice_id, + 'payof_code'=>$inv_master[0]->invoice_code, + 'credit_debit'=>'0', + 'amount'=>$amountpaid, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'update_by_id'=>$user_id + ); + + if($amountpaid<=$amountbalanace) + { + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '1', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_id'=>$insert_id, + 'payment_mode_desc'=>'Cash', + 'confirm_invoice'=>date('Y-m-d H:i:s'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $this->Invoice_M->update( $data,$invoice_id); + } + + $status='CASH'; + $showcontent=$status; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + } + + if($this->input->post('mode')==2) + { + $FormRules = array( + array( + 'field' => 'input_card_tran', + 'label' => 'Card Transcation ID', + 'rules' => 'required|min_length[3]|max_length[15]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $paydata = array( + 'payment_mode'=> '2', + 'payof_type'=>'2', + 'payof_id'=>$invoice_id, + 'payof_code'=>$inv_master[0]->invoice_code, + 'credit_debit'=>'0', + 'amount'=>$amountpaid, + 'payment_date'=>date('Y-m-d H:i:s'), + 'remark'=>$pay_remark, + 'update_by'=>$user_name.'['.$user_id.']', + 'pay_bank_id'=>$this->input->post('cbo_pay_type'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'update_by_id'=>$user_id + ); + + if($amountpaid<=$amountbalanace) + { + $insert_id=$this->Payment_M->insert($paydata); + + $data = array( + 'payment_mode'=> '2', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_mode_desc'=>'Bank Card/Online', + 'confirm_invoice'=>date('Y-m-d H:i:s'), + 'payment_id'=>$insert_id, + 'card_bank'=>$this->input->post('input_card_mac'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'cust_card'=>$this->input->post('input_card_bank'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $this->Invoice_M->update( $data,$invoice_id); + } + + + + $status='Bank Card'; + $showcontent=$status; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + $encode_data = json_encode($rvar); + + } + else{ + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + + $encode_data = json_encode($rvar); + } + } + + if($this->input->post('mode')==3) + { + $data = array( + 'payment_mode'=> '3', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'confirm_invoice'=>date('Y-m-d H:i:s'), + 'payment_mode_desc'=>'IPD Credit', + 'ipd_id'=>$this->input->post('ipd_id'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $this->Invoice_M->update( $data,$invoice_id); + + $sql="select * from ipd_master where id=".$this->input->post('ipd_id'); + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + if(count($ipd_master)>0) + { + $data = array( + 'insurance_case_id'=>$ipd_master[0]->case_id + ); + + $this->Invoice_M->update( $data,$invoice_id); + + } + $status='IPD Credit'; + + $rvar=array( + 'update' =>1 + ); + + $encode_data = json_encode($rvar); + } + + if($this->input->post('mode')==4) + { + $data = array( + 'payment_mode'=> '4', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_mode_desc'=>'Org.Case Credit', + 'confirm_invoice'=>date('Y-m-d H:i:s'), + 'insurance_case_id'=>$this->input->post('case_id'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $this->Invoice_M->update($data,$invoice_id); + + $status='Org. Credit'; + + + $rvar=array( + 'update' =>1, + 'showcontent'=>$status + ); + + $encode_data = json_encode($rvar); + + } + + if($this->input->post('mode')==5) + { + $data = array( + 'payment_mode'=> '1', + 'payment_status'=>'1', + 'invoice_status'=>'1', + 'payment_id'=>'0', + 'payment_mode_desc'=>'Zero Amount', + 'confirm_invoice'=>date('Y-m-d H:i:s'), + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id + ); + + $this->Invoice_M->update( $data,$invoice_id); + + $status='Zero Amount'; + $showcontent=$status; + + $rvar=array( + 'update' =>1, + 'showcontent'=>$showcontent + ); + + $encode_data = json_encode($rvar); + + } + + $this->load->model('Invoice_M'); + $this->Invoice_M->update_invoice_final($invoice_id); + + + echo $encode_data; + } + + public function IPD_Invoice_Edit($Invoice_ID) + { + $sql="select * from invoice_master where id=".$Invoice_ID; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $sql="select i.*,t.group_desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$Invoice_ID; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$Invoice_ID; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $pno=$data['invoiceMaster'][0]->attach_id; + $ipd_no=$data['invoiceMaster'][0]->ipd_id; + $ins_id=$data['invoiceMaster'][0]->insurance_card_id; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($ins_id>0) + { + $sql="select * from hc_item_type order by group_desc"; + }else{ + $sql="select * from hc_item_type where itype_id<>33 order by group_desc "; + } + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $path_cash=1; + $path_credit=1; + + $ins_comp_id=0; + if($ins_id>0) + { + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $ins_comp_id=$data['hc_insurance_card'][0]->insurance_id; + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $path_cash=$data['insurance'][0]->path_cash; + $path_credit=$data['insurance'][0]->path_credit; + } + + $data['pdata']=$ins_comp_id; + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + if($ins_comp_id<2) + { + $sql="select id,Concat(idesc,' : {',amount,'}') as sdesc from hc_items where itype=1 order by idesc "; + }else{ + $sql="select m.id,m.itype,m.idesc,m.amount,t.itype_id,t.is_ipd_opd,t.group_desc, + i.hc_insurance_id ,if(i.hc_insurance_id is null,m.amount,i.amount1) as amount1, + Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}',if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (hc_items m join hc_item_type t on m.itype=t.itype_id) + left join + (select * from hc_items_insurance where hc_insurance_id=".$ins_comp_id." and isdelete=0 ) as i on m.id=i.hc_items_id + where itype_id=1 order by m.idesc"; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + $this->load->model('invoice_M'); + + $today = date("Y-m-d"); + $expire = $data['invoiceMaster'][0]->inv_date; //from db + + $today_dt = new DateTime($today); + $inv_dt = new DateTime($expire); + + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days + from ipd_master where id=".$data['invoiceMaster'][0]->ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + if(count($data['ipd_master'])>0) + { + if($data['ipd_master'][0]->ipd_status==0) + { + $ipd_status=0; + }else{ + $ipd_status=1; + } + }else{ + $ipd_status=1; + } + + if($this->ion_auth->in_group('ChargeInvoiceUpdate') || ($ipd_status==0 && $this->ion_auth->in_group('IPDPayment') )) + { + $this->load->view('Invoice_PathLab',$data); + }else{ + + } + + //$this->load->view('Invoice_ipd_credit',$data); + } + + + public function addPathTest($pno,$ins_id=0,$opd_id=0) + { + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + $query = $this->db->query($sql); + $data['person_info']= $query->result(); + + if($opd_id>0) + { + $sql="select * from opd_master where p_id='".$pno."' and opd_id=".$opd_id." order by opd_id desc limit 1"; + }else{ + $sql="select * from opd_master where p_id='".$pno."' order by opd_id desc limit 1"; + } + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + if(count($data['opd_master'])>0) + { + $select_doc=$data['opd_master'][0]->doc_id; + $opd_code=$data['opd_master'][0]->opd_code; + }else{ + $select_doc=0; + $opd_code=''; + } + + $sql="select l.doc_id from ipd_master p join ipd_master_doc_list l on p.id=l.ipd_id + where p.ipd_status=0 and p.p_id=".$pno." "; + $query = $this->db->query($sql); + $data['ipd_master_docid']= $query->result(); + + if(count($data['ipd_master_docid'])>0) + { + $select_doc=$data['ipd_master_docid'][0]->doc_id; + } + + if($ins_id>0) + { + $sql="select * from hc_item_type order by group_desc"; + }else{ + $sql="select * from hc_item_type where itype_id<>33 order by group_desc"; + } + + $query = $this->db->query($sql); + $data['labitemtype']= $query->result(); + + $path_cash=1; + $path_credit=1; + + + $ins_comp_id=0; + if($ins_id>0) + { + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $ins_comp_id=$data['hc_insurance_card'][0]->insurance_id; + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $path_cash=$data['insurance'][0]->path_cash; + $path_credit=$data['insurance'][0]->path_credit; + } + + $data['pdata']=$ins_comp_id; + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + + + + if($ins_comp_id<2) + { + $sql="select id,Concat(idesc,' : {',amount,'}') as sdesc from hc_items where itype=1 order by idesc "; + }else{ + $sql="select m.id,m.itype,m.idesc,m.amount,t.itype_id,t.is_ipd_opd,t.group_desc, + i.hc_insurance_id ,if(i.hc_insurance_id is null,m.amount,i.amount1) as amount1, + Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}',if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (hc_items m join hc_item_type t on m.itype=t.itype_id) + left join + (select * from hc_items_insurance where hc_insurance_id=".$ins_comp_id." and isdelete=0 ) as i on m.id=i.hc_items_id + where itype_id=1 order by m.idesc"; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + $this->load->model('invoice_M'); + + if($ins_id>0) + { + $sql="select * from invoice_master where invoice_status=0 and insurance_card_id>0 and attach_id=".$pno; + }else{ + $sql="select * from invoice_master where invoice_status=0 and insurance_card_id=0 and attach_id=".$pno; + } + + $query = $this->db->query($sql); + $data['chk_draft_invoice']= $query->result(); + + if(count($data['chk_draft_invoice'])<1) + { + $data['insert_invoice'] = array( + 'attach_type' => '0', + 'opd_code' => $opd_code, + 'attach_id' => $pno, + 'refer_by_id' => $select_doc, + 'inv_date' => date('Y-m-d H:i:s'), + 'inv_name' => $data['person_info'][0]->p_fname, + 'insurance_id' => $ins_comp_id, + 'insurance_card_id' => $ins_id, + 'insurance_cash' => $path_cash, + 'insurance_credit' => $path_credit, + 'inv_a_code' => $data['person_info'][0]->p_code + ); + $inser_id=$this->invoice_M->create_invoice( $data['insert_invoice']); + }else{ + $today = date("Y-m-d"); + $expire = $data['chk_draft_invoice'][0]->inv_date; //from db + + $today_dt = new DateTime($today); + $inv_dt = new DateTime($expire); + + if ($inv_dt < $today_dt) { + + //$this->db->delete("invoice_master", "id=".$data['chk_draft_invoice'][0]->id); + //$this->db->delete("invoice_item", "inv_master_id=".$data['chk_draft_invoice'][0]->id); + + $data['insert_invoice'] = array( + 'attach_type' => '0', + 'attach_id' => $pno, + 'opd_code' => $opd_code, + 'refer_by_id' => $select_doc, + 'inv_date' => date('Y-m-d H:i:s'), + 'inv_name' => $data['person_info'][0]->p_fname, + 'insurance_id' => $ins_comp_id, + 'insurance_card_id' => $ins_id, + 'insurance_cash' => $path_cash, + 'insurance_credit' => $path_credit, + 'inv_a_code' => $data['person_info'][0]->p_code + ); + //$inser_id=$data['chk_draft_invoice'][0]->id; + $inser_id=$this->invoice_M->create_invoice( $data['insert_invoice']); + }else{ + $inser_id=$data['chk_draft_invoice'][0]->id; + } + } + + if($inser_id) + { + $sql="select * from invoice_master where id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $sql="select i.*,t.group_desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$inser_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + } + + $sql="select *,if(ipd_status=0,DATEDIFF(sysdate(),register_date),DATEDIFF(discharge_date,register_date)) as no_days from ipd_master where ipd_status=0 and p_id=".$data['invoiceMaster'][0]->attach_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $this->load->view('Invoice_PathLab',$data); + //$this->load->view('Invoice_ipd_credit',$data); + } + + public function list_pathtest_bytype() + { + $tid=$this->input->post('itype_idv'); + $ins_id=$this->input->post('ins_id'); + + $sql="select id,Concat(idesc,' : {',amount,'}') as sdesc from hc_items where itype=".$tid; + + if($ins_id>1) + { + $sql="select m.id,m.itype,m.idesc,m.amount,t.itype_id,t.is_ipd_opd,t.group_desc, + i.hc_insurance_id ,if(i.hc_insurance_id is null,m.amount,i.amount1) as amount1, + Concat(m.idesc,'{',if(i.hc_insurance_id is null,m.amount,i.amount1),'}',if(i.id is null,'',concat('[',i.code,']'))) as sdesc + from (hc_items m join hc_item_type t on m.itype=t.itype_id) + left join + (select * from hc_items_insurance where hc_insurance_id=".$ins_id." and isdelete=0 ) as i on m.id=i.hc_items_id + where itype_id=".$tid." order by m.idesc "; + }else{ + $sql="select id,Concat(idesc,' : [',amount,']') as sdesc from hc_items where itype=".$tid." order by idesc "; + } + + $query = $this->db->query($sql); + $data['labitem']= $query->result(); + + + echo '
+ +
'; + + //echo $sql; + + } + + public function update_refer_doc() + { + $invoice_id=$this->input->post('inv_id'); + $doc_id=$this->input->post('doc_id'); + $inv_date=str_to_MysqlDate($this->input->post('inv_date')); + + if($doc_id<1) + { + $refername=$this->input->post('refername'); + }else{ + $sql="select * from doctor_master where id=".$doc_id; + $query = $this->db->query($sql); + $data['doc_master']= $query->result(); + $refername=$data['doc_master'][0]->p_fname; + } + + + $dataupdate = array( + 'refer_by_id' => $doc_id, + 'inv_date' => $inv_date, + 'refer_by_other' => $refername, + 'invoice_status' =>'1', + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + } + + public function get_echs_id() + { + $itype_name_id_srno=$this->input->post('input_charge_code'); + $tid=$this->input->post('itype_idv'); + + $sql="select * from hc_items where itype=".$tid." and echs_sr_no='".$itype_name_id_srno."'"; + //echo $sql; + $query = $this->db->query($sql); + $data['echs_data']= $query->result(); + + if($query->num_rows()>0) + { + echo $data['echs_data'][0]->id; + }else{ + echo '0'; + } + } + + + + public function showinvoice($invoice_id) + { + $this->load->model('Invoice_M'); + $this->Invoice_M->update_invoice_final($invoice_id); + + $sql="select i.*,t.group_desc + from invoice_item i join hc_item_type t on i.item_type=t.itype_id + where i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select *, + (case payment_mode + when 1 Then 'Cash' + when 2 then 'Bank Card/Online' + when 3 then 'IPD Credit' + when 4 then 'Org. Credit' + else 'Pending' end) as Payment_type_str + from invoice_master + where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $ins_comp_id=$data['invoice_master'][0]->insurance_id; + $ins_id=$data['invoice_master'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + $sql="select * from patient_master_exten + where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select * from ipd_master + where ipd_status=0 and p_id=".$data['invoice_master'][0]->attach_id; + + if($data['invoice_master'][0]->ipd_id >0) + { + $sql="select * from ipd_master where id=".$data['invoice_master'][0]->ipd_id; + } + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $sql="select * from invoice_item i join hc_item_type t on i.item_type=t.itype_id + where t.is_ipd_opd=2 and i.inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $IPD_Credit= $query->result(); + + if(count($IPD_Credit)>0) + { + $data['IPD_Credit']="1"; + }else{ + $data['IPD_Credit']="0"; + } + + $sql="select * + from organization_case_master + where case_type=0 and status=0 and p_id=".$data['invoice_master'][0]->attach_id; + + if($data['invoice_master'][0]->insurance_case_id>0) + { + $sql="select * from organization_case_master + where case_type=0 and id=".$data['invoice_master'][0]->insurance_case_id; + }elseif(count($data['ipd_master'])>0){ + if($data['ipd_master'][0]->case_id>0) + { + $sql="select * from organization_case_master where case_type=0 and id=".$data['ipd_master'][0]->case_id; + } + } + + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + + $sql="select s.id,s.pay_type,m.bank_name + From hospital_bank m join hospital_bank_payment_source s on m.id=s.bank_id"; + $query = $this->db->query($sql); + $data['bank_data']= $query->result(); + + $this->load->view('Invoice_PathLab_final_V',$data); + } + + public function update_discount() + { + $invoice_id=$this->input->post('invoice_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $dataupdate = array( + 'discount_amount' => $this->input->post('input_dis_amt'), + 'discount_desc' => $this->input->post('input_dis_desc'), + 'disc_update_by'=>$user_name.'['.$user_id.']' + ); + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $discount_amount=$data['invoice_master'][0]->discount_amount ; + $correction_amount=$data['invoice_master'][0]->correction_amount ; + + $total_amount=$data['invoiceGtotal'][0]->Gtotal; + $net_amount=$total_amount-$discount_amount; + $net_amount=$net_amount-$correction_amount; + $paid_amount=$data['payment_history'][0]->paid_amount; + $balance_amount=$net_amount-$paid_amount; + + if($balance_amount>0 && $paid_amount>0) + { + $payment_part=1; + }else{ + $payment_part=0; + } + + $dataupdate = array( + 'total_amount' => $total_amount, + 'net_amount' => $net_amount, + 'payment_part_received' => $paid_amount, + 'payment_part_balance' => $balance_amount, + 'payment_part' => $payment_part, + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + } + + + public function showitem($type) + { + $this->load->model('invoice_M'); + + if($type==1) + { + $ins_id=$this->input->post('ins_id'); + + $sql="select * from hc_items where id=".$this->input->post('itype_name_id'); + if($ins_id>1) + { + $sql="select m.id,m.itype,m.idesc as sdesc,m.amount,t.itype_id,t.is_ipd_opd,t.group_desc,i.isdelete, + if(i.hc_insurance_id is null,0,i.hc_insurance_id) as hc_insurance_id ,if(i.hc_insurance_id is null, + m.amount,i.amount1) as amount1, + if(i.hc_insurance_id is null,'',i.code) as org_code + from (hc_items m left join hc_items_insurance i on m.id=i.hc_items_id and i.isdelete=0 and i.hc_insurance_id=".$ins_id." ) + join hc_item_type t on m.itype=t.itype_id where m.id=".$this->input->post('itype_name_id'); + + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount1; + $org_code=$data['itemlist'][0]->org_code; + + $item_custom_rate=$this->input->post('input_rate'); + + if($item_custom_rate>0) + { + $item_rate=$item_custom_rate; + } + + $amount_value=$this->input->post('input_qty')*$item_rate; + + } + else + { + $sql="select id,idesc as sdesc,amount from hc_items where id=".$this->input->post('itype_name_id'); + + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $item_rate=$data['itemlist'][0]->amount; + + $org_code=''; + + $item_custom_rate=$this->input->post('input_rate'); + + if($item_custom_rate>0) + { + $item_rate=$item_custom_rate; + } + $amount_value=$this->input->post('input_qty')*$item_rate; + } + + $data['insert_invoice_item'] = array( + 'inv_master_id' => $this->input->post('lab_invoice_id'), + 'item_type' => $this->input->post('itype_idv'), + 'item_id' => $this->input->post('itype_name_id'), + 'item_name' => $data['itemlist'][0]->sdesc, + 'item_rate' => $item_rate, + 'item_added_date' => str_to_MysqlDate(date('d/m/Y')), + 'item_qty' => $this->input->post('input_qty'), + 'item_amount' => $amount_value, + 'ins_id' => $ins_id, + 'org_code' => $org_code + ); + + $sql="select * from invoice_item where inv_master_id=".$this->input->post('lab_invoice_id')." and item_id=".$this->input->post('itype_name_id'); + $query = $this->db->query($sql); + + $itemcheck= $query->result(); + + if(count($itemcheck)<1) + { + $inser_id=$this->invoice_M->addinvoiceitem( $data['insert_invoice_item']); + } + + }if($type==2) + { + $amount_value=$this->input->post('update_qty') * $this->input->post('item_rate'); + + $data['update_invoice_item'] = array( + 'item_added_date' => str_to_MysqlDate(date('d/m/Y')), + 'item_qty' => $this->input->post('update_qty'), + 'item_amount' => $amount_value + ); + + $inser_id=$this->invoice_M->update_item( $data['update_invoice_item'],$this->input->post('itemid')); + + }else{ + $this->invoice_M->deleteinvoiceitem($this->input->post('itemid')); + echo 'DataDelete '.$this->input->post('itemid'); + //$this->db->delete("invoice_item", "id=".$this->input->post('itemid')); + } + + $sql="select i.*,t.group_desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$this->input->post('lab_invoice_id')." Order by i.id"; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $invoice_id=$this->input->post('lab_invoice_id'); + + $sql="select * from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$this->input->post('lab_invoice_id'); + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $total_amount=$data['invoiceGtotal'][0]->Gtotal; + $discount_amount=$data['invoice_master'][0]->discount_amount ; + $total_amount=$data['invoiceGtotal'][0]->Gtotal; + $net_amount=$total_amount-$discount_amount; + + $dataupdate = array( + 'total_amount' => $total_amount, + 'net_amount' => $net_amount + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + + echo ' + + + + + + + + + + '; + + $srno=0; + + foreach($data['invoiceDetails'] as $row) + { + $srno=$srno+1; + echo ''; + echo ''; + echo ''; + echo ''; + if(in_array($row->item_type, array(1,2,3,4,5))) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + echo ''; + + echo ' + + + + + + + + + +
#Charge TypeCharge NameRateQtyUpdated QtyAmount
'.$srno.''.$row->group_desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.''; + }else{ + echo ''.$row->item_rate.''.$row->item_amount.''; + echo ''; + } + + $sql="select * from lab_request where charge_item_id=".$row->id; + $query = $this->db->query($sql); + $lab_request= $query->result(); + + if(count($lab_request)<1) + { + echo ''; + } + + echo '
#Gross Total'.$data['invoiceGtotal'][0]->Gtotal.'
'; + } + + public function invoice_print($invoice_id) + { + $sql="select i.*,t.group_desc from invoice_item i join hc_item_type t on i.item_type=t.itype_id where i.inv_master_id=".$invoice_id." order by i.id"; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + $sql="select sum(item_amount) as Gtotal from invoice_item where inv_master_id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select *,(case invoice_status when 0 then 'Pending' when 1 then '' when 2 then 'Cancelled Invoice' else 'Other' end) as Invoice_status_str, + (case payment_mode when 1 Then 'Cash' when 2 then 'Bank Card' + when 3 then 'IPD Credit' when 4 then 'Org. Credit' else 'Pending' end) as Payment_type_str + from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'Male','Female') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$data['invoice_master'][0]->inv_date."') AS age from patient_master + where id=".$data['invoice_master'][0]->attach_id; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select *,get_payment_type(payment_mode,credit_debit) as Payment_type_str from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $ins_comp_id=$data['invoice_master'][0]->insurance_id; + $ins_id=$data['invoice_master'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $data['hc_insurance_card']= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $data['insurance']= $query->result(); + + + + $sql="select * from organization_case_master where id=".$data['invoice_master'][0]->insurance_case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + $this->load->view('invoice_pathlab_print_V',$data); + + } + + public function charge_crorg($inv_id,$org_code_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=2 and payof_id=".$inv_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=2 and refund_type_id=".$inv_id; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($payment_history)>0 && count($refund_order)<1) + { + if($payment_history[0]->paid_amount>0 && $invoice_master[0]->invoice_status==1) + { + $RefundRequest = array( + 'refund_type' => 2, + 'refund_type_id' => $inv_id, + 'refund_type_code' => $invoice_master[0]->invoice_code, + 'refund_type_reason' => 'Cr. to Org.', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $payment_history[0]->paid_amount, + 'patient_id' => $invoice_master[0]->attach_id, + 'patient_name' =>strtoupper($invoice_master[0]->inv_name) + ); + + $this->load->model('Payment_M'); + $this->Payment_M->insert_refundorder($RefundRequest); + } + } + + $dataupdate = array( + 'payment_mode' => 4, + 'payment_mode_desc' => 'Org. Credit', + 'payment_id' => 0, + 'insurance_case_id' => $org_code_id, + 'payment_status'=>1, + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id, + 'confirm_invoice'=>date('Y-m-d H:i:s'), + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$inv_id); + } + + public function invoice_PDF_print($invoice_id,$page_size=0) + { + $this->load->model('Invoice_M'); + $this->Invoice_M->update_invoice_final($invoice_id); + + + $sql="select i.*,t.group_desc + from invoice_item i join hc_item_type t on i.item_type=t.itype_id + where i.inv_master_id=".$invoice_id." order by t.group_desc,i.id"; + $query = $this->db->query($sql); + $data['invoiceDetails']= $query->result(); + + + $sql="select *,(case invoice_status when 0 then 'Pending' when 1 then '' when 2 then 'Cancelled Invoice' else 'Other' end) as Invoice_status_str, + (case payment_mode when 1 Then 'Cash' when 2 then 'Bank Card' + when 3 then 'IPD Credit' when 4 then 'Org. Credit' else 'Pending' end) as Payment_type_str , + date_format(confirm_invoice,'%d-%m-%Y %H:%i:%s') as confirm_invoice_datetime + from invoice_master where id=".$invoice_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $sql="select *,if(gender=1,'M','F') as xgender, + GET_AGE_2(dob,age,age_in_month,estimate_dob,'".$data['invoice_master'][0]->inv_date."') AS age from patient_master + where id='".$data['invoice_master'][0]->attach_id."' "; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $sql="select *,get_payment_type(payment_mode,credit_debit) as Payment_type_str + from payment_history where payof_type=2 and payof_id=".$invoice_id; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $ins_comp_id=$data['invoice_master'][0]->insurance_id; + $ins_id=$data['invoice_master'][0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id=".$ins_id; + $query = $this->db->query($sql); + $hc_insurance_card= $query->result(); + + $sql="select * from hc_insurance where id=".$ins_comp_id; + $query = $this->db->query($sql); + $insurance= $query->result(); + + $sql="select *,i.short_name + from organization_case_master o join hc_insurance i on o.insurance_id=i.id + where o.id=".$data['invoice_master'][0]->insurance_case_id; + $query = $this->db->query($sql); + $data['case_master']= $query->result(); + + //load mPDF library + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetWatermarkText(H_Name); + //$this->m_pdf->pdf->showWatermarkText = true; + + $file_name='Charge_Invoice-'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $dataupdate = array( + 'is_print_out'=>1, + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$invoice_id); + + if($page_size==0) + { + $content=$this->load->view('Invoice/invoice_print',$data,TRUE); + }elseif($page_size==1){ + $content=$this->load->view('Invoice/invoice_print_a5',$data,TRUE); + }elseif($page_size==2){ + $content=$this->load->view('Invoice/invoice_print_a4_double',$data,TRUE); + } + + //echo $content; + + // $this->m_pdf->pdf->showImageErrors = false; + + // $this->m_pdf->pdf->curlAllowUnsafeSslRequests = true; + $this->m_pdf->pdf->useSubstitutions = false; + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output("TEST.pdf","I"); + + } + + + + public function charge_crIPD($inv_id,$ipd_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount + from payment_history where payof_type=2 and payof_id=".$inv_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * from ipd_master where id=".$ipd_id; + $query = $this->db->query($sql); + $ipd_master= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=2 and refund_type_id=".$inv_id; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($payment_history)>0 && count($refund_order)<1) + { + if($payment_history[0]->paid_amount>0 && $invoice_master[0]->invoice_status==1) + { + $RefundRequest = array( + 'refund_type' => 2, + 'refund_type_id' => $inv_id, + 'refund_type_code' => $invoice_master[0]->invoice_code, + 'refund_type_reason' => 'Cr. to IPD.', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $payment_history[0]->paid_amount, + 'patient_id' => $invoice_master[0]->attach_id, + 'patient_name' =>strtoupper($invoice_master[0]->inv_name) + ); + + $this->load->model('Payment_M'); + $this->Payment_M->insert_refundorder($RefundRequest); + } + } + + $dataupdate = array( + 'payment_mode' => 3, + 'payment_mode_desc' => 'IPD Credit', + 'payment_id' => 0, + 'insurance_case_id' => $ipd_master[0]->case_id, + 'ipd_id' => $ipd_id, + 'payment_status' => 1, + 'prepared_by'=>$user_name.'['.$user_id.']', + 'prepared_by_id'=>$user_id, + 'confirm_invoice'=>date('Y-m-d H:i:s'), + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$inv_id); + } + + + public function cancel_inv($inv_id) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=2 and payof_id=".$inv_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * from refund_order + where refund_process=0 and refund_type=2 and refund_type_id=".$inv_id; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($payment_history)>0 && count($refund_order)<1) + { + if($payment_history[0]->paid_amount>0 && $invoice_master[0]->invoice_status==1) + { + $RefundRequest = array( + 'refund_type' => 2, + 'refund_type_id' => $inv_id, + 'refund_type_code' => $invoice_master[0]->invoice_code, + 'refund_type_reason' => 'Cancel Invoice', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $payment_history[0]->paid_amount, + 'patient_id' => $invoice_master[0]->attach_id, + 'patient_name' =>strtoupper($invoice_master[0]->inv_name) + ); + + $this->load->model('Payment_M'); + $this->Payment_M->insert_refundorder($RefundRequest); + } + + $dataupdate = array( + 'payment_id' => 0, + 'invoice_status' => 2 + ); + + $this->load->model('Invoice_M'); + $this->Invoice_M->update($dataupdate,$inv_id); + }else{ + + } + + + } + + public function charge_refund($inv_id,$inv_refund_amount) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user->id.']:T-'.date('d-m-Y h:m:s'); + + $status_str=""; + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $sql="select sum(if(credit_debit>0,amount*-1,amount)) as paid_amount from payment_history where payof_type=2 and payof_id=".$inv_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from invoice_master where id=".$inv_id; + $query = $this->db->query($sql); + $invoice_master= $query->result(); + + $sql="select * from refund_order where refund_process=0 and refund_type=2 and refund_type_id=".$inv_id; + $query = $this->db->query($sql); + $refund_order= $query->result(); + + if(count($payment_history)>0 && count($refund_order)<1) + { + if($payment_history[0]->paid_amount>0 && $invoice_master[0]->invoice_status==1 && $inv_refund_amount<=$payment_history[0]->paid_amount) + { + if($inv_refund_amount<0) + { + $inv_refund_amount=$inv_refund_amount*-1; + } + + $RefundRequest = array( + 'refund_type' => 2, + 'refund_type_id' => $inv_id, + 'refund_type_code' => $invoice_master[0]->invoice_code, + 'refund_type_reason' => 'Return Extra Charge', + 'approved_by_id' => $user_id, + 'approved_by' => $user_name, + 'refund_amount' => $inv_refund_amount, + 'patient_id' => $invoice_master[0]->attach_id, + 'patient_name' =>strtoupper($invoice_master[0]->inv_name) + ); + + $this->load->model('Payment_M'); + $this->Payment_M->insert_refundorder($RefundRequest); + } + } + + } + + public function deleteinvoice() + { + $inv_id=$this->input->post('inv_id'); + $this->db->delete("invoice_master", "id=".$inv_id); + $this->db->delete("invoice_item", "inv_master_id=".$inv_id); + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Patient.php b/old_code_ci3/controllers/Patient.php new file mode 100644 index 0000000..09da2a8 --- /dev/null +++ b/old_code_ci3/controllers/Patient.php @@ -0,0 +1,850 @@ +load->model('Patient_M'); + } + + public function index() + { + $sql = "select * from hc_insurance"; + $query = $this->db->query($sql); + $data['data_insurance'] = $query->result(); + + $sql = "select * from blood_group order by id"; + $query = $this->db->query($sql); + $data['blood_group'] = $query->result(); + + $this->load->view('Patient_V', $data); + } + + public function search_adv() + { + $sdata = ""; + + $input_mphone1 = $this->input->post('input_mphone1'); + $input_Aadhar = $this->input->post('input_udai'); + $input_relative_name = $this->input->post('input_relative_name'); + $input_name = $this->input->post('input_name'); + + if (strlen($input_mphone1) > 0) { + $sdata = $sdata . " or mphone1 = '" . $input_mphone1 . "'"; + } + + if (strlen($input_Aadhar) > 0) { + $sdata = $sdata . " or udai = '" . $input_Aadhar . "'"; + } + + if (strlen($input_relative_name) > 0) { + $sdata = $sdata . " or (trim(p_rname) = '" . trim($input_relative_name) . "' and Trim(p_fname)='" . trim($input_name) . "') "; + } + + $sql = "SELECT id,Concat(p_fname,'/',if(gender=1,'M','F'),'/',p_relative,' ',p_rname) as Sresult + FROM patient_master WHERE 1<>1 " . $sdata . " order by id desc"; + $query = $this->db->query($sql); + $search_result = $query->result(); + + $data['search_result'] = $search_result; + + + $this->load->view('search_adv_data', $data); + } + + public function search() + { + $sdata = $this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9 _.@\-]/', '', trim($sdata)); + + if (strlen($sdata) == 0) { + $sql = "SELECT p.*,GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age , + Date_Format(p.last_visit,'%d-%m-%Y') AS Last_Visit + FROM patient_master p + group BY p.id + order BY p.last_visit DESC + LIMIT 100 "; + } else { + + $sdate_array = explode(" ", $sdata); + $search_string = " 1=1 "; + + foreach ($sdate_array as $row_data) { + if (is_numeric($row_data)) { + $search_string .= " and (p.p_code like '%$row_data' + or p.mphone1 = '$row_data' + or p.udai='$row_data' )"; + } elseif (ctype_alpha($row_data)) { + $search_string .= " and (p.p_fname like '%$row_data%' + or p.email1 = '$row_data' + or SUBSTRING_INDEX(p.p_fname,' ',1) sounds like '" . $row_data . "')"; + } else { + $search_string .= " and (p.p_code like '$row_data' + or p.email1 = '$row_data' )"; + } + } + + $sql = "SELECT p.*,GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age , + Date_Format(p.last_visit,'%d-%m-%Y') AS Last_Visit + FROM patient_master p + WHERE $search_string + group BY p.id + order BY p.last_visit DESC "; + } + + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $this->load->view('Patient_Search_V', $data); + } + + + public function search_opd() + { + $sql = "SELECT p.*,GET_AGE_1(dob,age,age_in_month,estimate_dob) AS age , + Date_Format(o.apointment_date,'%d-%m-%Y') AS opd_Visit,o.doc_name,o.doc_spec,o.opd_code,i.short_name + FROM (patient_master p join opd_master o on p.id =o.p_id) + Left join hc_insurance i on i.id = o.insurance_id + order BY o.opd_id DESC LIMIT 100 "; + + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $content = $this->load->view('Patient_Search_opd', $data, true); + + echo $content; + } + + function person_record($pno, $edit = 0) + { + $sql = "select *,GET_AGE_1(dob,age,age_in_month,estimate_dob) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate, + if(gender=1,'Male','Female') as xgender , + if(date_add(insert_date,interval 12 hour)>sysdate(),1,0) as p_edit + from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $required_age = $data['data'][0]->age; + $required_age_in_month = $data['data'][0]->age_in_month; + $required_dob = $data['data'][0]->dob; + $estimate_dob = $data['data'][0]->estimate_dob; + + if ($required_age == '' && $estimate_dob == 1) { + if ($required_age == '0') { + if ($required_age_in_month == 0 || $required_age_in_month == '') { + $edit = 1; + } + } + } + + if ($required_dob == '' && $estimate_dob == 0) { + $edit = 1; + } + + + $sql = "select *,p.p_fname,if(apointment_date=curdate(),1,0) as new_opd, + date_format(apointment_date,'%d-%m-%Y') as str_apointment_date + from opd_master o join patient_master p on o.p_id=p.id where p_id=$pno Order by opd_code desc"; + $query = $this->db->query($sql); + $data['opd_List'] = $query->result(); + + $sql = "select m.id,m.invoice_code,Date_Format(m.inv_date,'%d-%m-%y') as str_inv_date,m.inv_name, + if(count(t.id)>0,group_concat(t.item_name SEPARATOR ' / '),'No-Item') as Item_List, m.net_amount,m.invoice_status + from invoice_master m left join invoice_item t on m.id=t.inv_master_id + where attach_type=0 and attach_id=" . $pno . " group by m.id order by m.id desc"; + $query = $this->db->query($sql); + $data['invoice_list'] = $query->result(); + + $sql = "select i.*,m.ins_company_name,m.opd_allowed,m.charge_cash + from hc_insurance_card i join hc_insurance m on i.insurance_id=m.id + where i.p_id=" . $pno; + $query = $this->db->query($sql); + $data['data_insurance_card'] = $query->result(); + + $sql = "select *,Date_Format(date_registration,'%d-%m-%Y') as str_date_registration + from organization_case_master where status=0 and case_type=0 and p_id=" . $pno; + $query = $this->db->query($sql); + $data['case_master_opd'] = $query->result(); + + $sql = "SELECT o.*,DATE_FORMAT(o.date_registration,'%d-%m-%Y') as str_date_registration , + i.ipd_code,i.register_date + from organization_case_master o left JOIN ipd_master i ON o.ipd_id=i.id + WHERE o.status=0 AND o.case_type=1 and o.p_id=" . $pno; + $query = $this->db->query($sql); + $data['case_master_ipd'] = $query->result(); + + $sql = "select * from file_upload_data where id=" . $data['data'][0]->profile_file_id; + $query = $this->db->query($sql); + $file_data = $query->result(); + + $profile_file_path = "/assets/images/no_image.jpg"; + + $sql = "SELECT * from blood_group order by id"; + $query = $this->db->query($sql); + $data['blood_group'] = $query->result(); + + $sql = "select * from tag_master Order by tag_name"; + $query = $this->db->query($sql); + $data['tag_master'] = $query->result(); + + $sql = "SELECT a.*,t.tag_name,t.tag_type_id + FROM patient_tag_assign a JOIN tag_master t ON a.tag_id=t.id + WHERE isdelete=0 and a.p_id=$pno"; + $query = $this->db->query($sql); + $data['patient_tag_list'] = $query->result(); + + if (count($file_data) > 0) { + $pos = strpos($file_data[0]->full_path, '/uploads/', 1); + $profile_file_path = substr($file_data[0]->full_path, $pos); + } + + $data['profile_file_path'] = $profile_file_path; + + if ($edit == 0) { + $this->load->view('Person_profile_V', $data); + } else { + $this->load->view('Person_Edit_V', $data); + } + } + + public function update_1() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_name', + 'label' => 'Name', + 'rules' => 'required|min_length[2]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + + $data = array( + 'mphone1' => $this->input->post('input_mphone1'), + 'p_fname' => strtoupper($this->input->post('input_name')), + 'gender' => $this->input->post('optionsRadios_gender'), + 'dob' => str_to_MysqlDate($this->input->post('datepicker_dob')), + 'zip' => $this->input->post('input_zip'), + 'add1' => $this->input->post('input_address'), + 'city' => $this->input->post('input_city'), + 'district' => $this->input->post('input_district'), + 'state' => $this->input->post('input_state'), + 'age' => $this->input->post('input_age'), + 'title' => $this->input->post('cbo_title'), + 'p_relative' => strtoupper($this->input->post('cbo_relation')), + 'p_rname' => $this->input->post('input_relative_name'), + 'email1' => $this->input->post('input_email'), + 'age' => $this->input->post('input_age'), + 'age_in' => $this->input->post('cbo_age') + ); + + $pid = $this->input->post('p_id'); + $this->Patient_M->update($data, $pid); + $rvar = array( + 'update' => 1, + 'showcontent' => 'Data Saved successfully' + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'update' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + public function update() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $chk_age = $this->input->post('chk_age'); + + $FormRules = array( + array( + 'field' => 'input_name', + 'label' => 'Name of Patient', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + + ); + + $age_month = $this->input->post('input_age_month'); + $age_year = $this->input->post('input_age_year'); + + + if ($chk_age == 'on') { + $estimate_dob = 1; + + if ($age_year == '' && $age_month == '') { + array_push( + $FormRules, + array( + 'field' => 'input_age_year', + 'label' => 'Patient Age', + 'rules' => 'required|min_length[1]|max_length[4]' + ) + ); + } + } else { + $estimate_dob = 0; + array_push( + $FormRules, + array( + 'field' => 'datepicker_dob', + 'label' => 'Date of Birth', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + } + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + + $data = array( + 'mphone1' => $this->input->post('input_mphone1'), + 'p_fname' => strtoupper($this->input->post('input_name')), + 'gender' => $this->input->post('optionsRadios_gender'), + 'zip' => $this->input->post('input_zip'), + 'add1' => strtoupper($this->input->post('input_address')), + 'city' => strtoupper($this->input->post('input_city')), + 'district' => strtoupper($this->input->post('input_district')), + 'state' => strtoupper($this->input->post('input_state')), + 'title' => $this->input->post('cbo_title'), + 'p_relative' => strtoupper($this->input->post('cbo_relation')), + 'p_rname' => strtoupper($this->input->post('input_relative_name')), + 'email1' => strtoupper($this->input->post('input_email')), + 'udai' => strtoupper($this->input->post('input_Aadhar')), + 'estimate_dob' => $estimate_dob, + 'blood_group' => $this->input->post('input_blood_group') + ); + + if ($chk_age == 'on') { + $data['age'] = $age_year; + $data['age_in_month'] = $age_month; + } else { + $data['dob'] = str_to_MysqlDate($this->input->post('datepicker_dob')); + } + + $pid = $this->input->post('p_id'); + $this->Patient_M->update($data, $pid); + $rvar = array( + 'update' => 1, + 'showcontent' => 'Data Saved successfully' + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'update' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function update_aadhar() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $data = array( + 'udai' => $this->input->post('udai'), + ); + + $pid = $this->input->post('p_id'); + $this->Patient_M->update($data, $pid); + $rvar = array( + 'update' => 1, + 'showcontent' => 'Data Saved successfully' + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function create() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $chk_age = $this->input->post('chk_age'); + + $FormRules = array( + array( + 'field' => 'input_name', + 'label' => 'Name of Patient', + 'rules' => 'required|min_length[1]|max_length[100]' + ), + array( + 'field' => 'input_relative_name', + 'rules' => 'required|min_length[1]|max_length[100]' + ), + array( + 'field' => 'input_mphone1', + 'rules' => 'required|min_length[10]|max_length[10]' + ) + + ); + + $age_month = $this->input->post('input_age_month'); + $age_year = $this->input->post('input_age_year'); + + + if ($chk_age == 'on') { + $estimate_dob = 1; + + if ($age_year == '' && $age_month == '') { + array_push( + $FormRules, + array( + 'field' => 'input_age_year', + 'label' => 'Patient Age', + 'rules' => 'required|min_length[1]|max_length[4]' + ) + ); + } + } else { + $estimate_dob = 0; + array_push( + $FormRules, + array( + 'field' => 'datepicker_dob', + 'label' => 'Date of Birth', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + } + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + + $data = array( + 'mphone1' => $this->input->post('input_mphone1'), + 'p_fname' => strtoupper($this->input->post('input_name')), + 'gender' => $this->input->post('optionsRadios_gender'), + 'zip' => $this->input->post('input_zip'), + 'add1' => strtoupper($this->input->post('input_address')), + 'city' => strtoupper($this->input->post('input_city')), + 'district' => strtoupper($this->input->post('input_district')), + 'state' => strtoupper($this->input->post('input_state')), + 'title' => $this->input->post('cbo_title'), + 'p_relative' => $this->input->post('cbo_relation'), + 'p_rname' => strtoupper($this->input->post('input_relative_name')), + 'blood_group' => strtoupper($this->input->post('input_blood_group')), + 'udai' => strtoupper($this->input->post('input_udai')), + 'estimate_dob' => $estimate_dob + ); + + if ($chk_age == 'on') { + $data['age'] = $age_year; + $data['age_in_month'] = $age_month; + } else { + $data['dob'] = str_to_MysqlDate($this->input->post('datepicker_dob')); + } + + $inser_id = $this->Patient_M->insert($data); + $rvar = array( + 'insertid' => $inser_id + ); + + // Check Multiple UHID + $sdata = ''; + //$sdata=$sdata." or udai = '".$this->input->post('input_udai')."'"; + $sdata = $sdata . " or (trim(p_rname) = '" . trim(strtoupper($this->input->post('input_relative_name'))) . "' and Trim(p_fname)='" . trim(strtoupper($this->input->post('input_name'))) . "') "; + + $sql = "SELECT id,Concat(p_code,'/',p_fname,'/',if(gender=1,'M','F'),'/',p_relative,' ',p_rname) as Sresult + FROM patient_master WHERE 1<>1 " . $sdata . " and id<>$inser_id order by id desc"; + $query = $this->db->query($sql); + $search_result = $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_name = $user->first_name . '' . $user->last_name . '[Date:' . date('d-m-Y h:i:s') . ']-' . $user->id; + + $log_text = ''; + + foreach ($search_result as $row) { + $log_text .= $row->Sresult . PHP_EOL; + } + + if (count($search_result) > 0) { + $data = array( + 'new_uhid' => $inser_id, + 'name_of_person' => strtoupper($this->input->post('input_name')), + 'new_patient_code' => '', + 'date_of_registration' => date('Y-m-d h:i:s'), + 'update_by' => $user_name, + 'remark_duplicate' => $log_text, + ); + + $inser_id = $this->Patient_M->insert_log_patient_multiple($data); + } + + //End of Chking Multiple UHID + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'insertid' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function show_cards($pno, $card_no = 0) + { + + $sql = "select * from patient_master where id=" . $pno; + $query = $this->db->query($sql); + $data['pdata'] = $query->result(); + + $inc_card_no = $data['pdata'][0]->insurance_card_id; + + $sql = "select * from hc_insurance_card where id>1 and id=" . $inc_card_no; + $query = $this->db->query($sql); + $data['data_insurance_card'] = $query->result(); + + $sql = "select * from hc_insurance where id>1 and active=1 order by ins_company_name "; + $query = $this->db->query($sql); + $data['data_insurance'] = $query->result(); + + $this->load->view('insurance/insurance_card', $data); + } + + public function city() + { + $this->load->model('Patient_M'); + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + $this->Patient_M->get_city($q); + } + } + + public function P_info() + { + + $UHID = $this->input->post('input_uhid'); + + $sql = "select * from patient_master_exten where p_code='$UHID' "; + $query = $this->db->query($sql); + $data = $query->result(); + + if (count($data) > 0) { + $Patient_id = $data[0]->id; + $Patient_info = $data[0]->p_fname . ' ' . $data[0]->p_relative . ' ' . $data[0]->p_rname . ' /Age :' . $data[0]->str_age; + } else { + $Patient_id = 0; + $Patient_info = ''; + } + + $rvar = array( + 'Patient_id' => $Patient_id, + 'Patient_info' => $Patient_info + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function update_card() + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $FormRules = array( + array( + 'field' => 'input_insurance_id', + 'label' => 'Insurance No', + 'rules' => 'required|min_length[2]|max_length[30]' + ), + array( + 'field' => 'input_card_holder_name', + 'label' => 'Insurance Card Holder Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) { + + $data = array( + 'insurance_id' => $this->input->post('Insurance_id'), + 'p_id' => $this->input->post('p_id'), + 'insurance_no' => $this->input->post('input_insurance_id'), + 'card_holder_name' => strtoupper($this->input->post('input_card_holder_name')), + 'issue_date' => str_to_MysqlDate($this->input->post('datepicker_issue_date')), + 'expiry_date' => str_to_MysqlDate($this->input->post('datepicker_expiry_date')), + 'relation_patient_cardholder' => strtoupper($this->input->post('input_Relation')) + ); + + $card_no = $this->input->post('inscard_id'); + $inser_id = $card_no; + + if ($card_no == "0") { + $inser_id = $this->Patient_M->insert_card($data); + } else { + $this->Patient_M->update_card($data, $card_no); + } + + $data = array( + 'insurance_card_id' => $inser_id, + 'insurance_id' => $this->input->post('Insurance_id'), + 'insurance_no' => $this->input->post('input_insurance_id'), + 'card_holder_name' => strtoupper($this->input->post('input_card_holder_name')), + 'issue_date' => str_to_MysqlDate($this->input->post('datepicker_issue_date')), + 'expiry_date' => str_to_MysqlDate($this->input->post('datepicker_expiry_date')), + 'relation_patient_cardholder' => strtoupper($this->input->post('input_Relation')) + ); + + $this->Patient_M->update($data, $this->input->post('p_id')); + + $rvar = array( + 'insertid' => $inser_id + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } else { + $send_error = validation_errors(); + $rvar = array( + 'insertid' => 0, + 'error_text' => $send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function show_profile_opd($p_id) + { + $data['p_id'] = $p_id; + + $sql = "select * from patient_master_exten where id=" . $p_id; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + $sql = "select o.* from opd_master o where o.p_id=$p_id order by o.opd_id desc"; + $query = $this->db->query($sql); + $data['opd_master'] = $query->result(); + + $sql = "select o.* from opd_master o where o.p_id=$p_id and date(o.apointment_date)=curdate()"; + $query = $this->db->query($sql); + $data['opd_master_current'] = $query->result(); + + //$this->load->view('Person/person_file_show',$data); + + $this->load->view('Person/Person_Profile', $data); + } + + public function show_profile_image($p_id) + { + $data['p_id'] = $p_id; + + $sql = "select *,GET_AGE_1(dob,age,age_in_month,estimate_dob) as str_age, + Date_Format(insert_date,'%Y-%m-%d') as str_regdate, + if(gender=1,'Male','Female') as xgender , + if(date_add(insert_date,interval 12 hour)>sysdate(),1,0) as p_edit + from patient_master where id=" . $p_id; + $query = $this->db->query($sql); + $data['data'] = $query->result(); + + + $this->load->view('Person/person_profile_photo', $data); + } + + + public function save_profile_image($p_id) + { + $filename = 'P-' . $p_id . '-' . time() . '.jpg'; + + $folder_name = 'uploads/' . date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('webcam')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + } else { + $data = array('upload_data' => $this->upload->data()); + + $this->load->model('File_M'); + + $file_insert_id = $this->File_M->insert($data['upload_data']); + + $udata = array( + 'upload_by' => $user_name, + 'pid' => $p_id, + 'opd_id' => '0', + 'ipd_id' => '0', + 'case_id' => '0', + 'upload_by_id' => $user_id + ); + + if ($file_insert_id > 0) { + $this->File_M->update($udata, $file_insert_id); + + $user_name = $user->first_name . '' . $user->last_name . ':T-' . date('d-m-Y h:m:s'); + + $dataupdate = array( + 'profile_file_id' => $file_insert_id, + 'profile_picture_update_by' => $user_name + ); + + $this->Patient_M->update($dataupdate, $p_id); + } + + echo $filename; + } + } + + //Patient Tag + + function add_comments($p_id) + { + if (!$this->input->is_ajax_request()) { + exit('no valid req.'); + } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name . ' [Date:' . date('d-m-Y h:i') . ']'; + + $comments_data = array( + 'p_id' => $p_id, + 'remark' => $this->input->post('add_notes'), + 'insert_by_id' => $user_id, + 'insert_by' => $user_name + ); + + $insert_id = $this->Patient_M->insert_remark($comments_data); + + if ($insert_id > 0) { + $rvar = array( + 'update' => $insert_id, + 'error_text' => 'Update Done ' . $insert_id + ); + } else { + $rvar = array( + 'update' => 0, + 'error_text' => 'Some Error', + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + function patient_tag() + { + $this->load->model('Patienttag_M'); + + $tag_id = $this->input->post('tag_id'); + $p_id = $this->input->post('p_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name . '' . $user->last_name; + + if ($this->input->post('isadd') == 1) { + + $sql = "Select * + from patient_tag_assign + where isdelete=0 and p_id='$p_id' and tag_id='$tag_id'"; + $query = $this->db->query($sql); + $no_rec = $query->num_rows(); + + if ($no_rec == 0) { + $data = array( + 'p_id' => $p_id, + 'tag_id' => $tag_id, + 'assign_by_id' => $user_id, + 'assign_by' => $user_name . '[' . $user_id . ']' . date('d-m-Y H:i'), + ); + $inser_id = $this->Patienttag_M->insert_patient_tag_assign($data); + } + } else { + + $cust_tag_assign = $this->input->post('cust_tag_assign'); + + $data = array( + 'isdelete' => 1, + 'delete_by' => $this->session->userdata('username') . '[' . $this->session->userdata('agent_id') . ']' . date('d-m-Y H:i'), + ); + + $this->Patienttag_M->update_patient_tag_assign($data, $cust_tag_assign); + } + + echo '1'; + } + + + + //AutoList of Person Names + + public function get_name() + { + + if (isset($_GET['term'])) { + $q = strtolower($_GET['term']); + + $sql = "select * from name_list where name like '" . $q . "%' "; + + $sql = $sql . "order by name limit 20"; + + $query = $this->db->query($sql); + + if ($query->num_rows() > 0) { + foreach ($query->result_array() as $row) { + $new_row['label'] = htmlentities(stripslashes($row['name'])); + $new_row['value'] = htmlentities(stripslashes($row['name'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } +} diff --git a/old_code_ci3/controllers/Payment.php b/old_code_ci3/controllers/Payment.php new file mode 100644 index 0000000..8b6f46a --- /dev/null +++ b/old_code_ci3/controllers/Payment.php @@ -0,0 +1,313 @@ +load->model('Patient_M'); + + } + + function index() + { + $this->load->view('Invoice/payment_search'); + } + + function payment_record() + { + $sdata=$this->input->post('txtsearch'); + + $rec_no = preg_replace('/[^A-Za-z0-9 _.@\-]/', '', trim($sdata)); + + $sql="select * from payment_history where id='".$rec_no."'"; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from users where active=1"; + $query = $this->db->query($sql); + $data['all_user_list']= $query->result_array(); + + + $data['invoice_no']=''; + + if(count($data['payment_history'])>0) + { + $charge_type=$data['payment_history'][0]->payof_type; + $payof_id=$data['payment_history'][0]->payof_id; + + + if($charge_type==1) + { + $sql="select * from opd_master where opd_id=".$payof_id; + $query = $this->db->query($sql); + $data['opd_master']= $query->result(); + + $pid=$data['opd_master'][0]->p_id; + + $data['invoice_no']=$data['opd_master'][0]->opd_code; + + $data['inv_Type']='OPD'; + } + + if($charge_type==2) + { + $sql="select * from invoice_master where id=".$payof_id; + $query = $this->db->query($sql); + $data['invoice_master']= $query->result(); + + $pid=$data['invoice_master'][0]->attach_id; + + $data['invoice_no']=$data['invoice_master'][0]->invoice_code; + + $data['inv_Type']='OPD Charge'; + } + + if($charge_type==3) + { + $sql="select * from org_payment_request where id=".$payof_id; + $query = $this->db->query($sql); + $data['org_payment_request']= $query->result(); + + $pid=$data['org_payment_request'][0]->patient_id; + + $data['invoice_no']=$data['org_payment_request'][0]->org_code; + + $data['inv_Type']='ORG Charge'; + } + + if($charge_type==4) + { + $sql="select * from ipd_master where id=".$payof_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $pid=$data['ipd_master'][0]->p_id; + + $data['invoice_no']=$data['ipd_master'][0]->ipd_code; + + $data['inv_Type']='IPD Payment'; + } + + $sql="select * from patient_master_exten where id=".$pid; + $query = $this->db->query($sql); + $data['patient_master']= $query->result(); + + $data['rec_no']=$rec_no; + + $sql="select s.id,s.pay_type,m.bank_name + From hospital_bank m join hospital_bank_payment_source s on m.id=s.bank_id"; + $query = $this->db->query($sql); + $data['bank_data']= $query->result(); + + $this->load->view('Invoice/payment_edit',$data); + + }else{ + echo 'No Record Found'; + } + } + + public function change_to_bank() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + + $sql="select * from payment_history where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + $payof_id=$payment_history[0]->payof_id; + + $paydata = array( + 'payment_mode'=> '2', + 'pay_bank_id'=>$this->input->post('cbo_pay_type'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + 'update_remark'=>'Change To Bank' + ); + + $paydata_log = array( + 'pay_id'=> $pay_id, + 'update_type'=>'1', + 'update_by'=> $user_name, + ); + + $this->load->model('Payment_M'); + + $insert_id=$this->Payment_M->insert_payment_history_log($paydata_log); + $this->Payment_M->update($paydata,$pay_id); + + if($payment_history[0]->payof_type==1) + { + $dataupdate = array( + 'payment_mode'=> '2', + 'payment_mode_desc'=>'BANK', + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$payof_id); + + }elseif($payment_history[0]->payof_type==4) + { + $dataupdate = array( + 'payment_mode'=> '2', + 'payment_mode_desc'=>'BANK', + ); + $this->load->model('Ipd_M'); + //$this->Ipd_M->update_payment_ipd($dataupdate,$payof_id); + } + + } + } + + public function change_to_cash() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + + $sql="select * from payment_history where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + $payof_id=$payment_history[0]->payof_id; + + $paydata = array( + 'payment_mode'=> '1', + ); + + $paydata_log = array( + 'pay_id'=> $payof_id, + 'update_type'=>'1', + 'update_by'=> $user_name, + 'update_remark'=>'Change To CASH' + ); + + $this->load->model('Payment_M'); + $insert_id=$this->Payment_M->insert_payment_history_log($paydata_log); + $this->Payment_M->update($paydata,$pay_id); + + if($payment_history[0]->payof_type==1) + { + $dataupdate = array( + 'payment_mode'=> '1', + 'payment_mode_desc'=>'CASH', + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$payof_id); + + }elseif($payment_history[0]->payof_type==4) + { + $dataupdate = array( + 'payment_mode'=> '1', + 'payment_mode_desc'=>'CASH', + ); + + $this->load->model('Ipd_M'); + //$this->Ipd_M->update_payment_ipd($dataupdate,$payof_id); + } + + } + + + } + + public function change_user() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + $user_list=$this->input->post('user_list'); + + $sql="select * from payment_history where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from users where id=".$user_list; + $query = $this->db->query($sql); + $user_data= $query->result(); + + + if(count($payment_history)>0) + { + $payof_id=$payment_history[0]->payof_id; + + $paydata = array( + 'update_by'=> $user_data[0]->first_name.' '.$user_data[0]->last_name.'['.$payment_history[0]->insert_time.']['.$user_list.']', + 'update_by_id'=> $user_list, + ); + + $paydata_log = array( + 'pay_id'=> $payof_id, + 'update_type'=>'3', + 'update_by'=> $user_name, + 'update_remark'=>'Change Update User From :'.$payment_history[0]->update_by + ); + + $this->load->model('Payment_M'); + $insert_id=$this->Payment_M->insert_payment_history_log($paydata_log); + $this->Payment_M->update($paydata,$pay_id); + + + } + + } + + public function change_amount() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + $change_value=$this->input->post('change_value'); + + $sql="select * from payment_history where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + $payof_id=$payment_history[0]->payof_id; + + $paydata = array( + 'amount'=> $change_value, + ); + + $paydata_log = array( + 'pay_id'=> $payof_id, + 'update_type'=>'4', + 'update_by'=> $user_name, + 'update_remark'=>'Change Amount , OLD Amt.'.$payment_history[0]->amount + ); + + $this->load->model('Payment_M'); + $insert_id=$this->Payment_M->insert_payment_history_log($paydata_log); + $this->Payment_M->update($paydata,$pay_id); + + + } + + } +} + diff --git a/old_code_ci3/controllers/Payment_Medical.php b/old_code_ci3/controllers/Payment_Medical.php new file mode 100644 index 0000000..4926e5e --- /dev/null +++ b/old_code_ci3/controllers/Payment_Medical.php @@ -0,0 +1,291 @@ +load->view('Medical/payment_search'); + } + + function payment_record() + { + $sdata=$this->input->post('txtsearch'); + + $rec_no = preg_replace('/[^A-Za-z0-9 _.@\-]/', '', trim($sdata)); + + $sql="select *,if(credit_debit=0,amount,amount*-1) as Amount_str from payment_history_medical where id=".$rec_no; + $query = $this->db->query($sql); + $data['payment_history']= $query->result(); + + $sql="select * from users where active=1"; + $query = $this->db->query($sql); + $data['all_user_list']= $query->result_array(); + + $data['invoice_no']=''; + + if(count($data['payment_history'])>0) + { + $Customerof_type=$data['payment_history'][0]->Customerof_type; + $Customerof_id=$data['payment_history'][0]->Customerof_id; + $Medical_invoice_id=$data['payment_history'][0]->Medical_invoice_id; + $ipd_id=$data['payment_history'][0]->ipd_id; + + if($Customerof_type==1) //OPD Bill + { + $sql="select * from invoice_med_master where id=".$Medical_invoice_id; + $query = $this->db->query($sql); + $data['invoice_med_master']= $query->result(); + + $data['invoice_to_name']=$data['invoice_med_master'][0]->inv_name; + + $data['invoice_no']=$data['invoice_med_master'][0]->inv_med_code; + + $data['inv_Type']='OPD'; + } + + if($Customerof_type==2) // IPD Bill + { + $sql="select * from ipd_master where id=".$ipd_id; + $query = $this->db->query($sql); + $data['ipd_master']= $query->result(); + + $data['invoice_to_name']=$data['ipd_master'][0]->P_name; + + $data['invoice_no']=$data['ipd_master'][0]->ipd_code; + + $data['inv_Type']='IPD Medical Bill'; + } + + if($Customerof_type==3) //CASH BILL + { + $sql="select * from invoice_med_master where id=".$Medical_invoice_id; + $query = $this->db->query($sql); + $data['invoice_med_master']= $query->result(); + + $data['invoice_to_name']=$data['invoice_med_master'][0]->inv_name; + + $data['invoice_no']=$data['invoice_med_master'][0]->inv_med_code; + + $data['inv_Type']='CASH'; + } + + $data['rec_no']=$rec_no; + + $this->load->view('Medical/payment_edit',$data); + + }else{ + echo 'No Record Found'; + } + } + + public function change_to_bank() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + + $sql="select * from payment_history_medical where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + + + $paydata = array( + 'amount'=>$payment_history[0]->amount, + 'payment_mode'=> '2', + 'card_bank'=>$this->input->post('input_card_mac'), + 'cust_card'=>$this->input->post('input_card_bank'), + 'card_remark'=>$this->input->post('input_card_digit'), + 'card_tran_id'=>$this->input->post('input_card_tran'), + ); + + $paydata_log = array( + 'pay_id'=> $pay_id, + 'update_type'=>'2', + 'update_by'=> $user_name, + ); + + $this->load->model('Medical_M'); + + $insert_id=$this->Medical_M->insert_payment_history_log($paydata_log); + $this->Medical_M->update_payment($paydata,$pay_id); + + } + } + + public function change_to_cash() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + + $sql="select * from payment_history_medical where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + + + $paydata = array( + 'payment_mode'=> '1', + 'amount'=>$payment_history[0]->amount, + ); + + $paydata_log = array( + 'pay_id'=> $pay_id, + 'update_type'=>'1', + 'update_by'=> $user_name, + ); + + $this->load->model('Medical_M'); + + $insert_id=$this->Medical_M->insert_payment_history_log($paydata_log); + $this->Medical_M->update_payment($paydata,$pay_id); + + } + + } + + public function update_amount() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + $change_value=$this->input->post('change_value'); + + $sql="select * from payment_history_medical where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + if(count($payment_history)>0) + { + $paydata = array( + 'amount'=> $change_value, + ); + + $old_amt=$payment_history[0]->amount; + + $paydata_log = array( + 'pay_id'=> $pay_id, + 'update_type'=>'3', + 'update_by'=> $user_name, + 'update_log'=>'Old Amt. : '.$old_amt, + ); + + $this->load->model('Medical_M'); + + $insert_id=$this->Medical_M->insert_payment_history_log($paydata_log); + $this->Medical_M->update_payment($paydata,$pay_id); + + $customer_type=$payment_history[0]->Customerof_type; + $inv_id=$payment_history[0]->Medical_invoice_id; + $ipd_id=$payment_history[0]->Medical_invoice_id; + + if($customer_type==2){ + $this->Medical_M->update_invoice_group_gst($ipd_id,1); + }else{ + + $this->Medical_M->update_invoice_group($inv_id); + $this->Medical_M->update_invoice_final($inv_id); + } + + } + } + + public function change_user() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $pay_id=$this->input->post('pay_id'); + $user_list=$this->input->post('user_list'); + + $sql="select * from payment_history_medical where id=".$pay_id; + $query = $this->db->query($sql); + $payment_history= $query->result(); + + $sql="select * from users where id=".$user_list; + $query = $this->db->query($sql); + $user_data= $query->result(); + + + if(count($payment_history)>0) + { + $amount = $payment_history[0]->amount; + + $paydata = array( + 'update_by'=> $user_data[0]->first_name.' '.$user_data[0]->last_name.'['.$payment_history[0]->insert_time.']['.$user_list.']', + 'update_by_id'=> $user_list, + 'amount'=> $amount, + ); + + $paydata_log = array( + 'pay_id'=> $pay_id, + 'update_type'=>'3', + 'update_by'=> $user_name, + 'update_remark'=>'Change Update User From :'.$payment_history[0]->update_by + ); + + $this->load->model('Medical_M'); + $insert_id=$this->Medical_M->insert_payment_history_log($paydata_log); + $this->Medical_M->update_payment($paydata,$pay_id); + + + } + + } + + public function payment_log(){ + $this->load->view('Medical/payment_log'); + } + + public function payment_log_data(){ + + $opd_date_range=$this->input->post('opd_date_range'); + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + $sql="SELECT p.* , + (case p.Customerof_type when 1 then p.Medical_invoice_code when 2 then p.ipd_id when 3 then p.Medical_invoice_code ELSE 'Unknown' END) AS Inv_code, + (case p.Customerof_type when 1 then 'UHID' when 2 then 'IPD' when 3 then 'CASH' ELSE 'Unknown' END) AS Bill_type + ,l.update_by,l.insert_datetime AS log_insert,l.update_type,l.update_log, + (case update_type when 3 then 'Change Amount' when 2 then 'Cash to Bank' when 1 then 'Bank to Cash' ELSE 'Unknown' END ) AS LOG_type + FROM payment_history_medical p JOIN paymentmedical_history_log l ON p.id=l.pay_id + where date(l.insert_datetime) between '".$minRange."' and '".$maxRange."'"; + $query = $this->db->query($sql); + $data['paymentmedical_history_log']= $query->result(); + + //echo $sql; + $data['opd_date_range']=$opd_date_range; + + $this->load->view('Medical/payment_log_data',$data); + } + +} + diff --git a/old_code_ci3/controllers/PhoneHMS.php b/old_code_ci3/controllers/PhoneHMS.php new file mode 100644 index 0000000..1ecabfa --- /dev/null +++ b/old_code_ci3/controllers/PhoneHMS.php @@ -0,0 +1,265 @@ +load->database(); + $this->load->library(array('ion_auth','form_validation')); + $this->load->helper(array('url','language')); + + $this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')); + + $this->lang->load('auth'); + + $this->load->model('SMS_M'); + } + + public function Login() + { + $login_id=$this->input->post('login'); + $mobilecode=$this->input->post('mcode'); + + if ($this->ion_auth->login($login_id, $mobilecode, true)) + { + $rvar=array( + 'loginID' => 1, + 'msg' => 'Wrong User Id or Password' + ); + } + else + { + $rvar=array( + 'loginID' => 0, + 'msg' => 'Wrong User Id or Password' + ); + } + + $encode_data = json_encode($rvar); + echo header("Access-Control-Allow-Origin: *"); + echo $encode_data; + } + + public function PhoneGapProcess($reqcode=0) + { + if($reqcode==0) + { + if ($this->ion_auth->logged_in()) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $rvar=array( + 'loginName' => $user_name, + 'user_id' => $user_id + ); + }else{ + $rvar=array( + 'loginName' => '', + 'user_id' => 0 + ); + } + + $encode_data = json_encode($rvar); + echo header("Access-Control-Allow-Origin: *"); + echo $encode_data; + } + + // Search OPD in Database + + if($reqcode==1) + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + $sql = "select o.opd_id, o.doc_name,o.opd_code,o.P_name,o.p_id,Date_Format(o.apointment_date,'%d-%m-%Y') as App_Date, + p.p_code,p.mphone1,p.email1 ,if(o.insurance_id>1,'Org.','Direct') as Inv_Type, + m.mode_desc as PaymentMode,o.payment_mode + from (opd_master o join patient_master p on o.p_id=p.id ) join payment_mode m on o.payment_mode=m.id + WHERE (opd_code like '%".$sdata."' or p_code like '%".$sdata."' or P_name like '%".$sdata."%' or + mphone1 = '".$sdata."' or email1 = '".$sdata."') and o.apointment_date>Date_Add(curdate(),interval -7 day) order by o.opd_id desc limit 10"; + + + $query = $this->db->query($sql); + $opd_list= $query->result_array(); + + $columns = array( + 0 =>'opd_id', + 1 => 'doc_name', + 2 => 'opd_code', + 3 => 'P_name', + 4=> 'App_Date', + 5=> 'p_code', + 6=> 'mphone1', + 7=> 'Inv_Type' + ); + + $output = array( + "recordsTotal" => intval( count($opd_list) ), // total number of records + "recdata" =>$opd_list, + "url" => substr($_SERVER['PHP_SELF'],0,19) + ); + + $encode_data = json_encode($output); + echo header("Access-Control-Allow-Origin: *"); + echo $encode_data; + + } + + } + + public function SelectOPD($opdid) + { + $sql = "select o.opd_id, o.doc_name,o.opd_code,o.P_name,o.p_id,Date_Format(o.apointment_date,'%d-%m-%Y') as App_Date, + p.p_code,p.mphone1,p.email1 ,if(o.insurance_id>1,'Org.','Direct') as Inv_Type, + m.mode_desc as PaymentMode,o.payment_mode + from (opd_master o join patient_master p on o.p_id=p.id ) join payment_mode m on o.payment_mode=m.id + WHERE o.opd_id=".$opdid; + + $query = $this->db->query($sql); + $opd_data= $query->result_array(); + + $output = array( + "recordsTotal" => intval( count($opd_data) ), // total number of records + "recdata" =>$opd_data + ); + + $encode_data = json_encode($output); + echo header("Access-Control-Allow-Origin: *"); + echo $encode_data; + } + + public function save_image_opd($opdid) + { + $filename = 'OPD-'.$opdid.'-'.time() . '.jpg'; + + $folder_name='uploads/'.date('Ymd'); + + if (!file_exists($folder_name)) { + mkdir($folder_name, 0777, true); + } + + //echo $folder_name; + + $config['upload_path'] = $folder_name; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + //$new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $filename; + + $this->load->library('upload', $config); + + if (!$this->upload->do_upload('file')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + }else{ + $data = array('upload_data' => $this->upload->data()); + + $this->load->model('File_M'); + + $file_insert_id=$this->File_M->insert($data['upload_data']); + + $sql="select * from opd_master where opd_id=".$opdid; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $pid=0; + $ipd_id=0; + $org_id=0; + + if(count($opd_master)>0) + { + $pid=$opd_master[0]->p_id; + $ipd_id=$opd_master[0]->ipd_id; + $org_id=$opd_master[0]->insurance_case_id; + } + + $udata = array( + 'upload_by'=> 'PhoneGap', + 'pid'=>$pid, + 'opd_id'=>$opdid, + 'ipd_id'=>$ipd_id, + 'case_id'=>$org_id, + 'upload_by_id'=>'0' + ); + + if($file_insert_id>0) + { + $this->File_M->update($udata,$file_insert_id); + + //$user_name = $user->first_name.''. $user->last_name.':T-'.date('d-m-Y h:m:s'); + $user_name ='PhoneGap'; + + $opdstatus=2; + + if($opdstatus=='2') + { + $status_str='Visit Done'; + }elseif($opdstatus=='3') + { + $status_str='Visit Cancel'; + } + + $opd_status_remark=$status_str.' Update By:'.$user_name; + + $dataupdate = array( + 'opd_status' => $opdstatus, + 'opd_status_remark' => $opd_status_remark + ); + + $this->load->model('Opd_M'); + $this->Opd_M->update($dataupdate,$opdid); + } + + $rvar=array( + 'filename' => $filename, + 'upload' => 1 + ); + + $encode_data = json_encode($rvar); + echo header("Access-Control-Allow-Origin: *"); + echo $encode_data; + + } + } + + public function save_sms() + { + echo 'Hello'; + + $data = array( + 'sender' => $this->input->post('sender'), + 'inNumber' => $this->input->post('inNumber'), + 'content' => $this->input->post('content'), + 'keyword' => $this->input->post('keyword'), + 'comments' => trim(str_replace('JC','',$this->input->post('comments'))), + 'msgId' => $this->input->post('msgId'), + 'rcvd' => $this->input->post('rcvd'), + ); + + $insert_id=$this->SMS_M->insert_sms_inbox($data); + + + if(strlen($comments)>0) + { + $data_array=explode(" ",$comments); + + $cmd_ID=''; + + if(isset($data_array[0])) + { + $cmd_ID=$data_array[0]; + } + + } + + + } + + + +} +?> \ No newline at end of file diff --git a/old_code_ci3/controllers/PhoneSMS.php b/old_code_ci3/controllers/PhoneSMS.php new file mode 100644 index 0000000..5d1e072 --- /dev/null +++ b/old_code_ci3/controllers/PhoneSMS.php @@ -0,0 +1,28 @@ +load->model('SMS_M'); + } + + public function show_lab_report($file_id_encrpt) + { + $file_id=decode_dst($file_id_encrpt); + + $sql="select * from file_upload_data where id=".$file_id; + $query = $this->db->query($sql); + $data['lab_file_details']= $query->result(); + + $this->load->view('PhoneSMS/lab_report_show',$data); + } + + + + + +} +?> \ No newline at end of file diff --git a/old_code_ci3/controllers/Product_master.php b/old_code_ci3/controllers/Product_master.php new file mode 100644 index 0000000..4f0614a --- /dev/null +++ b/old_code_ci3/controllers/Product_master.php @@ -0,0 +1,632 @@ +load->view('Medical/Purchase/drug_master_list'); + } + + public function Product_search() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if(trim($sdata)=='') + { + $sql="select * from med_product_master order by id desc limit 100"; + }else{ + $sql="select * from med_product_master + where (item_name LIKE '%".$sdata."%' + OR genericname LIKE '%".$sdata."%' + OR id = '".$sdata."')"; + } + + $query = $this->db->query($sql); + $data['product_list']= $query->result(); + + $this->load->view('Medical/Purchase/product_search_result',$data); + } + + public function Product_edit($Product_id) + { + $sql="SELECT m.* ,group_concat(c.med_cat_id) as cat_list + from med_product_master m left join med_product_cat_assign c on m.id=c.med_product_id + where m.id=".$Product_id; + $query = $this->db->query($sql); + $data['product_data']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $sql="Select * from med_product_cat_master order by med_cat_desc"; + $query = $this->db->query($sql); + $data['med_product_cat_master']= $query->result(); + + + $this->load->view('Medical/Purchase/product_edit',$data); + } + + public function Product_delete($Product_id) + { + $sql="Select count(*) as no_rec from inv_med_item where item_code=".$Product_id; + $query = $this->db->query($sql); + $product_sale_data= $query->result(); + + $sql="Select count(*) as no_rec from purchase_invoice_item where item_code=".$Product_id; + $query = $this->db->query($sql); + $product_purchase_data= $query->result(); + + $is_delete_master=0; + + $data_show=""; + + if($product_sale_data[0]->no_rec>0 || $product_purchase_data[0]->no_rec>0) + { + if($product_sale_data[0]->no_rec>0){ + $data_show.="

This Product in Sale Invoice, So cann't Delete

"; + } + + if($product_purchase_data[0]->no_rec>0){ + $data_show.="

This Product in Purchase Invoice, So cann't Delete

"; + } + + }else{ + + $this->load->model('product_master_M'); + $is_delete_master=$this->product_master_M->delete_master($Product_id); + + if($is_delete_master==0) + { + $data_show.="

Some Error on Delete this product

"; + }else{ + $data_show.="

Deleted

"; + } + + } + + echo $data_show; + + + } + + public function NewProduct() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $sql="Select * from med_product_cat_master order by med_cat_desc"; + $query = $this->db->query($sql); + $data['med_product_cat_master']= $query->result(); + + + $this->load->view('Medical/Purchase/product_new',$data); + } + + public function get_drug_master(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from drug_temp + where itemname like '".$q."%'"; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['itemname'])).' | '.htmlentities(stripslashes($row['formulation_length'])).' | '.htmlentities(stripslashes($row['genericname'])); + $new_row['value']=htmlentities(stripslashes($row['itemname'])).' | '.htmlentities(stripslashes($row['formulation_length'])).' | '.htmlentities(stripslashes($row['genericname'])); + + $new_row['l_itemname']=htmlentities(stripslashes($row['itemname'])); + + $new_row['l_genericname']=htmlentities(stripslashes($row['genericname'])); + + $new_row['l_formulation']=htmlentities(stripslashes($row['formulation'])); + + $new_row['l_company_name']=htmlentities(stripslashes($row['company_name'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + }else{ + echo 'No Data'; + } + } + + public function get_formulation_desc(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from med_formulation where formulation like '".$q."%'"; + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['formulation_length'])); + $new_row['value']=htmlentities(stripslashes($row['formulation'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_genericname(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $where=""; + + if(strlen($q)>3) + { + $where=" or gen_desc like '%".$q."%'"; + } + + $sql="select * from med_genric_name + where gen_desc like '".$q."%'".$where; + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['gen_desc'])); + $new_row['value']=htmlentities(stripslashes($row['gen_desc'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_company_name(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from med_company where company_name like '".$q."%'"; + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['company_name'])); + $new_row['value']=htmlentities(stripslashes($row['company_name'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function product_master_update($product_id=0) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $is_unique = ''; + + if($product_id>0) + { + + $original_value = $this->db->query("SELECT item_name FROM med_product_master WHERE id = ".$product_id)->row()->item_name ; + + if(strtoupper($this->input->post('input_item_name')) != strtoupper($original_value)) { + $is_unique = '|is_unique[med_product_master.item_name]'; + } else { + $is_unique = ''; + } + } + + + + $FormRules = array( + array( + 'field' => 'input_item_name', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]'.$is_unique + ), + array( + 'field' => 'input_formulation', + 'label' => 'Formulation', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_packing_type', + 'label' => 'Packing', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_re_order_qty', + 'label' => 'Re-Order Qty', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_HSNCODE', + 'label' => 'HSNCODE', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_SGST', + 'label' => 'SGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $related_drug_id=$this->input->post('related_drug_id'); + + $ban_flag_id = ($this->input->post('chk_ban_flag_id')=='on'?1:0); + + $narcotic = ($this->input->post('chk_narcotic')=='on'?1:0); + $schedule_h = ($this->input->post('chk_schedule_h')=='on'?1:0); + $schedule_h1 = ($this->input->post('chk_schedule_h1')=='on'?1:0); + $schedule_x = ($this->input->post('chk_schedule_x')=='on'?1:0); + $schedule_g = ($this->input->post('chk_schedule_g')=='on'?1:0); + $high_risk = ($this->input->post('chk_high_risk')=='on'?1:0); + + + $batch_applicable = ($this->input->post('chk_batch_applicable')=='on'?1:0); + $is_continue = ($this->input->post('chk_is_continue')=='on'?1:0); + $exp_date_applicable = ($this->input->post('chk_exp_date_applicable')=='on'?1:0); + + $this->load->model('product_master_M'); + + $Pdata = array( + 'related_drug_id' => $related_drug_id, + 'item_name' => $this->input->post('input_item_name'), + 'formulation' => $this->input->post('input_formulation'), + 'genericname' => $this->input->post('input_genericname'), + 'packing' => $this->input->post('input_packing_type'), + 're_order_qty' => $this->input->post('input_re_order_qty'), + 'CGST_per' => $this->input->post('input_CGST'), + 'SGST_per' => $this->input->post('input_SGST'), + 'HSNCODE' => $this->input->post('input_HSNCODE'), + + 'ban_flag_id' => $ban_flag_id, + 'batch_applicable' => $batch_applicable, + 'is_continue' => $is_continue, + 'exp_date_applicable' => $exp_date_applicable, + + 'rack_no' => $this->input->post('input_rack_no'), + 'shelf_no' => $this->input->post('input_shelf_no'), + 'cold_storage' => $this->input->post('input_cold_storage'), + + 'company_id' => $this->input->post('input_company_name'), + + 'schedule_h' => $schedule_h, + 'schedule_h1' => $schedule_h1, + 'narcotic' => $narcotic, + 'schedule_x' => $schedule_x, + 'schedule_g' => $schedule_g, + 'high_risk' => $high_risk, + ); + + $show_text=''; + + $is_update_stock=0; + + if($product_id<1) + { + $Pdata['insert_by'] = $user_name_info; + $is_update_stock=$this->product_master_M->insert($Pdata); + $product_id_update=$is_update_stock; + }else{ + $Pdata['update_by'] = $user_name_info; + $is_update_stock=$this->product_master_M->update($Pdata,$product_id); + $product_id_update=$product_id; + } + + $cat_id_list=$this->input->post('med_cat_id'); + + if($cat_id_list<>''){ + $cat_id_list_string = implode(',', $cat_id_list); + }else{ + $cat_id_list_string ="0"; + } + + $cat_assingn=$this->product_master_M->insert_update_product_cat_assign($cat_id_list_string,$product_id_update); + + if($is_update_stock>0) + { + $send_msg="Updated"; + }else{ + $send_msg="Error : Update in Stock Table"; + } + + if($is_update_stock>0) + { + $show_text=Show_Alert('success','Updated',$send_msg); + }else{ + $show_text=Show_Alert('danger','Error',$send_msg); + } + + $rvar=array( + 'is_update_stock' =>$is_update_stock, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + $send_msg=validation_errors(); + $rvar=array( + 'is_update_stock' =>0, + 'show_text'=>Show_Alert('danger','Error',$send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function company_master_list() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $this->load->view('Medical/Purchase/company_list',$data); + } + + public function CompanyListSub() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $this->load->view('Medical/Purchase/company_list_sub',$data); + + } + + public function CompanyEdit($cid=0) + { + $sql="select * from med_company where id=".$cid; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + + + $this->load->view('Medical/Purchase/company_edit',$data); + } + + public function CompanyUpdate() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_company_name', + 'label' => 'Company Name', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $cid=$this->input->post('hid_cid'); + $company_name=$this->input->post('input_company_name'); + $contact_person_name=$this->input->post('input_contact_person_name'); + $contact_phone_no=$this->input->post('input_contact_phone_no'); + + $Udata = array( + 'company_name'=> $company_name, + 'contact_person_name'=> $contact_person_name, + 'contact_phone_no'=> $contact_phone_no, + ); + + $this->load->model('Medical_M'); + + if($cid>0) + { + $this->Medical_M->update_company($Udata,$cid); + $inser_id=$cid; + $send_msg="Saved Successfully"; + }else{ + $inser_id=$this->Medical_M->insert_company($Udata); + $send_msg="Added Successfully"; + } + + if($inser_id>0) + { + $show_text=$send_msg; + }else{ + $show_text=$send_msg; + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function medicine_category() + { + $sql="Select * from med_product_cat_master order by med_cat_desc"; + $query = $this->db->query($sql); + $data['med_product_cat_master']= $query->result(); + + $this->load->view('Medical/Purchase/med_product_cat_list',$data); + } + + public function medicine_category_edit($cid=0) + { + $sql="select * from med_product_cat_master where id=".$cid; + $query = $this->db->query($sql); + $data['med_product_cat_master']= $query->result(); + + $this->load->view('Medical/Purchase/medicine_category_edit',$data); + } + + public function medicine_category_Sub() + { + $sql="Select * from med_product_cat_master order by med_cat_desc"; + $query = $this->db->query($sql); + $data['med_product_cat_master']= $query->result(); + + $this->load->view('Medical/Purchase/medicine_category_Sub',$data); + + } + + public function medicine_category_Update() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_med_cat_desc', + 'label' => 'Medicince Category Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $cid=$this->input->post('hid_cid'); + $med_cat_desc=$this->input->post('input_med_cat_desc'); + + $Udata = array( + 'med_cat_desc'=> $med_cat_desc, + ); + + $this->load->model('Medical_M'); + + if($cid>0) + { + $this->Medical_M->update_med_product_cat_master($Udata,$cid); + $inser_id=$cid; + $send_msg="Saved Successfully"; + }else{ + $inser_id=$this->Medical_M->insert_med_product_cat_master($Udata); + $send_msg="Added Successfully"; + } + + if($inser_id>0) + { + $show_text=$send_msg; + }else{ + $show_text=$send_msg; + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + + + public function get_product_master(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from med_product_master + where item_name like '".$q."%'"; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['item_name'])).' | '.htmlentities(stripslashes($row['formulation'])).' | '.htmlentities(stripslashes($row['genericname'])); + $new_row['value']=htmlentities(stripslashes($row['item_name'])).' | '.htmlentities(stripslashes($row['formulation'])); + //$new_row['value']=htmlentities(stripslashes($row['itemname'])); + + $new_row['l_item_code']=htmlentities(stripslashes($row['id'])); + + $new_row['l_itemname']=htmlentities(stripslashes($row['item_name'])); + + $new_row['l_packing']=htmlentities(stripslashes($row['packing'])); + $new_row['l_CGST_per']=htmlentities(stripslashes($row['CGST_per'])); + $new_row['l_SGST_per']=htmlentities(stripslashes($row['SGST_per'])); + $new_row['l_HSNCODE']=htmlentities(stripslashes($row['HSNCODE'])); + + $new_row['l_genericname']=htmlentities(stripslashes($row['genericname'])); + + $new_row['l_formulation']=htmlentities(stripslashes($row['formulation'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + }else{ + echo 'No Data'; + } + } + + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Product_stock_master.php b/old_code_ci3/controllers/Product_stock_master.php new file mode 100644 index 0000000..74e41a3 --- /dev/null +++ b/old_code_ci3/controllers/Product_stock_master.php @@ -0,0 +1,483 @@ +load->view('Medical/Storestock/drug_master_list'); + } + + public function Product_search() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if(trim($sdata)=='') + { + $sql="select * from med_store_product_master order by id desc limit 100"; + }else{ + $sql="select * from med_store_product_master + where (item_name LIKE '%".$sdata."%' + OR genericname LIKE '%".$sdata."%' + OR id = '".$sdata."')"; + } + + $query = $this->db->query($sql); + $data['product_list']= $query->result(); + + $this->load->view('Medical/Storestock/product_search_result',$data); + } + + public function Product_edit($Product_id) + { + $sql="Select * from med_store_product_master where id=".$Product_id; + $query = $this->db->query($sql); + $data['product_data']= $query->result(); + + $this->load->view('Medical/Storestock/product_edit',$data); + } + + public function Product_delete($Product_id) + { + $sql="Select count(*) as no_rec from inv_stock_item where item_code=".$Product_id; + $query = $this->db->query($sql); + $product_sale_data= $query->result(); + + $sql="Select count(*) as no_rec from purchase_invoice_item_stock where item_code=".$Product_id; + $query = $this->db->query($sql); + $product_purchase_data= $query->result(); + + $is_delete_master=0; + + $data_show=""; + + if($product_sale_data[0]->no_rec>0 || $product_purchase_data[0]->no_rec>0) + { + if($product_sale_data[0]->no_rec>0){ + $data_show.="

This Product in Sale Invoice, So cann't Delete

"; + } + + if($product_purchase_data[0]->no_rec>0){ + $data_show.="

This Product in Purchase Invoice, So cann't Delete

"; + } + + }else{ + + $this->load->model('Product_stock_master_M'); + $is_delete_master=$this->Product_stock_master_M->delete_master($Product_id); + + if($is_delete_master==0) + { + $data_show.="

Some Error on Delete this product

"; + }else{ + $data_show.="

Deleted

"; + } + + } + + echo $data_show; + + + } + + public function NewProduct() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $this->load->view('Medical/Storestock/product_new',$data); + } + + public function get_drug_master(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from drug_temp + where itemname like '".$q."%'"; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['itemname'])).' | '.htmlentities(stripslashes($row['formulation_length'])).' | '.htmlentities(stripslashes($row['genericname'])); + $new_row['value']=htmlentities(stripslashes($row['itemname'])).' | '.htmlentities(stripslashes($row['formulation_length'])).' | '.htmlentities(stripslashes($row['genericname'])); + + $new_row['l_itemname']=htmlentities(stripslashes($row['itemname'])); + + $new_row['l_genericname']=htmlentities(stripslashes($row['genericname'])); + + $new_row['l_formulation']=htmlentities(stripslashes($row['formulation'])); + + $new_row['l_company_name']=htmlentities(stripslashes($row['company_name'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + }else{ + echo 'No Data'; + } + } + + public function get_formulation_desc(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from med_formulation where formulation like '".$q."%'"; + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['formulation_length'])); + $new_row['value']=htmlentities(stripslashes($row['formulation'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_genericname(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $where=""; + + if(strlen($q)>3) + { + $where=" or gen_desc like '%".$q."%'"; + } + + $sql="select * from med_genric_name + where gen_desc like '".$q."%'".$where; + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['gen_desc'])); + $new_row['value']=htmlentities(stripslashes($row['gen_desc'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function get_company_name(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from med_company where company_name like '".$q."%'"; + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['company_name'])); + $new_row['value']=htmlentities(stripslashes($row['company_name'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + + public function product_master_update($product_id=0) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $is_unique = ''; + + if($product_id>0) + { + + $original_value = $this->db->query("SELECT item_name FROM med_store_product_master WHERE id = ".$product_id)->row()->item_name ; + + if(strtoupper($this->input->post('input_item_name')) != strtoupper($original_value)) { + $is_unique = '|is_unique[med_product_master.item_name]'; + } else { + $is_unique = ''; + } + } + + + $FormRules = array( + array( + 'field' => 'input_item_name', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]'.$is_unique + ), + array( + 'field' => 'input_packing_type', + 'label' => 'Packing', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_re_order_qty', + 'label' => 'Re-Order Qty', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $related_drug_id=$this->input->post('related_drug_id'); + + $ban_flag_id = ($this->input->post('chk_ban_flag_id')=='on'?1:0); + + $narcotic = ($this->input->post('chk_narcotic')=='on'?1:0); + $schedule_h = ($this->input->post('chk_schedule_h')=='on'?1:0); + $schedule_h1 = ($this->input->post('chk_schedule_h1')=='on'?1:0); + $schedule_x = ($this->input->post('chk_schedule_x')=='on'?1:0); + $schedule_g = ($this->input->post('chk_schedule_g')=='on'?1:0); + $high_risk = ($this->input->post('chk_high_risk')=='on'?1:0); + + + $batch_applicable = ($this->input->post('chk_batch_applicable')=='on'?1:0); + $is_continue = ($this->input->post('chk_is_continue')=='on'?1:0); + $exp_date_applicable = ($this->input->post('chk_exp_date_applicable')=='on'?1:0); + + $this->load->model('Product_stock_master_M'); + + $Pdata = array( + 'related_drug_id' => $related_drug_id, + 'item_name' => $this->input->post('input_item_name'), + 'formulation' => $this->input->post('input_formulation'), + 'genericname' => $this->input->post('input_genericname'), + 'packing' => $this->input->post('input_packing_type'), + 're_order_qty' => $this->input->post('input_re_order_qty'), + 'CGST_per' => $this->input->post('input_CGST'), + 'SGST_per' => $this->input->post('input_SGST'), + 'HSNCODE' => $this->input->post('input_HSNCODE'), + + 'ban_flag_id' => $ban_flag_id, + 'batch_applicable' => $batch_applicable, + 'is_continue' => $is_continue, + 'exp_date_applicable' => $exp_date_applicable, + + 'rack_no' => $this->input->post('input_rack_no'), + 'shelf_no' => $this->input->post('input_shelf_no'), + 'cold_storage' => $this->input->post('input_cold_storage'), + + 'company_name' => $this->input->post('input_company_name'), + + 'schedule_h' => $schedule_h, + 'schedule_h1' => $schedule_h1, + 'narcotic' => $narcotic, + 'schedule_x' => $schedule_x, + 'schedule_g' => $schedule_g, + 'high_risk' => $high_risk, + ); + + $show_text=''; + + $is_update_stock=0; + + if($product_id<1) + { + $Pdata['insert_by'] = $user_name_info; + $is_update_stock=$this->Product_stock_master_M->insert($Pdata); + }else{ + $Pdata['update_by'] = $user_name_info; + $is_update_stock=$this->Product_stock_master_M->update($Pdata,$product_id); + } + + if($is_update_stock>0) + { + $send_msg="Updated"; + }else{ + $send_msg="Error : Update in Stock Table"; + } + + if($is_update_stock>0) + { + $show_text=Show_Alert('success','Updated',$send_msg); + }else{ + $show_text=Show_Alert('danger','Error',$send_msg); + } + + $rvar=array( + 'is_update_stock' =>$is_update_stock, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + $send_msg=validation_errors(); + $rvar=array( + 'is_update_stock' =>0, + 'show_text'=>Show_Alert('danger','Error',$send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function company_master_list() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $this->load->view('Medical/Purchase/company_list',$data); + } + + public function CompanyListSub() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $this->load->view('Medical/Purchase/company_list_sub',$data); + + } + + public function CompanyEdit($cid=0) + { + $sql="select * from med_company where id=".$cid; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + + + $this->load->view('Medical/Purchase/company_edit',$data); + } + + public function CompanyUpdate() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_company_name', + 'label' => 'Company Name', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $cid=$this->input->post('hid_cid'); + $company_name=$this->input->post('input_company_name'); + $contact_person_name=$this->input->post('input_contact_person_name'); + $contact_phone_no=$this->input->post('input_contact_phone_no'); + + $Udata = array( + 'company_name'=> $company_name, + 'contact_person_name'=> $contact_person_name, + 'contact_phone_no'=> $contact_phone_no, + ); + + $this->load->model('Medical_M'); + + if($cid>0) + { + $this->Medical_M->update_company($Udata,$cid); + $inser_id=$cid; + $send_msg="Saved Successfully"; + }else{ + $inser_id=$this->Medical_M->insert_company($Udata); + $send_msg="Added Successfully"; + } + + if($inser_id>0) + { + $show_text=$send_msg; + }else{ + $show_text=$send_msg; + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + + + public function get_product_master(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="select * from med_store_product_master + where item_name like '".$q."%'"; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['item_name'])).' | '.htmlentities(stripslashes($row['formulation'])).' | '.htmlentities(stripslashes($row['genericname'])); + $new_row['value']=htmlentities(stripslashes($row['item_name'])).' | '.htmlentities(stripslashes($row['formulation'])); + //$new_row['value']=htmlentities(stripslashes($row['itemname'])); + + $new_row['l_item_code']=htmlentities(stripslashes($row['id'])); + + $new_row['l_itemname']=htmlentities(stripslashes($row['item_name'])); + + $new_row['l_packing']=htmlentities(stripslashes($row['packing'])); + $new_row['l_CGST_per']=htmlentities(stripslashes($row['CGST_per'])); + $new_row['l_SGST_per']=htmlentities(stripslashes($row['SGST_per'])); + $new_row['l_HSNCODE']=htmlentities(stripslashes($row['HSNCODE'])); + + $new_row['l_genericname']=htmlentities(stripslashes($row['genericname'])); + + $new_row['l_formulation']=htmlentities(stripslashes($row['formulation'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + }else{ + echo 'No Data'; + } + } + + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Reffer.php b/old_code_ci3/controllers/Reffer.php new file mode 100644 index 0000000..1a36bb3 --- /dev/null +++ b/old_code_ci3/controllers/Reffer.php @@ -0,0 +1,164 @@ +load->model('Reffer_M'); + + } + + function index() + { + $sql="select *,date_format(date_of_add,'%d-%m-%Y') as str_dateadd from refer_master order by f_name"; + $query = $this->db->query($sql); + $data['refer_master']= $query->result(); + + $this->load->view('hospital_refer/reffer_index',$data); + } + + function reffer_add() + { + $sql="select * from refer_type "; + $query = $this->db->query($sql); + $data['refer_type']= $query->result(); + + $this->load->view('hospital_refer/reffer_add',$data); + } + + function reffer_edit($refer_id) + { + $sql="select * from refer_master where id=$refer_id"; + $query = $this->db->query($sql); + $data['data']= $query->result(); + + $sql="select * from refer_type "; + $query = $this->db->query($sql); + $data['refer_type']= $query->result(); + + + $this->load->view('hospital_refer/reffer_edit',$data); + } + + function save_new_user() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $cbo_title=$this->input->post('cbo_title'); + $input_name=$this->input->post('input_name'); + $cbo_refer_type=$this->input->post('cbo_refer_type'); + $input_phone_number=$this->input->post('input_phone_number'); + + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + + $FormRules = array( + array( + 'field' => 'input_name', + 'label' => 'Name of Patient', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + ); + + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + + $data = array( + 'title' => $cbo_title, + 'f_name' => strtoupper($input_name), + 'refer_type' => $cbo_refer_type, + 'date_of_add' => date('Y-m-d H:i:s'), + 'insert_by' => $user_name, + 'phone_number'=> $input_phone_number, + 'active' => 1, + ); + + + $inser_id=$this->Reffer_M->insert($data); + $rvar=array( + 'insertid' =>$inser_id + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + else + { + $send_error=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + + function save_user($reffer_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $cbo_title=$this->input->post('cbo_title'); + $input_name=$this->input->post('input_name'); + $cbo_refer_type=$this->input->post('cbo_refer_type'); + $input_phone_number=$this->input->post('input_phone_number'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + + $FormRules = array( + array( + 'field' => 'input_name', + 'label' => 'Name of Patient', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + ); + + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + + $data = array( + 'title' => $cbo_title, + 'f_name' => strtoupper($input_name), + 'refer_type' => $cbo_refer_type, + 'date_of_add' => date('Y-m-d H:i:s'), + 'insert_by' => $user_name, + 'phone_number'=> $input_phone_number, + 'active' => 1, + ); + + $this->Reffer_M->update($data,$reffer_id); + $rvar=array( + 'update' =>1 + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + else + { + $send_error=validation_errors(); + $rvar=array( + 'update' =>0, + 'error_text'=>$send_error + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Report.php b/old_code_ci3/controllers/Report.php new file mode 100644 index 0000000..a1d4fe9 --- /dev/null +++ b/old_code_ci3/controllers/Report.php @@ -0,0 +1,2395 @@ +load->library("Pdf"); + } + + public function opd() { + + $this->load->library('table'); + + $template = array( + 'table_open' => '', + 'thead_open' => '', + 'thead_close' => '', + + 'heading_row_start' => '', + 'heading_row_end' => '', + 'heading_cell_start' => '', + + 'tbody_open' => '', + 'tbody_close' => '', + + 'row_start' => '', + 'row_end' => '', + 'cell_start' => '', + + 'row_alt_start' => '', + 'row_alt_end' => '', + 'cell_alt_start' => '', + + 'table_close' => '
', + 'heading_cell_end' => '
', + 'cell_end' => '
', + 'cell_alt_end' => '
' + ); + + $this->table->set_template($template); + + $query = $this->db->query("select o.opd_code,o.P_name,o.apointment_date,o.doc_name + from opd_master o"); + + $table_show = $this->table->generate($query); + + $content=$table_show; + $this->load->library('m_pdf'); + + $file_name="Report-OPD-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function index() + { + $this->load->view('Report/ReportMain'); + } + public function report_opd_app() + { + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_opd_p',$data); + } + + + public function report_charge_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_other_charge',$data); + } + + public function report_ipdpayment_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/ipd_payment_report',$data); + } + + public function report_totalpayment_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_total_payment',$data); + } + + public function report_emp_total_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_collocation_emp',$data); + } + + public function report_opd_app_show($opd_date_range, + $doc_name_id,$emp_name_id,$paymode_id,$order_1,$order_2,$group_by,$output=0) + { + $sql_f_all = "select o.opd_code, + o.P_name ,p_code ,Date_Format(o.apointment_date,'%d-%m-%Y') as 'App_Date', + o.doc_name ,if(o.insurance_id>1,'Org.','Direct') as 'Type', + m.mode_desc as 'PayMode',o.opd_fee_gross_amount as 'GrossAmt', + o.opd_discount as Discount, o.opd_fee_amount as 'FeeAmt', + o.prepared_by,IFNULL(GET_AGE_BY_DOB(dob),age) as Age "; + + $sql_from=" from opd_master o join payment_mode m join patient_master p on o.payment_mode=m.id and p.id=o.p_id"; + + $sql_where=" Where (payment_mode>0 or running_opd=1) "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $data_show=""; + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + $sql_where.=" and Date(o.apointment_date) between '".$minRange."' and '".$maxRange. "'"; + + if($doc_name_id>0) + { + $sql_where.=" and o.doc_id='".$doc_name_id."'"; + } + + if($emp_name_id>0) + { + $sql_where.=" and o.prepared_by_id = '".$emp_name_id."'"; + } + + if($paymode_id>0) + { + $sql_where.=" and o.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by o.apointment_date"; + + if($order_1==0) + { + $sql_order.=' ,o.opd_id'; + } + + if($order_1==1) + { + $sql_order.=' ,o.doc_name'; + } + + if($order_1==2) + { + $sql_order.=' ,o.prepared_by'; + } + + if($order_1==3) + { + $sql_order.=' ,m.mode_desc'; + } + + if($order_2==0) + { + $sql_order.=' ,o.opd_id'; + } + + if($order_2==1) + { + $sql_order.=' ,o.doc_name'; + } + + if($order_2==2) + { + $sql_order.=' ,o.prepared_by'; + } + + + $table_start=''; + $table_end='
'; + + if($group_by==0) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name / Age'; + $table_head.='Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Fee Amt.'; + + $GroupSQL="select Date(o.apointment_date) as sdate,Date_Format(Date(o.apointment_date),'%d-%m-%Y') as strDate + from opd_master o ".$sql_where." + group by Date(o.apointment_date)"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='OPD Date : '.$row->strDate.'
'; + + $gwhere=" and Date(o.apointment_date)='".$row->sdate."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->PayMode.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $index++; + } + } + + if($group_by==1) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Date'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Fee Amt.'; + + + $GroupSQL="select o.doc_id,doc_name + from opd_master o ".$sql_where." group by o.doc_id"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + foreach($data['group_rec'] as $row) + { + + if($index>0) + { + $data_show.=""; + } + + $data_show.='Doctor Name : Dr.'.$row->doc_name.'
'; + + $gwhere=" and doc_id='".$row->doc_id."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->App_Date.''; + $table_body.=''.$rowdata->PayMode.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $index++; + + } + } + + if($group_by==2) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='App. Date'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Fee Amt.'; + + $GroupSQL="select o.prepared_by + from opd_master o ".$sql_where." group by o.prepared_by"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + foreach($data['group_rec'] as $row) + { + + if($index>0) + { + $data_show.=""; + } + + $data_show.='Prepared By : '.$row->prepared_by.'
'; + + $gwhere=" and o.prepared_by='".$row->prepared_by."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->App_Date.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->PayMode.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $index++; + + } + } + + + if($group_by==3) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Date'; + $table_head.='Doctor Name'; + $table_head.='Employee'; + $table_head.='Fee Amt.'; + + $GroupSQL="select o.payment_mode,m.mode_desc as 'PayMode' + from opd_master o join payment_mode m on o.payment_mode=m.id + ".$sql_where." group by o.payment_mode"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + foreach($data['group_rec'] as $row) + { + + if($index>0) + { + $data_show.=""; + } + + $data_show.='Payment Mode : '.$row->PayMode.'
'; + + $gwhere=" and o.payment_mode='".$row->payment_mode."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->App_Date.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $index++; + + } + } + + $content=$data_show; + $file_name="Report-OPD".date('Ymdhis').".pdf"; + + + if($output==0) + { + + $this->load->library('m_pdf'); + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,$file_name); + } + + + + } + + + public function report_charge_app_show($opd_date_range, + $doc_name_id,$emp_name_id,$paymode_id,$order_1,$order_2,$group_by,$output=0) + { + $sql_f_all = "select i.id,i.invoice_code,p.p_fname,p.p_code,i.refer_by_other, + i.inv_date,Date_Format(i.inv_date,'%d-%m-%Y') as str_inv_date,i.invoice_status, + if(i.insurance_id>1,'Org.','Direct') as PType,i.prepared_by, + if(i.correction_amount>0,i.correction_net_amount,i.net_amount) as Amount,m.mode_desc , + group_concat(t.item_name) as test_list"; + + $sql_from=" from invoice_master i join patient_master p join payment_mode m join invoice_item t + on i.attach_id=p.id and i.attach_type=0 and i.payment_mode=m.id and i.id=t.inv_master_id"; + + $sql_where=" Where i.invoice_status>0 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + + + $sql_where.=" and Date(i.inv_date) between Date('".$minRange."') and Date('".$maxRange. "') "; + + if($doc_name_id>0) + { + $sql_where.=" and i.refer_by_id='".$doc_name_id."'"; + } + + if($emp_name_id>0) + { + $sql_where.=" and i.prepared_by like '%[".$emp_name_id."]' "; + } + + if($paymode_id>0) + { + $sql_where.=" and i.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by i.inv_date"; + + if($order_1==1) + { + $sql_order.=' ,i.refer_by_other'; + } + + if($order_1==2) + { + $sql_order.=' ,i.prepared_by'; + } + + if($order_1==3) + { + $sql_order.=' ,m.mode_desc'; + } + + if($order_2==1) + { + $sql_order.=' ,i.refer_by_other'; + } + + if($order_2==2) + { + $sql_order.=' ,i.prepared_by'; + } + + + $table_start=''; + $table_end='
'; + + if($group_by==0) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Inv. Amt.'; + + $GroupSQL="select Date(i.inv_date) as sdate,Date_Format(Date(i.inv_date),'%d-%m-%Y') as strDate + from invoice_master i where i.invoice_status>0 and Date(i.inv_date) between'".$minRange."' and '".$maxRange. "' + group by Date(i.inv_date)"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Invoice Date : '.$row->strDate.'
'; + + $gwhere=" and Date(i.inv_date)='".$row->sdate."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->refer_by_other.''; + $table_body.=''.$rowdata->mode_desc.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + + } + } + + if($group_by==1) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Amount'; + + $GroupSQL="select i.refer_by_id,refer_by_other + from invoice_master i where i.invoice_status>0 and Date(i.inv_date) between'".$minRange."' and '".$maxRange. "' group by i.refer_by_id"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Doctor Name : Dr.'.$row->refer_by_other.'
'; + + $gwhere=" and i.refer_by_id='".$row->refer_by_id."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->inv_date.''; + $table_body.=''.$rowdata->mode_desc.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + } + } + + if($group_by==2) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Invoice Date'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Amount'; + + $GroupSQL="select i.prepared_by + from opd_master i where i.invoice_status>0 and Date(i.apointment_date) between'".$minRange."' and '".$maxRange. "' group by i.prepared_by"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Prepared By : '.$row->prepared_by.'
'; + + $gwhere=" and i.prepared_by='".$row->prepared_by."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->inv_date.''; + $table_body.=''.$rowdata->refer_by_other.''; + $table_body.=''.$rowdata->mode_desc.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + } + } + + + if($group_by==3) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Inv.Date'; + $table_head.='Ref. Doc. Name'; + $table_head.='Employee'; + $table_head.='Amount'; + + $GroupSQL="select i.payment_mode,m.mode_desc as 'PayMode' + from invoice_master i join payment_mode m on i.payment_mode=m.id + where i.invoice_status>0 and Date(i.inv_date) between'".$minRange."' and '".$maxRange. "' group by i.payment_mode"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Payment Mode : '.$row->PayMode.'
'; + + $gwhere=" and i.payment_mode='".$row->payment_mode."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->inv_date.''; + $table_body.=''.$rowdata->refer_by_other.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + + + } + } + + $content=$data_show; + $file_name="Report-OPD-".date('Ymdhis').".pdf"; + + + if($output==0) + { + $this->load->library('m_pdf'); + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + + }else{ + + ExportExcel($content,$file_name); + } + + + } + + + public function report_ipdpayment_app_show($opd_date_range, + $doc_name_id,$emp_name_id,$paymode_id,$order_1,$order_2,$group_by,$output=0) + { + $sql_f_all = "select i.id,i.ipd_code,i.ipd_status,m.p_fname,m.p_code,contact_person_Name, + i.register_date,p.payment_date,p.id as pay_id, + Date_format(p.payment_date,'%d-%m-%Y') as strPayDate, + if(i.ipd_status=0,'Admit','Discharged') as IPD_Status, + if(p.credit_debit=0,p.amount,0) as C_Amount, + if(p.credit_debit=1,p.amount,0) as D_Amount, + if(p.payment_mode=1,'CASH','BANK') AS payment_mode_desc, + doc.doc_name,doc_list,p.update_by AS prepared_by,p.remark, + if(i.case_id=0,'','INSURED') as insurance_type"; + + $sql_from=" FROM ((payment_history p join ipd_master i on i.id=p.payof_id AND p.payof_type=4) + join patient_master m ON i.p_id=m.id) + JOIN (select l.ipd_id,group_concat(d.p_fname) as doc_name,group_concat(d.id) as doc_list from ipd_master_doc_list l + join doctor_master d on l.doc_id=d.id group by l.ipd_id ) as doc + on i.id=doc.ipd_id"; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + $sql_where.=" and Date(p.payment_date) between '".$minRange."' and '".$maxRange. "'"; + + if($doc_name_id>0) + { + $sql_where.=" and FIND_IN_SET('".$doc_name_id."',doc_list) "; + } + + if($emp_name_id>0) + { + $sql_where.=" and p.update_by_id in (".$emp_name_id.") "; + } + + if($paymode_id>0) + { + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by p.payment_date"; + + if($order_1==1) + { + $sql_order.=' ,doc.doc_name'; + } + + if($order_1==2) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==3) + { + $sql_order.=' ,p.payment_mode'; + } + + if($order_2==1) + { + $sql_order.=' ,doc.doc_name'; + } + + if($order_2==2) + { + $sql_order.=' ,p.update_by'; + } + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='Pay ID '; + $table_head.='IPD No '; + $table_head.='Patient Name'; + $table_head.='Pay Date'; + $table_head.='Pay Mode'; + $table_head.='TPA/Direct'; + $table_head.='Amount (Cr.)'; + $table_head.='Amount (Dr.)'; + $table_head.='Remark'; + $table_head.='Dr.Name'; + $table_head.='Employee'; + + $data_show=""; + + if($group_by==-1) + { + $data_show.='Payment Date between: '.$minRange.' and '.$maxRange. '
'; + + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->pay_id.''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->insurance_type.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $TOTAL_AMT=$table_total_1-$table_Dr_total_1; + $table_footer=''; + $table_footer.='Net Amt. (Cr-Dr) : '.$TOTAL_AMT.''; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + + } + + + + if($group_by==0) + { + + + $GroupSQL="select Date(p.payment_date) as sdate,Date_Format(Date(p.payment_date),'%d-%m-%Y') as strDate + From ((payment_history p join ipd_master i on i.id=p.payof_id AND p.payof_type=4) + join patient_master m ON i.p_id=m.id) + where Date(p.payment_date) between'".$minRange."' and '".$maxRange. "' + group by Date(p.payment_date) "; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Payment Date : '.$row->strDate.'
'; + + $gwhere=" and Date(p.payment_date)='".$row->sdate."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->pay_id.''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->insurance_type.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + + } + } + + if($group_by==1) + { + + + $GroupSQL="select doc.doc_name + from ((payment_history p join ipd_master i on i.id=p.payof_id AND p.payof_type=4) + join patient_master m ON i.p_id=m.id) + JOIN + (select l.ipd_id,group_concat(d.p_fname) as doc_name,group_concat(d.id) as doc_list from ipd_master_doc_list l + join doctor_master d on l.doc_id=d.id group by l.ipd_id ) as doc + on i.id=doc.ipd_id + where Date(p.payment_date) between'".$minRange."' and '".$maxRange. "' group by doc.doc_name"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + $index = 0; + $data_show=""; + + if($index>0) + { + $data_show.=""; + } + + $data_show.='Doctor Name : Dr.'.$row->doc_name.'
'; + + $gwhere=" and doc.doc_name='".$row->doc_name."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->pay_id.''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->insurance_type.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + + } + } + + if($group_by==2) + { + + $GroupSQL="select p.update_by as prepared_by + from ((payment_history p join ipd_master i on i.id=p.payof_id AND p.payof_type=4) + join patient_master m ON i.p_id=m.id) + Where Date(p.payment_date) between'".$minRange."' and '".$maxRange. "' group by p.prepared_by"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Prepared By : '.$row->prepared_by.'
'; + + $gwhere=" and p.update_by='".$row->prepared_by."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->pay_id.''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->insurance_type.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + } + } + + + if($group_by==3) + { + + $GroupSQL="select p.payment_mode,p.payment_mode_desc + from ((payment_history p join ipd_master i on i.id=p.payof_id AND p.payof_type=4) + join patient_master m ON i.p_id=m.id) + Where Date(p.payment_date) between'".$minRange."' and '".$maxRange. "' group by p.payment_mode "; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + $index = 0; + $data_show=""; + + + foreach($data['group_rec'] as $row) + { + if($index>0) + { + $data_show.=""; + } + + $data_show.='Payment Mode : '.$row->payment_mode_desc.'
'; + + $gwhere=" and p.payment_mode='".$row->payment_mode."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->pay_id.''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->insurance_type.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + } + } + + $content=$data_show; + + + if($output==0) + { + + $this->load->library('m_pdf'); + + // $content; + $file_name="Report-opd-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_List_payment'); + } + + } + + public function report_total_payment_app_show($opd_date_range,$emp_name_id,$paymode_id,$order_1,$output=0) + { + $sql_f_all = "select p.id,p.payment_date,date_format(p.payment_date,'%d-%m-%Y %H:%m') as str_payment_date, + case p.payof_type when 1 then 'OPD' + when 2 then 'Charges' when 3 then 'ORG' when 4 then 'IPD' else 'Other' end as PayType, + payof_id,p.payof_code, + if(credit_debit=0,amount,0) as Cr_Amount, + if(credit_debit=1,amount,0) as Dr_Amount, + p.remark,p.update_by,get_patientinfo(p.payof_type,payof_id) as P_Name, + case p.payment_mode when 1 then 'Cash' when 2 then 'Bank' end as Pay_Mode"; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id<1) + { + $sql_where.=" and p.payment_mode in (1,2) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by p.id"; + + if($order_1==1) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==2) + { + $sql_order.=' ,p.payment_mode'; + } + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='PayID '; + $table_head.='Date'; + $table_head.='Type of Payment'; + $table_head.='OPD/IPD/In. Code '; + $table_head.='Pay Mode'; + $table_head.='Amt (Cr.)'; + $table_head.='Amt (Dr.)'; + $table_head.='Remark'; + $table_head.='Employee'; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + //echo $sql_f_all.$sql_from.$sql_where.' '.$sql_order; + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + // $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->id.''; + $table_body.=''.$rowdata->str_payment_date.''; + $table_body.=''.$rowdata->PayType.''; + $table_body.=''.$rowdata->payof_code.'
'.$rowdata->P_Name.''; + $table_body.=''.$rowdata->Pay_Mode.''; + $table_body.=''.$rowdata->Cr_Amount.''; + $table_body.=''.$rowdata->Dr_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->Cr_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->Dr_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $Total_Amount=$table_total_1-$table_Dr_total_1; + + $data_show.='

Total Amount : '.$Total_Amount.'

'; + + if($output==0) + { + $content= $data_show; + + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($data_show,'Payment'); + } + } + + public function report_charge_type($opd_date_range,$output=0) + { + $sql_f_all = "select p.id,p.payment_date,date_format(p.payment_date,'%d-%m-%Y %H:%m') as str_payment_date, + case p.payof_type when 1 then 'OPD' + when 2 then 'Charges' when 4 then 'IPD' else 'Other' end as PayType, + payof_id,p.payof_code, + if(credit_debit=0,amount,0) as Cr_Amount, + if(credit_debit=1,amount,0) as Dr_Amount, + p.remark,p.update_by,get_patientinfo(p.payof_type,payof_id) as P_Name, + case p.payment_mode when 1 then 'Cash' when 2 then 'Bank' end as Pay_Mode"; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id<1) + { + $sql_where.=" and p.payment_mode in (1,2) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by p.id"; + + if($order_1==1) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==2) + { + $sql_order.=' ,p.payment_mode'; + } + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='PayID '; + $table_head.='Date'; + $table_head.='Type of Payment'; + $table_head.='OPD/IPD/In. Code '; + $table_head.='Pay Mode'; + $table_head.='Amt (Cr.)'; + $table_head.='Amt (Dr.)'; + $table_head.='Remark'; + $table_head.='Employee'; + + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + //echo $sql_f_all.$sql_from.$sql_where.' '.$sql_order; + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->id.''; + $table_body.=''.$rowdata->str_payment_date.''; + $table_body.=''.$rowdata->PayType.''; + $table_body.=''.$rowdata->payof_code.'
'.$rowdata->P_Name.''; + $table_body.=''.$rowdata->Pay_Mode.''; + $table_body.=''.$rowdata->Cr_Amount.''; + $table_body.=''.$rowdata->Dr_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->Cr_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->Dr_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $Total_Amount=$table_total_1-$table_Dr_total_1; + + $data_show.='

Total Amount : '.$Total_Amount.'

'; + + $content=$data_show; + $this->load->library('m_pdf'); + + + + if($output==0) + { + $file_name="Report-opd-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_List_payment'); + } + } + + + public function report_emp_total($opd_date_range,$emp_name_id,$paymode_id,$order_1,$output=0) + { + $sql_f_all = "select p.update_by, + sum(if(p.payof_type=1,if(p.credit_debit=0,p.amount,0),0)) as OPD_Amount, + sum(if(p.payof_type=2,if(p.credit_debit=0,p.amount,0),0)) as Charge_Amount, + sum(if(p.payof_type=4,if(p.credit_debit=0,p.amount,0),0)) as IPD_Amount, + sum(if(p.payof_type=3,if(p.credit_debit=0,p.amount,0),0)) as ORG_Amount, + sum(if(p.credit_debit=1,p.amount,0)) as Return_Amount, + sum(if(p.credit_debit=0,p.amount,p.amount*-1)) as total_Amount "; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" group by p.update_by_id "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id<1) + { + $sql_where.=" and p.payment_mode in (1,2) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by p.update_by"; + + if($order_1==1) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==2) + { + $sql_order.=' ,p.payment_mode'; + } + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='User ID'; + $table_head.='OPD Amount'; + $table_head.='Charge Amount'; + $table_head.='IPD Amount'; + $table_head.='ORG Amount'; + $table_head.='Return Amount'; + $table_head.='Total'; + $table_head.=''; + + $table_footer=''; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_opd=0.00; + $table_total_ipd=0.00; + $table_total_org=0.00; + $table_total_charge=0.00; + $table_total_return=0.00; + $table_total_all=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''.$rowdata->OPD_Amount.''; + $table_body.=''.$rowdata->Charge_Amount.''; + $table_body.=''.$rowdata->IPD_Amount.''; + $table_body.=''.$rowdata->ORG_Amount.''; + + $table_body.=''.$rowdata->Return_Amount.''; + $table_body.=''.$rowdata->total_Amount.''; + $table_body.=''; + + + $table_total_opd=$table_total_opd+$rowdata->OPD_Amount; + $table_total_ipd=$table_total_ipd+$rowdata->IPD_Amount; + $table_total_org=$table_total_org+$rowdata->ORG_Amount; + $table_total_charge=$table_total_charge+$rowdata->Charge_Amount; + $table_total_return=$table_total_return+$rowdata->Return_Amount; + $table_total_all=$table_total_all+$rowdata->total_Amount; + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_opd.''; + $table_footer.=''.$table_total_charge.''; + $table_footer.=''.$table_total_ipd.''; + $table_footer.=''.$table_total_org.''; + $table_footer.=''.$table_total_return.''; + $table_footer.=''.$table_total_all.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + if($output==0) + { + $content=$data_show; + $this->load->library('m_pdf'); + + $file_name="Report-opd-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + + ExportExcel($data_show,'Payment_Complie'); + } + } + + public function report_emp_total_daywise($opd_date_range,$emp_name_id,$paymode_id,$order_1,$output=0) + { + $sql_f_all = "select p.update_by_id,date_format(p.payment_date,'%d-%m-%Y') as g_payment_date,p.update_by, + sum(if(p.payof_type=1,if(p.credit_debit=0,p.amount,0),0)) as OPD_Amount, + sum(if(p.payof_type=2,if(p.credit_debit=0,p.amount,0),0)) as Charge_Amount, + sum(if(p.payof_type=4,if(p.credit_debit=0,p.amount,0),0)) as IPD_Amount, + sum(if(p.payof_type=3,if(p.credit_debit=0,p.amount,0),0)) as ORG_Amount, + sum(if(p.credit_debit=1,p.amount,0)) as Return_Amount, + sum(if(p.credit_debit=0,p.amount,p.amount*-1)) as total_Amount "; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" group by date(p.payment_date), p.update_by_id "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id<1) + { + $sql_where.=" and p.payment_mode in (1,2) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by date(p.payment_date)"; + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='User ID'; + $table_head.='OPD Amount'; + $table_head.='Charge Amount'; + $table_head.='IPD Amount'; + $table_head.='ORG Amount'; + $table_head.='Return Amount'; + $table_head.='Total'; + $table_head.=''; + + $table_footer=''; + + $sql=$sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.' WITH rollup'; + + $query = $this->db->query($sql); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $data_show=''; + + foreach($data['gsub_rec'] as $rowdata) + { + if($rowdata->g_payment_date=='' && $rowdata->update_by_id==''){ + + $table_footer=''; + $table_footer.='Grand Total'; + $table_footer.=''.$rowdata->OPD_Amount.''; + $table_footer.=''.$rowdata->Charge_Amount.''; + $table_footer.=''.$rowdata->IPD_Amount.''; + $table_footer.=''.$rowdata->ORG_Amount.''; + + $table_footer.=''.$rowdata->Return_Amount.''; + $table_footer.=''.$rowdata->total_Amount.''; + $table_footer.=''; + + $data_show.='

Date(YYYY-MM-DD h:m) '.$rowdata->g_payment_date.'

'; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + }else if($rowdata->update_by_id=='') + { + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$rowdata->OPD_Amount.''; + $table_footer.=''.$rowdata->Charge_Amount.''; + $table_footer.=''.$rowdata->IPD_Amount.''; + $table_footer.=''.$rowdata->ORG_Amount.''; + + $table_footer.=''.$rowdata->Return_Amount.''; + $table_footer.=''.$rowdata->total_Amount.''; + $table_footer.=''; + + $data_show.='

Date(YYYY-MM-DD h:m) '.$rowdata->g_payment_date.'

'; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + $data_show.=''; + $table_body=''; + $table_footer=''; + + }else{ + $table_body.=''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''.$rowdata->OPD_Amount.''; + $table_body.=''.$rowdata->Charge_Amount.''; + $table_body.=''.$rowdata->IPD_Amount.''; + $table_body.=''.$rowdata->ORG_Amount.''; + + $table_body.=''.$rowdata->Return_Amount.''; + $table_body.=''.$rowdata->total_Amount.''; + $table_body.=''; + + } + } + + $content=$data_show; + if($output==0) + { + + $this->load->library('m_pdf'); + + $file_name="Report-opd-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + //echo $content; + }else{ + + ExportExcel($content,'Payment_Complie'); + } + } + + + public function report_opd_page() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/OPD_Report_Doctor',$data); + } + + public function report_opd($opd_date_range,$doc_name_id,$output=0) + { + $sql_where=" 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + $sql_where.=" and o.apointment_date between '".$minRange."' and '".$maxRange. "'"; + + if($doc_name_id>0) + { + $sql_where.=" and o.doc_id='".$doc_name_id."'"; + } + + + $sql="select o.doc_id,o.doc_name,o.apointment_date,count(o.opd_id) as no_opd, + sum(o.opd_fee_amount) as OPD_Amount, + + sum(if(o.payment_mode in (1,2),'1',0)) as Cash_no, + sum(if(o.payment_mode in (1,2),o.opd_fee_amount,0)) as Cash_Amount, + + sum(if(o.payment_mode=4,'1',0)) as Org_Credit_no, + sum(if(o.payment_mode=4,o.opd_fee_amount,0)) as Org_Credit_Amount + + from opd_master o + where ".$sql_where." and o.payment_status=1 AND o.opd_status IN (1,2) + group by o.doc_id,o.apointment_date with ROLLUP"; + + $query = $this->db->query($sql); + $opdlist= $query->result(); + + $srno=1; + + $tableHead=' + + + + + + + + + + + + + + '; + + $line=''; + $tablefooter='
Doctor NameDateTotalTotal.Amt.No.Cash OPDCash Amt.Org.OPD CreditOrg.Cr.Amt.Net OPDNet Amount
'; + $FooterHead=''; + foreach($opdlist as $row) + { + + if($row->doc_id=='') + { + + }elseif($row->apointment_date=='') + { + $line.=''; + $line.='Total of Dr.'.$row->doc_name.''.PHP_EOL; + $line.=''.$row->no_opd.''.PHP_EOL; + $line.=''.$row->OPD_Amount.''.PHP_EOL; + $line.=''.$row->Cash_no.''.PHP_EOL; + $line.=''.$row->Cash_Amount.''.PHP_EOL; + $line.=''.$row->Org_Credit_no.''.PHP_EOL; + $line.=''.$row->Org_Credit_Amount.''.PHP_EOL; + $line.=''.$row->no_opd.''.PHP_EOL; + $line.=''.$row->OPD_Amount.''.PHP_EOL; + + $line.=""; + + $FooterHead.='

Doctor :Dr. '.$row->doc_name.' / Total Net OPD : '.$row->no_opd.' / Total Amount : Rs.'.number_format($row->OPD_Amount,2).'

'; + + + }else + { + $line.=''; + $line.=''.$row->doc_name.''.PHP_EOL; + $line.=''.$row->apointment_date.''.PHP_EOL; + $line.=''.$row->no_opd.''.PHP_EOL; + $line.=''.$row->OPD_Amount.''.PHP_EOL; + $line.=''.$row->Cash_no.''.PHP_EOL; + $line.=''.$row->Cash_Amount.''.PHP_EOL; + $line.=''.$row->Org_Credit_no.''.PHP_EOL; + $line.=''.$row->Org_Credit_Amount.''.PHP_EOL; + $line.=''.$row->no_opd.''.PHP_EOL; + $line.=''.$row->OPD_Amount.''.PHP_EOL; + + $line.=""; + } + } + + $print_data= $tableHead.$line.$tablefooter.'
'.$FooterHead; + $content=$print_data; + + if($output==0) + { + + $this->load->library('m_pdf'); + + $file_name="Report-opd-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + + ExportExcel($content,'OPDList'); + } + + } + + function report_opd_total() + { + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/opd_report_total',$data); + } + + + function opd_total_data($opd_date_range,$doc_name_id,$emp_name_id,$paymode_id,$output=0) + { + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $sql_where =" 1=1 " ; + + $sql_where.=" and o.apointment_date between '".$minRange."' and '".$maxRange. "'"; + + if($doc_name_id>0) + { + $sql_where.=" and o.doc_id='".$doc_name_id."'"; + } + + if($emp_name_id>0) + { + $sql_where.=" and o.prepared_by like '%[".$emp_name_id."]'"; + } + + if($paymode_id>0) + { + $sql_where.=" and o.payment_mode = '".$paymode_id."'"; + } + + $sql="SELECT o.doc_name, + o.opd_fee_desc,o.opd_fee_amount, + sum(if(o.opd_status IN (1,2),1,0)) AS No_opd, + sum(if(o.opd_status IN (1,2),o.opd_fee_amount,0)) AS T_Amt + FROM opd_master o + where ".$sql_where." + AND o.opd_status IN (1,2) and + o.payment_status=1 AND (payment_mode>0 or running_opd=1) + GROUP BY o.opd_fee_id,o.opd_fee_type,o.opd_fee_amount"; + + //echo $sql; + + $query = $this->db->query($sql); + $OPD_list= $query->result(); + + $sql="SELECT o.doc_name, + o.opd_fee_desc,o.opd_fee_amount, + sum(if(o.opd_status IN (3),1,0)) AS No_opd, + sum(if(o.opd_status IN (3),o.opd_fee_amount,0)) AS T_Amt + FROM opd_master o + where ".$sql_where." + AND o.opd_status IN (3) and + o.payment_status=1 AND (payment_mode>0 or running_opd=1) + GROUP BY o.opd_fee_id,o.opd_fee_type,o.opd_fee_amount"; + + //echo $sql; + + $query = $this->db->query($sql); + $OPD_list_cancel= $query->result(); + + $content=''; + + $content.=' + + + + + + + '; + $sr_no=0; + $total_Payment=0; + $total_opd=0; + + foreach($OPD_list as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + '; + $total_Payment+= $row->T_Amt; + $total_opd+= $row->No_opd; + } + + $content.=' + + + + + + + '; + + $content.="
#Dr NameOPD TypeOPD FeeNo. of OPDTot.
'.$sr_no.'Dr. '.$row->doc_name.''.$row->opd_fee_desc.''.$row->opd_fee_amount.''.$row->No_opd.''.$row->T_Amt.'
#Total'.$total_opd.''.$total_Payment.'
"; + + //Cancel OPD + + $content_cancel=' +

Cancel OPD

+ '; + + $content_cancel.=' + + + + + + + '; + $sr_no=0; + $total_Payment=0; + $total_opd=0; + + foreach($OPD_list_cancel as $row) + { + $sr_no=$sr_no+1; + $content_cancel.=' + + + + + + + '; + $total_Payment+= $row->T_Amt; + $total_opd+= $row->No_opd; + } + + $content_cancel.=' + + + + + + + '; + + $content_cancel.="
#Dr NameOPD TypeOPD FeeNo. of OPDTot.
'.$sr_no.'Dr. '.$row->doc_name.''.$row->opd_fee_desc.''.$row->opd_fee_amount.''.$row->No_opd.''.$row->T_Amt.'
#Total'.$total_opd.''.$total_Payment.'
"; + + if(count($OPD_list_cancel)>0){ + $content.=$content_cancel; + } + + if($output==0) + { + $this->load->library('m_pdf'); + + $file_name='Report-OPD-'.date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'OPD_List'.date('Yms')); + } + + } + + public function report_totalpayment_bank_app() + { + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="SELECT b.id,b.bank_name,a.pay_type,a.id AS ac_id + FROM hospital_bank b JOIN hospital_bank_payment_source a ON b.id=a.bank_id"; + $query = $this->db->query($sql); + $data['hospital_bank_payment_source']= $query->result(); + + $this->load->view('Report/rep_total_bank_payment',$data); + } + + + public function report_total_payment_bank_show($opd_date_range,$emp_name_id,$bank_id,$output=0) + { + $sql_f_all = "Select p.id,p.payment_date,date_format(p.payment_date,'%d-%m-%Y %H:%m') as str_payment_date, + case p.payof_type when 1 then 'OPD' + when 2 then 'Charges' when 3 then 'ORG' when 4 then 'IPD' else 'Other' end as PayType, + payof_id,p.payof_code, + if(credit_debit=0,amount,0) as Cr_Amount, + if(credit_debit=1,amount,0) as Dr_Amount, + p.remark,p.update_by,get_patientinfo(p.payof_type,payof_id) as P_Name, + case p.payment_mode when 1 then 'Cash' when 2 then 'Bank' end as Pay_Mode, + CONCAT(h.bank_name,':',b.pay_type) AS bank_pay_source"; + + $sql_from=" FROM (payment_history p LEFT JOIN hospital_bank_payment_source b ON p.pay_bank_id=b.id) + JOIN hospital_bank h ON b.bank_id=h.id "; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if (!$this->ion_auth->in_group('ReportOLDREC')) { + $date1=date_create($minRange); + $date2=date_create(date('Y-m-d')); + + $diff=date_diff($date1,$date2); + + //echo $diff->format('%a'); + + $int_diff=$diff->format('%a'); + + if($int_diff>2) + { + date_sub($date2,date_interval_create_from_date_string("1 days")); + // date_format($date2,"Y-m-d"); + $minRange=date_format($date2,"Y-m-d");; + } + } + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($bank_id<1) + { + $sql_where.=" and p.payment_mode =2 "; + }else{ + $sql_where.=" and p.payment_mode =2 and p.pay_bank_id = '".$paymode_id."'"; + } + + $sql_order=" Order by p.id"; + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='PayID '; + $table_head.='Date'; + $table_head.='Bank'; + $table_head.='OPD/IPD/In. Code '; + $table_head.='Bank Source'; + $table_head.='Amt (Cr.)'; + $table_head.='Amt (Dr.)'; + $table_head.='Remark'; + $table_head.='Employee'; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $sql= $sql_f_all.$sql_from.$sql_where.' '.$sql_order; + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + // $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->id.''; + $table_body.=''.$rowdata->str_payment_date.''; + $table_body.=''.$rowdata->PayType.''; + $table_body.=''.$rowdata->payof_code.'
'.$rowdata->P_Name.''; + $table_body.=''.$rowdata->bank_pay_source.''; + $table_body.=''.$rowdata->Cr_Amount.''; + $table_body.=''.$rowdata->Dr_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->Cr_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->Dr_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $Total_Amount=$table_total_1-$table_Dr_total_1; + + $data_show.='

Total Amount : '.$Total_Amount.'

'; + + + + if($output==0) + { + $content= $data_show; + + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + $this->m_pdf->pdf->WriteHTML($content); + + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($data_show.$sql,'Payment'); + } + } + + + +} + + + +/* End of file c_test.php */ +/* Location: ./application/controllers/c_test.php */ \ No newline at end of file diff --git a/old_code_ci3/controllers/Report2.php b/old_code_ci3/controllers/Report2.php new file mode 100644 index 0000000..429fec5 --- /dev/null +++ b/old_code_ci3/controllers/Report2.php @@ -0,0 +1,1151 @@ +db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from hc_item_type where is_ipd_opd in (0,1)"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report/rep_diagnosis',$data); + } + + function report_Diagnosis_CASH() + { + $sql="select * from doctor_master where active=1"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from hc_item_type where is_ipd_opd in (0,1)"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report/rep_diagnosis_cash',$data); + } + + + function report_Diagnosis_EMP() + { + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from hc_item_type where is_ipd_opd in (0,1)"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report/rep_diagnosis_empwise',$data); + } + + function report_Diagnosis_EMP_2() + { + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from hc_item_type where is_ipd_opd in (0,1)"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report/rep_diagnosis_empwise_2',$data); + } + + function ipd_invoice_print($ipdno,$print=0) { + + $sql="select * from ipd_master where id=".$ipdno; + $query = $this->db->query($sql); + $ipdmaster= $query->result(); + + $pno=$ipdmaster[0]->p_id; + $discount=$ipdmaster[0]->Discount; + + $sql="select *,if(gender=1,'Male','Female') as xgender, + IFNULL(GET_AGE_BY_DOB(dob),age) AS age from patient_master where id='".$pno."' "; + + $query = $this->db->query($sql); + $person_info= $query->result(); + + $total_med=0.00; + $total_charges=0.00; + + if($ipdmaster[0]->case_id>0) + { + $sql="select * from organization_case_master where id='".$ipdmaster[0]->case_id."'"; + $query = $this->db->query($sql); + $orgcase= $query->result(); + + $ins_comp_id=$orgcase[0]->insurance_id; + $inc_card_id=$orgcase[0]->insurance_card_id; + + $sql="select * from hc_insurance_card where id='".$inc_card_id."'"; + $query = $this->db->query($sql); + $hc_insurance_card= $query->result(); + + $sql="select * from hc_insurance where id='".$ins_comp_id."'"; + $query = $this->db->query($sql); + $insurance= $query->result(); + } + + $sql="select * from v_ipd_bill_invoice v + where v.ipd_id=".$ipdno." "; + + $query = $this->db->query($sql); + $showinvoice= $query->result(); + + $sql="select sum(net_amount) as tnet_amount from invoice_med_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $inv_med_total= $query->result(); + + $total_med=$inv_med_total[0]->tnet_amount; + + $sql="select sum(net_amount) as tnet_amount from invoice_master where payment_status=1 and ipd_id = ".$ipdno; + $query = $this->db->query($sql); + $inv_charge_total= $query->result(); + + $total_charges=$inv_charge_total[0]->tnet_amount; + + $sql="select *,case payment_mode when 1 then 'Cash' when 2 then 'Bank Card' when 3 then 'Return Cash ' when 4 then 'Bank Return' else 'Other' end as pay_mode from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $ipd_payment= $query->result(); + + $sql="select sum(if(credit_debit=0,amount,amount*-1)) as t_ipd_pay from ipd_payment where ipd_id='".$ipdno."' "; + $query = $this->db->query($sql); + $ipd_payment_total= $query->result(); + + $total_payment=$ipd_payment_total[0]->t_ipd_pay; + + $net_amount=($total_charges+$total_med)-$discount; + + $balance=$total_payment-$net_amount; + + $inv_total=array( + 'total_med' => $total_med, + 'total_charges' => $total_charges, + 'total_payment' => $total_payment, + 'ipd_id' => $ipdno, + 'discount' => $discount, + 'balance' => $balance, + 'net_amount' => $net_amount + ); + + // make string html string + + $htmlcontent=' + + + + + + + '; + + $srno=1; + $headdesc=''; + foreach($showinvoice as $row) + { + if($headdesc!=$row->Charge_type) + { + $htmlcontent.= ''; + $htmlcontent.= ''; + $htmlcontent.= ''; + $htmlcontent.= ''; + $headdesc=$row->Charge_type; + } + $htmlcontent.= ''; + $htmlcontent.= ''; + $htmlcontent.= ''; + $htmlcontent.= ''; + $htmlcontent.= ''; + $htmlcontent.= ''; + $srno=$srno+1; + $htmlcontent.= ''; + } + + + // Total Show + $htmlcontent.=' + + + + + + '; + + if($ipdmaster[0]->Discount>0) { + $htmlcontent.=' + + + + + + '; + } + + $htmlcontent.=' + + + + + + '; + + $htmlcontent.=' + + + + + + '; + + + $htmlcontent.=' + + + + + + '; + + $htmlcontent.='
#DescriptionUnitRateAmount
'.$row->Charge_type.'
'.$srno.''.$row->idesc.''.$row->no_qty.''.$row->item_rate.''.$row->amount.'
#Gross Total'.$inv_total['total_charges'].'
#Discount Remark :
'.$ipdmaster[0]->Discount_Remark.'
Discount '.$ipdmaster[0]->Discount.'
#Net Amount'.$inv_total['net_amount'].'
# + Payment Recd.
'; + + $i=1; + foreach($ipd_payment as $row) + { + $i=$i+1; + $htmlcontent.= '['.$row->id.':'.$row->pay_mode.':'.$row->amount.'] /'; + if($i & 1) + { + $htmlcontent.= '
'; + } + } + + $htmlcontent.='
'.$ipd_payment_total[0]->t_ipd_pay.'
#Balance'.$inv_total['balance'].'
'; + + $content=$htmlcontent; + $this->load->library('m_pdf'); + + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + + } + + public function report_Diagnosis_total($opd_date_range,$doc_id,$Diagnosis_id) + { + $sql_f_all = "select m.refer_by_other,y.group_desc,t.item_name,count(t.id) as No_test, + sum(t.item_qty) as No_qty, + sum(Round(if(m.invoice_status=1,(t.item_amount-(t.item_amount*m.discount_amount/m.total_amount)),0),2)) as Total_Amount, + sum(if(m.invoice_status=1,t.item_amount,0)) as Total_Act_Amount "; + + $sql_from=" from invoice_master m join invoice_item t join hc_item_type y + on m.id=t.inv_master_id and t.item_type=y.itype_id and y.is_ipd_opd in (0,1) + and m.invoice_status=1"; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" group by m.refer_by_id,m.refer_by_other,t.item_id "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(m.inv_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and m.inv_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($doc_id>0) + { + $doc_id=str_replace('S',',',$doc_id); + + $sql_where.=" and m.refer_by_id in (".$doc_id.")"; + } + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + $sql_where.=" and t.item_type in (".$Diagnosis_id.")"; + } + + $sql_order=" Order by m.refer_by_other,y.group_desc,t.item_name"; + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.=''; + $table_head.=''; + $table_head.='Test Name'; + $table_head.='No. of Test'; + $table_head.='Amount'; + $table_head.='Cost Amt'; + $table_head.=''; + + $table_footer=''; + + + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order); + $rowdata= $query->result(); + + //echo $sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order; + + $table_body=''; + $table_Doctor_Total=0.00; + $table_qty_total=0.00; + $table_Diagnosis_Head_Total=0.00; + $table_Grand_Total=0.00; + + $table_Doctor_act_Total=0.00; + $table_Diagnosis_act_Head_Total=0.00; + $table_Grand_act_Total=0.00; + $table_grand_qty_total=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + $doc_name_head=''; + $Diagnosis_head=''; + + + for( $i = 0; $irefer_by_other<>$doc_name_head) + { + $table_body.=''; + $table_body.='Refer By : '.$rowdata[$i]->refer_by_other.''; + $table_body.=''; + } + + $doc_name_head=$rowdata[$i]->refer_by_other; + + if($rowdata[$i]->group_desc<>$Diagnosis_head) + { + + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->group_desc.''; + $table_body.=''; + } + + $Diagnosis_head=$rowdata[$i]->group_desc; + + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->item_name.''; + $table_body.=''.$rowdata[$i]->No_qty.''; + $table_body.=''.$rowdata[$i]->Total_Amount.''; + $table_body.=''.$rowdata[$i]->Total_Act_Amount.''; + $table_body.=''; + + $table_Doctor_Total=$table_Doctor_Total+$rowdata[$i]->Total_Amount; + $table_Diagnosis_Head_Total=$table_Diagnosis_Head_Total+$rowdata[$i]->Total_Amount; + $table_Grand_Total=$table_Grand_Total+$rowdata[$i]->Total_Amount; + $table_qty_total=$table_qty_total+$rowdata[$i]->No_qty; + + $table_Doctor_act_Total=$table_Doctor_act_Total+$rowdata[$i]->Total_Act_Amount; + $table_Diagnosis_act_Head_Total=$table_Diagnosis_act_Head_Total+$rowdata[$i]->Total_Act_Amount; + $table_Grand_act_Total=$table_Grand_act_Total+$rowdata[$i]->Total_Act_Amount; + $table_grand_qty_total=$table_grand_qty_total+$rowdata[$i]->No_qty; + + if($Diagnosis_id<1) + { + if($igroup_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''.$table_Diagnosis_act_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + $table_Diagnosis_act_Head_Total=0.00; + $table_qty_total=0.00; + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''.$table_Diagnosis_act_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + $table_Diagnosis_act_Head_Total=0.00; + $table_qty_total=0.00; + } + + } + + if($irefer_by_other<>$doc_name_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total Doctor Head'; + $table_body.=''.$table_qty_total.''; + $table_body.=''.$table_Doctor_Total.''; + $table_body.=''.$table_Doctor_act_Total.''; + $table_body.=''; + + $table_Doctor_Total=0.00; + $table_Doctor_act_Total=0.00; + $table_qty_total=0.00; + + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total Doctor Head'; + $table_body.=''.$table_qty_total.''; + $table_body.=''.$table_Doctor_Total.''; + $table_body.=''.$table_Doctor_act_Total.''; + $table_body.=''; + + $table_Doctor_Total=0.00; + $table_Doctor_act_Total=0.00; + $table_qty_total=0.00; + } + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''.$table_grand_qty_total.''; + $table_footer.=''.$table_Grand_Total.''; + $table_footer.=''.$table_Grand_act_Total.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $content=$data_show; + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + + public function report_Diagnosis_Emp_total($opd_date_range,$emp_name_id,$Diagnosis_id) + { + $sql_f_all = "select m.invoice_code,p.p_code,p.p_fname,y.group_desc,t.item_name,t.item_qty,Round(if(m.invoice_status=1,(t.item_amount-(t.item_amount*m.discount_amount/m.total_amount)),0),2) as item_amount, + ph.RPaidAmount,ph.gupdate_by,ph.gupdate_by_id "; + + $sql_from=" from ((invoice_master m join invoice_item t join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id ) + join (select p.payof_type,p.payof_id,p.payof_code,sum(if(p.credit_debit=0,p.amount,p.amount*-1)) as RPaidAmount, + group_concat(distinct p.update_by) as gupdate_by,group_concat(distinct p.update_by_id) as gupdate_by_id + from payment_history p where p.payof_type=2 + group by p.payof_type,p.payof_id) as ph on m.id=ph.payof_id) "; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(m.inv_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and m.inv_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and m.prepared_by_id in (".$emp_name_id.")"; + } + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + + $sql_where.=" and t.item_type in (".$Diagnosis_id.") "; + } + + $sql_order=" Order by ph.gupdate_by,y.group_desc,t.item_name"; + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.=''; + $table_head.=''; + $table_head.='Patient Code/Name'; + $table_head.='Test Name'; + $table_head.='Amount'; + $table_head.=''; + + $table_footer=''; + + $sql="SELECT m.invoice_code,p.p_code,p.p_fname,y.group_desc,t.item_name,t.item_qty, Round((t.item_amount-(t.item_amount*m.discount_amount/m.total_amount)),2) as item_amount, + m.prepared_by,m.prepared_by_id + FROM ((invoice_master m join invoice_item t ON m.id=t.inv_master_id AND m.invoice_status=1) + join hc_item_type y ON t.item_type=y.itype_id) + JOIN patient_master p ON m.attach_id=p.id + $sql_where + GROUP BY m.prepared_by_id,y.itype_id,t.id + Order By m.prepared_by,y.group_desc,m.invoice_code"; + + $query = $this->db->query($sql); + $rowdata= $query->result(); + + $table_body=''; + $table_emp_Total=0.00; + $table_Diagnosis_Head_Total=0.00; + $table_Grand_Total=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + $emp_name_head=''; + $Diagnosis_head=''; + + for( $i = 0; $iprepared_by<>$emp_name_head) + { + $table_body.=''; + $table_body.='Emp.Name : '.$rowdata[$i]->prepared_by.''; + $table_body.=''; + } + + $emp_name_head=$rowdata[$i]->prepared_by; + + if($rowdata[$i]->group_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->group_desc.''; + $table_body.=''; + } + + $Diagnosis_head=$rowdata[$i]->group_desc; + + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->p_code.'/'.$rowdata[$i]->p_fname.''; + $table_body.=''.$rowdata[$i]->invoice_code.''; + $table_body.=''.$rowdata[$i]->item_name.''; + $table_body.=''.$rowdata[$i]->item_amount.''; + $table_body.=''; + + $table_emp_Total=$table_emp_Total+$rowdata[$i]->item_amount; + $table_Diagnosis_Head_Total=$table_Diagnosis_Head_Total+$rowdata[$i]->item_amount; + $table_Grand_Total=$table_Grand_Total+$rowdata[$i]->item_amount; + + if($Diagnosis_id<1) + { + if($igroup_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + } + + } + + if($iprepared_by<>$emp_name_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total Emp Head'; + $table_body.=''.$table_emp_Total.''; + $table_body.=''; + + $table_emp_Total=0.00; + + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total Emp. Head'; + $table_body.=''.$table_emp_Total.''; + $table_body.=''; + + $table_emp_Total=0.00; + } + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''.$table_Grand_Total.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $sql_where.=" and (m.payment_part_balance>0 or m.discount_amount>0) "; + //Foot Data Describe Discount + $sql_f_all_2="select m.invoice_code,p.p_code,p.p_fname,m.discount_amount,m.discount_desc,m.disc_update_by,m.total_amount, + ph.RPaidAmount,ph.gupdate_by,ph.gupdate_by_id ,m.payment_part_received,m.payment_part_balance"; + + //echo $sql_f_all_2.$sql_from.$sql_where.' group by m.id'.$sql_order; + $query2=$sql_f_all_2.$sql_from.$sql_where.' group by m.id'.$sql_order; + $query = $this->db->query($sql_f_all_2.$sql_from.$sql_where.' group by m.id'.$sql_order); + $rowfootdata= $query->result(); + + if(count($rowfootdata)>0) + { + + $data_show.='


'; + + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Code/Name'; + $table_head.='T Amount'; + $table_head.='Disc.Amt'; + $table_head.='Disc.By'; + $table_head.='Rec.Amt.'; + $table_head.='Balance'; + $table_head.=''; + + $T_Discount_Amt=0.00; + $T_Balance_Amt=0.00; + + $table_body=""; + + for( $i = 0; $iinvoice_code.''; + $table_body.=''.$rowfootdata[$i]->p_code.'/'.$rowfootdata[$i]->p_fname.''; + $table_body.=''.$rowfootdata[$i]->total_amount.''; + $table_body.=''.$rowfootdata[$i]->discount_amount.''; + $table_body.=''.$rowfootdata[$i]->discount_desc.''; + $table_body.=''.$rowfootdata[$i]->RPaidAmount.''; + $table_body.=''.$rowfootdata[$i]->payment_part_balance.''; + $table_body.=''; + + $T_Discount_Amt=$T_Discount_Amt+$rowfootdata[$i]->discount_amount; + $T_Balance_Amt=$T_Balance_Amt+$rowfootdata[$i]->payment_part_balance; + } + + $table_footer=''; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''.$T_Discount_Amt.''; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''.$T_Balance_Amt.''; + $table_footer.=''; + + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + } + + $content=$data_show; + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + public function report_Diagnosis_Emp_total_2($opd_date_range,$emp_name_id,$Diagnosis_id) + { + $sql_f_all = "select m.invoice_code,p.p_code,p.p_fname,y.group_desc,t.item_name,t.item_qty, + Round(if(m.invoice_status=1,(t.item_amount-(t.item_amount*m.discount_amount/m.total_amount)),0),2) as item_amount, + m.invoice_status "; + $sql_from=" from (invoice_master m join invoice_item t join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id + and payment_status=1 and m.invoice_status=1) "; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(m.inv_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and m.inv_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + + $sql_where.=" and t.item_type in (".$Diagnosis_id.") "; + } + + $sql_order=" Order by y.group_desc,t.item_name"; + + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.=''; + $table_head.=''; + $table_head.='Patient Code/Name'; + $table_head.='Test Name'; + $table_head.='Amount'; + $table_head.=''; + + $table_footer=''; + + $query1=$sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order; + $query = $this->db->query($query1); + $rowdata= $query->result(); + + + $table_body=''; + $table_emp_Total=0.00; + $table_Diagnosis_Head_Total=0.00; + $table_Grand_Total=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + $emp_name_head=''; + $Diagnosis_head=''; + + for( $i = 0; $igroup_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->group_desc.''; + $table_body.=''; + } + + $Diagnosis_head=$rowdata[$i]->group_desc; + + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->p_code.'/'.$rowdata[$i]->p_fname.''; + $table_body.=''.$rowdata[$i]->invoice_code.''; + $table_body.=''.$rowdata[$i]->item_amount.''; + $table_body.=''; + + + $table_Diagnosis_Head_Total=$table_Diagnosis_Head_Total+$rowdata[$i]->item_amount; + $table_Grand_Total=$table_Grand_Total+$rowdata[$i]->item_amount; + + if($Diagnosis_id<1) + { + if($igroup_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + } + + } + + + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''.$table_Grand_Total.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $content=$data_show; + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + + public function report_Diagnosis_item_count($opd_date_range,$emp_name_id,$Diagnosis_id) + { + $sql_f_all = "select m.invoice_code,p.p_code,p.p_fname,y.group_desc,t.item_name,t.item_qty, + if(m.invoice_status=1,t.item_amount,0) as item_amount,m.invoice_status "; + $sql_from=" from (invoice_master m join invoice_item t join hc_item_type y join patient_master p + on m.id=t.inv_master_id and t.item_type=y.itype_id and p.id=m.attach_id + and payment_status=1 and m.invoice_status=1) "; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(m.inv_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and m.inv_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + + $sql_where.=" and t.item_type in (".$Diagnosis_id.") "; + } + + $sql_order=" Order by y.group_desc,t.item_name"; + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.=''; + $table_head.=''; + $table_head.='Patient Code/Name'; + $table_head.='Test Name'; + $table_head.='Amount'; + $table_head.=''; + + $table_footer=''; + + // Add a page + // This method has several options, check the source code documentation for more information. + + + + $query1=$sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order; + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order); + $rowdata= $query->result(); + + $table_body=''; + $table_emp_Total=0.00; + $table_Diagnosis_Head_Total=0.00; + $table_Grand_Total=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + $emp_name_head=''; + $Diagnosis_head=''; + + for( $i = 0; $igroup_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->group_desc.''; + $table_body.=''; + } + + $Diagnosis_head=$rowdata[$i]->group_desc; + + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->p_code.'/'.$rowdata[$i]->p_fname.''; + $table_body.=''.$rowdata[$i]->invoice_code.''; + $table_body.=''.$rowdata[$i]->item_amount.''; + $table_body.=''; + + + $table_Diagnosis_Head_Total=$table_Diagnosis_Head_Total+$rowdata[$i]->item_amount; + $table_Grand_Total=$table_Grand_Total+$rowdata[$i]->item_amount; + + if($Diagnosis_id<1) + { + if($igroup_desc<>$Diagnosis_head) + { + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.='Total of '.$Diagnosis_head.''; + $table_body.=''.$table_Diagnosis_Head_Total.''; + $table_body.=''; + + $table_Diagnosis_Head_Total=0.00; + } + + } + + + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''; + $table_footer.=''.$table_Grand_Total.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $content=$data_show; + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + + + + + public function report_Diagnosis_total_cash($opd_date_range,$doc_id,$Diagnosis_id,$output=0) + { + $sql_f_all = "select m.refer_by_id,d.p_fname,t.item_id,t.item_type,m.refer_by_other, + y.group_desc,t.item_name,count(t.id) as No_test, + sum(t.item_qty) as No_qty,sum(t.item_amount) as Total_Amount, + Round(sum(t.item_amount*m.net_amount/m.total_amount),2) as net_total"; + + $sql_from=" from (invoice_master m join invoice_item t join hc_item_type y + on m.id=t.inv_master_id and t.item_type=y.itype_id and y.is_ipd_opd in (0,1)) + join doctor_master d on m.refer_by_id=d.id"; + + $sql_where=" Where m.payment_mode in (1,2) and m.payment_status=1 and m.invoice_status=1 and refer_by_id>0 "; + + $sql_group_by=" group by m.refer_by_id Asc ,t.item_type Asc,t.item_id Asc with rollup "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(m.inv_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and m.inv_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + if($doc_id>0) + { + $doc_id=str_replace('S',',',$doc_id); + + $sql_where.=" and m.refer_by_id in (".$doc_id.")"; + } + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + $sql_where.=" and t.item_type in (".$Diagnosis_id.")"; + } + + $sql_order=" "; + + $table_body=''; + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.=''; + $table_head.=''; + $table_head.='Test Name'; + $table_head.='No. of Test'; + $table_head.='Amount (with Discount Amt.)'; + $table_head.=''; + + $table_footer=''; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order); + $rowdata= $query->result(); + + for( $i = 0; $ip_fname.''; + $table_body.=''; + + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->group_desc.''; + $table_body.=''; + } + + if($rowdata[$i]->item_id==null) + { + if($rowdata[$i]->item_type==null) + { + if($rowdata[$i]->refer_by_id==null) + { + $table_body.=''; + $table_body.='Grand Total of All Doctors'; + $table_body.=''.$rowdata[$i]->net_total.''; + $table_body.=''; + }else{ + $table_body.=''; + $table_body.='Total of : Dr. '.$rowdata[$i]->p_fname.''; + $table_body.=''.$rowdata[$i]->net_total.''; + $table_body.=''; + + if(count($rowdata)>$i && $rowdata[$i+1]->refer_by_id !=null) + { + $table_body.=''; + $table_body.='Dr. '.$rowdata[$i+1]->p_fname.''; + $table_body.=''; + + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i+1]->group_desc.''; + $table_body.=''; + } + } + + }else{ + $table_body.=''; + $table_body.=''; + $table_body.='Total of :'.$rowdata[$i]->group_desc.''; + $table_body.=''.$rowdata[$i]->net_total.''; + $table_body.=''; + + if(count($rowdata)>$i && $rowdata[$i+1]->refer_by_id <>null) + { + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i+1]->group_desc.''; + $table_body.=''; + } + } + }else{ + $table_body.=''; + $table_body.=''; + $table_body.=''; + $table_body.=''.$rowdata[$i]->item_name.''; + $table_body.=''.$rowdata[$i]->No_qty.''; + $table_body.=''.$rowdata[$i]->net_total.''; + $table_body.=''; + } + } + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + //echo $data_show; + + if($output==0) + { + $content=$data_show; + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($data_show,'Diagnosis_Qty_cash'.date('Ymd')); + } + } + + + } \ No newline at end of file diff --git a/old_code_ci3/controllers/Report3.php b/old_code_ci3/controllers/Report3.php new file mode 100644 index 0000000..75af2f1 --- /dev/null +++ b/old_code_ci3/controllers/Report3.php @@ -0,0 +1,839 @@ +db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from h_insurance_group "; + $query = $this->db->query($sql); + $data['ins_group']= $query->result(); + + $sql="select * from hc_insurance order by short_name"; + $query = $this->db->query($sql); + $data['hc_insurance']= $query->result(); + + $this->load->view('Report/Report_IPD',$data); + } + + function ipd_report_2() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from h_insurance_group "; + $query = $this->db->query($sql); + $data['ins_group']= $query->result(); + + $sql="select * from hc_insurance order by short_name"; + $query = $this->db->query($sql); + $data['hc_insurance']= $query->result(); + + $this->load->view('Report/IPD_Current_List',$data); + } + + function ipd_report_3() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from h_insurance_group "; + $query = $this->db->query($sql); + $data['ins_group']= $query->result(); + + $this->load->view('Report/Report_medical',$data); + } + + function ipd_discharge($daterange,$doc_name_id,$ipd_type,$ipd_status,$ipd_date,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + $order_by=""; + + if($ipd_status>-1) + { + $where.=" and p.ipd_status=".$ipd_status; + } + + if($ipd_date==0) + { + $where.=" and date(p.register_date) between '".$minRange."' and '".$maxRange."' " ; + $order_by.=" p.id"; + }elseif($ipd_date==1) + { + $where.=" and date(p.discharge_date) between '".$minRange."' and '".$maxRange."' " ; + $order_by.=" p.discharge_date"; + } + + if($doc_name_id<>0) + { + $doc_array=explode("S",$doc_name_id); + $where.="and ( 1<>1 "; + foreach($doc_array as $row) + { + $where.=" OR FIND_IN_SET('".$row."',doc_list) "; + } + + $where.=")"; + } + + if($ipd_type>=1){ + $where.=" and group_ins=".$ipd_type." "; + }else if($ipd_type<0){ + $where.=" and insurance_id=".($ipd_type*-1)." "; + } + + + + $content=""; + + $sql="select p.ipd_code,p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date,p_code, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.status_desc, + p.charge_amount,p.package_charge_amount,p.med_amount,p.package_med_amount,p.chargeamount_all,p.Discount_all, + (p.charge_amount+p.med_amount+p.chargeamount_all-p.Discount_all) as net_Amount,p.paid_amount + from v_ipd_list p where ".$where." group by p.id order by $order_by"; + + //$content.= $sql; + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $total_paid_amount=0.00; + $total_net_amount=0.00; + + $content=""; + + $content.=''; + + $content.=' + + + + + + + + + + + + '; + + $sr_no=0; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + '; + + $total_paid_amount+= $row->paid_amount; + $total_net_amount+= $row->net_Amount; + } + + $content.=' + + + + + + + + + + '; + + + $content.="
#IPD / UHID CodePerson NameAdmit /Discharge DateDoc. NameNet AmountPaid Amt.StatusTYPE
'.$sr_no.''.$row->ipd_code.'
'.$row->p_code.'
'.$row->p_fname.''.$row->str_register_date.'
'.$row->str_discharge_date.'
'.$row->doc_name.''.$row->net_Amount.''.$row->paid_amount.''.$row->status_desc.''.$row->admit_type.'
#'.$total_net_amount.''.$total_paid_amount.'
"; + if($output==0) + { + + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_List'); + } + + + + + } + + function ipd_discharge_details($daterange,$doc_name_id,$ipd_type,$ipd_status,$ipd_date,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + $order_by=""; + + if($ipd_status>-1) + { + $where.=" and p.ipd_status=".$ipd_status; + } + + if($ipd_date==0) + { + $where.=" and p.register_date between '".$minRange."' and '".$maxRange."' " ; + $order_by.=" p.id"; + }elseif($ipd_date==1) + { + $where.=" and p.discharge_date between '".$minRange."' and '".$maxRange."' " ; + $order_by.=" p.discharge_date"; + } + + if($doc_name_id<>0) + { + $doc_array=explode("S",$doc_name_id); + $where.="and ( 1<>1 "; + foreach($doc_array as $row) + { + $where.=" OR FIND_IN_SET('".$row."',doc_list) "; + } + + $where.=")"; + } + + if($ipd_type>=1){ + $where.=" and group_ins=".$ipd_type." "; + }else if($ipd_type<0){ + $where.=" and insurance_id=".($ipd_type*-1)." "; + } + + + $sql="select p.ipd_code,p.P_mobile1,case_id_code,insurance_no,insurance_no_1,insurance_no_2,Org_insurance_comp,xgender,str_age, + p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date,p.reg_time,p_code, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.Bed_Desc, + p.charge_amount,p.package_charge_amount,p.med_amount,p.package_med_amount,p.chargeamount_all,p.Discount_all, + (p.charge_amount+p.med_amount+p.chargeamount_all-p.Discount_all) as net_Amount,p.paid_amount, + p.amount_recived,amount_deduction,p.org_approved_amount,status_desc + from v_ipd_list p where ".$where." group by p.id order by $order_by"; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $total_paid_amount=0.00; + $total_net_amount=0.00; + + $content=''; + + $content.=' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + + $sr_no=0; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + $total_paid_amount+= $row->paid_amount; + $total_net_amount+= $row->net_Amount; + } + + $content.=' + + + + + + + + + + + + + + + + + + + + + + + + + + + + '; + + + $content.="
#IPD CodeP CodePerson NameGenderAgeCard No.Claim ID/Case IDClaim ID/Case IDAdmit DateAd. TimeDischarge DateDoc. NameCharge Amt.Medicine Amt.Other ChargeDiscountNet AmountPaid Amt.TPACase CodeInsuranceTPA Approved Amt.TPA Amt. Rec.TPA Amt. Ded.Pack. Amt.Pack. Med. Amt.Discharge Status
'.$sr_no.''.$row->ipd_code.''.$row->p_code.''.$row->p_fname.''.$row->xgender.''.$row->str_age.''.$row->insurance_no.''.$row->insurance_no_1.''.$row->insurance_no_2.''.$row->str_register_date.''.$row->reg_time.''.$row->str_discharge_date.''.$row->doc_name.''.$row->charge_amount.''.$row->med_amount.''.$row->chargeamount_all.''.$row->Discount_all.''.$row->net_Amount.''.$row->paid_amount.''.$row->admit_type.''.$row->case_id_code.''.$row->Org_insurance_comp.''.$row->org_approved_amount.''.$row->amount_recived.''.$row->amount_deduction.''.$row->package_charge_amount.''.$row->package_med_amount.''.$row->status_desc.'
#'.$total_net_amount.''.$total_paid_amount.'
"; + + //echo $content; + ExportExcel($content,'IPD_List'); + + } + + function ipd_discharge_medical($daterange,$doc_name_id,$ipd_type,$ipd_status,$ipd_date,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" (p.med_amount>0 or p.package_med_amount>0 )" ; + + if($ipd_status>-1) + { + $where.=" and p.ipd_status=".$ipd_status; + } + + if($ipd_date==0) + { + $where.=" and p.register_date between '".$minRange."' and '".$maxRange."' " ; + }elseif($ipd_date==1) + { + $where.=" and p.discharge_date between '".$minRange."' and '".$maxRange."' " ; + } + + if($doc_name_id>0) + { + $where.=" and FIND_IN_SET('".$doc_name_id."',doc_list) "; + } + + if($ipd_type>=1){ + $where.=" and group_ins=".$ipd_type." "; + }else if($ipd_type<0){ + $where.=" and insurance_id=".($ipd_type*-1)." "; + } + + $sql="select p.ipd_code,case_id_code,insurance_no,insurance_no_1,insurance_no_2,Org_insurance_comp, + p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date,p_code, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.Bed_Desc, + p.charge_amount,p.package_charge_amount,p.med_amount,p.package_med_amount,p.chargeamount_all,p.Discount_all, + (p.charge_amount+p.med_amount+p.chargeamount_all-p.Discount_all) as net_Amount,p.paid_amount, + p.amount_recived,amount_deduction,p.org_approved_amount + from v_ipd_list p where ".$where." group by p.id order by id"; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $total_med_amount=0.00; + $package_med_amount=0.00; + $total_net_amount=0.00; + + $content="

Date(YYYY-MM-DD) between ".$minRange." and ".$maxRange."

"; + + $content.=''; + + $content.=' + + + + + + + + + '; + + $sr_no=0; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + '; + $total_med_amount+= $row->med_amount; + $package_med_amount+= $row->package_med_amount; + $total_net_amount+= $row->net_Amount; + } + + $content.=' + + + + + + + + + '; + + $med_cr_amt=$package_med_amount+$total_med_amount; + + $content.=' + + + + + '; + + $content.="
#IPD CodePerson NameTPANet AmountMedicine Amt.Medicine Pack. Amt.Doc. Name
'.$sr_no.''.$row->ipd_code.''.$row->p_fname.''.$row->admit_type.''.$row->net_Amount.''.$row->med_amount.''.$row->package_med_amount.''.$row->doc_name.'
#'.$total_net_amount.''.$total_med_amount.''.$package_med_amount.'
#Total Medical Cr. Amount'.$med_cr_amt.'
"; + + if($output==0) + { + + $this->load->library('m_pdf'); + + $file_name="Report-Medical_".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_Medical_List'); + } + + } + + + function ipd_current($doc_name_id,$ipd_type,$sortorder,$output=0) + { + + $where =" p.ipd_status=0 " ; + + if($doc_name_id>0) + { + $where.=" and FIND_IN_SET('".$doc_name_id."',doc_list) "; + } + + if($ipd_type>=1){ + $where.=" and group_ins=".$ipd_type." "; + }else if($ipd_type<0){ + $where.=" and insurance_id=".($ipd_type*-1)." "; + } + + $orderby=" Order By "; + + if($sortorder==0) + { + $orderby.=" p.id"; + }elseif($sortorder==1) + { + $orderby.=" p.register_date"; + }elseif($sortorder==2) + { + $orderby.=" p.p_fname"; + }else{ + $orderby.=" p.Bed_Desc"; + } + + $sql="select p.ipd_code,p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.Bed_Desc, + charge_amount,paid_amount,p.app_status,p.color,p.org_approved_amount,p.net_amount, + p.balance_amount,no_days + from v_ipd_list p where ".$where." group by p.id ".$orderby; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $content=''; + + $content.=' + + + + + + + + + + + + + + '; + + $sr_no=0; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + + + + + '; + } + + $content.="
#IPD CodePerson NameBed NoAdmit DateNo.DaysDoc. NameTYPEOrg. StatusApp. Amt.Bill Amt.Bal. Amt.Paid Amt.
'.$sr_no.''.$row->ipd_code.''.$row->p_fname.''.$row->Bed_Desc.''.$row->str_register_date.'
'.$row->str_discharge_date.'
'.$row->no_days.''.$row->doc_name.''.$row->admit_type.''.$row->app_status.''.$row->org_approved_amount.''.$row->net_amount.''.$row->balance_amount.''.$row->paid_amount.'
"; + + if($output==0) + { + echo $content; + }else{ + + ExportExcel($content,'Current_IPD_List'+date('Ymdhis')); + } + + + } + function report_Diagnosis_Qty_main() + { + $sql="select * from hc_item_type where is_ipd_opd in (0,1)"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report3/diagnosis_qty',$data); + } + + + function report_Diagnosis_Qty_total($opd_date_range,$Diagnosis_id,$output=0) + { + $sql_field="select t.item_type,y.group_desc,t.item_name, + sum(t.item_qty) as t_item_qty, + sum(t.item_amount) as item_amount, + sum(Round(t.item_amount*(1-m.discount_amount/m.total_amount))) as item_amount_net + from (invoice_item t join invoice_master m + on m.id=t.inv_master_id) join hc_item_type y on t.item_type=y.itype_id "; + + $sql_where=" where m.invoice_status=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(m.inv_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and m.inv_date between '".$minRange."' and '".$maxRange. "'"; + } + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + + $sql_where.=" and t.item_type in (".$Diagnosis_id.") "; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + $sql_group=" group by t.item_type,t.item_id order by t.item_type"; + + $sql=$sql_field.$sql_where.$sql_group; + + $query = $this->db->query($sql); + $Diagnosis_Data= $query->result(); + + $content=''; + + $content.=' + + + + + + + '; + + $sr_no=0; + $item_amount=0; + $item_amount_net=0; + + foreach($Diagnosis_Data as $row) + { + $sr_no=$sr_no+1; + $item_amount+=$row->item_amount; + $item_amount_net+=$row->item_amount_net; + $content.=' + + + + + + + '; + } + $content.=' + + + + + + + '; + + $content.="
#Diagnosis GroupDiagnosisQtyAmountNet Amount
'.$sr_no.''.$row->group_desc.''.$row->item_name.''.$row->t_item_qty.''.$row->item_amount.''.$row->item_amount_net.'
#Total'.$item_amount.''.$item_amount_net.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + + ExportExcel($content,'Diagnosis_Qty'.date('Ymd')); + } + + } + + function ipd_item_reports() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from ipd_item_type order by 'desc'"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report/Report_medical',$data); + } + + function ipd_item_reports_data($daterange,$Diagnosis_id,$doc_name_id,$ipd_status,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + $order_by=" i.id"; + + if($ipd_status>-1) + { + $where.=" and i.ipd_status=".$ipd_status; + } + + if($Diagnosis_id>0) + { + $Diagnosis_id=str_replace('S',',',$Diagnosis_id); + + $where.=" and t.item_type in (".$Diagnosis_id.") "; + } + + if($doc_name_id>0) + { + $doc_list=str_replace("S",",",$doc_name_id); + + $where.=" and t.doc_id in ($doc_list)"; + } + + $where.=" and date(i.register_date) between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT i.id,i.ipd_code,i.p_fname,date_format(i.register_date,'%d-%m-%Y') AS register_date_str, + DATE_FORMAT(i.discharge_date,'%d-%m-%Y') AS discharge_date_str,i.doc_name as ipd_doc_name, + t.item_name,t.item_rate,t.item_qty,t.item_amount,t.doc_name,t.doc_id, + ROUND(t.item_amount-(t.item_amount*((i.Discount_all)/(i.net_amount+i.Discount_all)))) AS Aft_Amt, + ROUND(((i.Discount_all*100)/(i.net_amount+i.Discount_all)),2) AS Dis_per + FROM v_ipd_list i JOIN ipd_invoice_item t ON i.id=t.ipd_id + Where $where Order By $order_by"; + $query = $this->db->query($sql); + $data['ipd_item_data']= $query->result(); + + + $content=$this->load->view('Report/Report_medical_template',$data,true); + + //echo $content; + + if($output==0) + { + + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_List'); + } + + + } + + + function ipd_item_refer_reports() + { + $sql="select * from refer_master where active=1 order by f_name"; + $query = $this->db->query($sql); + $data['refer_master']= $query->result(); + + $sql="select * from ipd_item_type order by 'desc'"; + $query = $this->db->query($sql); + $data['item_type_list']= $query->result(); + + $this->load->view('Report/Report_refer_ipd',$data); + } + + function ipd_item_refer_reports_data($daterange,$refer_id,$ipd_status,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + $order_by=" i.id"; + + if($ipd_status>-1) + { + $where.=" and i.ipd_status=".$ipd_status; + } + + if($refer_id>0) + { + $refer_list=str_replace("S",",",$refer_id); + + $where.=" and r.refer_by in ($refer_list)"; + } + + $where.=" and date(i.register_date) between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT i.id,i.ipd_code,i.p_fname,date_format(i.register_date,'%d-%m-%Y') AS register_date_str, + DATE_FORMAT(i.discharge_date,'%d-%m-%Y') AS discharge_date_str, + i.doc_name as ipd_doc_name, i.net_amount,i.balance_amount, m.title,m.f_name,r.refer_type,t.type_desc + FROM ((v_ipd_list i JOIN ipd_refer r ON i.id=r.ipd_id) JOIN refer_type t ON r.refer_type=t.id) + JOIN refer_master m ON r.refer_by=m.id + Where $where Order By $order_by"; + $query = $this->db->query($sql); + $data['ipd_refer_data']= $query->result(); + + + $content=$this->load->view('Report/Report_refer_template',$data,true); + + //echo $content; + + if($output==0) + { + + $this->load->library('m_pdf'); + + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + }else{ + + ExportExcel($content,'IPD_List'); + } + + + } + +} diff --git a/old_code_ci3/controllers/Report4.php b/old_code_ci3/controllers/Report4.php new file mode 100644 index 0000000..a307f9b --- /dev/null +++ b/old_code_ci3/controllers/Report4.php @@ -0,0 +1,261 @@ +db->query($sql); + $data['ins_group']= $query->result(); + + $sql="select * from hc_insurance order by short_name "; + $query = $this->db->query($sql); + $data['hc_insurance']= $query->result(); + + $this->load->view('Report3/ECHS_IPD',$data); + } + + function echs_opd_list_main() + { + $sql="select * from h_insurance_group "; + $query = $this->db->query($sql); + $data['ins_group']= $query->result(); + + $sql="select * from hc_insurance order by short_name "; + $query = $this->db->query($sql); + $data['hc_insurance']= $query->result(); + + $this->load->view('Report3/ECHS_OPD',$data); + } + + function echs_ipd_list_data($daterange,$org_status,$ipd_type,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + $where.=" and p.ipd_status=1"; + + if($org_status>=0) + { + $where.=" and p.status=".$org_status; + } + + $where.=" and p.register_date between '".$minRange."' and '".$maxRange."' " ; + + if($ipd_type>0){ + $where.=" and group_ins=".$ipd_type." "; + }elseif($ipd_type<0){ + $where.=" and insurance_id=".($ipd_type*-1)." "; + } + + + $sql="select p.ipd_code,p.p_fname,Date_Format(p.register_date,'%d-%m-%Y') as str_register_date,p_code, + Date_Format(p.discharge_date,'%d-%m-%Y') as str_discharge_date,p.admit_type,p.doc_name,p.Bed_Desc, + charge_amount,paid_amount,p.org_submit_status,p.status, + concat(p.insurance_no,'/',p.insurance_no_1) as case_info, + p.med_amount,p.Discount_all,p.chargeamount_all,p.insurance_id,p.ins_company_name, + p.amount_recived,p.amount_deduction,p.app_status,p.color, + (p.charge_amount+p.med_amount+p.chargeamount_all-p.Discount_all) as net_total + from v_ipd_list p where ".$where." group by p.p_id,p.doc_list order by id"; + + //echo $sql; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $total_Payment=0.00; + + $content=''; + + $content.=' + + + + + + + + + + + + + + '; + $sr_no=0; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + + + + + '; + $total_Payment+= $row->net_total; + } + + $content.=' + + + + + + + + + + + '; + + $content.="
#Case Info.IPD CodeP CodePerson NameOrg. StatusAdmit DateDischarge DateOrg NameDoc. NameNet Amt.Amt ReceivedAmt Deduct
'.$sr_no.''.$row->case_info.''.$row->ipd_code.''.$row->p_code.''.$row->p_fname.''.$row->org_submit_status.''.$row->str_register_date.''.$row->str_discharge_date.''.$row->ins_company_name.''.$row->doc_name.''.$row->net_total.''.$row->amount_recived.''.$row->amount_deduction.'
#Total'.$total_Payment.'
"; + + if($output==0) + { + //echo $content; + //create_report_pdf_landscape($content,'ECHS_IPD_List'.date('Yms')); + $this->load->library('m_pdf'); + + $file_name="Report-ECHS_IPD_List_".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + + + }else{ + ExportExcel($content,'ECHS_IPD_List'.date('Yms')); + } + + } + + function echs_opd_list_data($daterange,$org_status,$ipd_type,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + if($org_status>=0) + { + $where.=" and o.status=".$org_status; + } + + $where.=" and o.date_registration between '".$minRange."' and '".$maxRange."' " ; + + if($ipd_type>0){ + $where.=" and in_master.id=".$ipd_type." "; + }elseif($ipd_type<0){ + $where.=" and o.insurance_id=".($ipd_type*-1)." "; + } + + $sql="select o.id,o.case_id_code,Concat(o.insurance_no,'/',o.insurance_no_1) as case_info,p.p_fname, + `o`.`status`,p.p_code,p.p_fname, + (case `o`.`status` when 0 then 'Pending' when 1 then 'Ready' when 2 then 'Submit' else 'Nothing' end) AS `org_submit_status`, + (o.inv_opd_amt+o.inv_opd_charge_amt) as Charge_amount, + o.inv_opd_med_amt as med_net_amount, + o.date_registration,date_format(o.date_registration,'%d-%m-%Y') as str_date_registration + from (organization_case_master o join patient_master p on o.p_id=p.id and o.case_type=0) + join hc_insurance as in_master on in_master.id = o.insurance_id + where ".$where." and (o.inv_opd_amt+o.inv_opd_charge_amt+o.inv_opd_med_amt)>0 + group by o.id order by o.id"; + + //echo $sql; + + $query = $this->db->query($sql); + $dischargelist= $query->result(); + + $total_Payment=0.00; + $total_Med_Payment=0.00; + + $content=''; + + $content.=' + + + + + + + + + + + '; + + $sr_no=0; + $total_net_amount=0.00; + foreach($dischargelist as $row) + { + $sr_no=$sr_no+1; + $net_amount=($row->Charge_amount+$row->med_net_amount); + $content.=' + + + + + + + + + + + '; + $total_Payment+= $row->Charge_amount; + $total_Med_Payment+= $row->med_net_amount; + $total_net_amount+= $net_amount; + + } + $content.=' + + + + + + + + + + + '; + + $content.="
#Bill No.Case Info.Org. CodeUHIDPerson NameDateCharge Amt.Med. Amt.Net Amt.
'.$sr_no.''.$row->id.''.$row->case_info.''.$row->case_id_code.''.$row->p_code.''.$row->p_fname.''.$row->str_date_registration.''.$row->Charge_amount.''.$row->med_net_amount.''.$net_amount.'
#'.$total_Payment.''.$total_Med_Payment.''.$total_net_amount.'
"; + + if($output==0) + { + //echo $content; + //create_report_pdf_landscape($content,'ECHS_OPD_List'.date('Yms')); + $this->load->library('m_pdf'); + + $file_name="Report-ECHS_OPD_List_".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'ECHS_OPD_List'.date('Yms')); + } + + } + + + +} + +/* End of file c_test.php */ +/* Location: ./application/controllers/c_test.php */ \ No newline at end of file diff --git a/old_code_ci3/controllers/Report5.php b/old_code_ci3/controllers/Report5.php new file mode 100644 index 0000000..f27d3e9 --- /dev/null +++ b/old_code_ci3/controllers/Report5.php @@ -0,0 +1,393 @@ +db->query($sql); + $data['doclist']= $query->result(); + + $this->load->view('Report5/Report_Document',$data); + } + + function document_list_data($daterange,$dr_id,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + if($dr_id>0) + { + $where.=" and doc.id =".$dr_id; + } + + $where.=" and d.date_issue between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT p.id,p.p_fname,p.p_rname,p.p_relative,p.p_code, + d.doc_subject,d.date_issue,date_format(d.date_issue,'%d-%m-%Y') AS str_date_issue, + d.id AS Doc_id,f.doc_name, + doc.p_fname AS dr_name,doc.id AS dr_id + FROM ((patient_master_exten p JOIN patient_doc d ON p.id=d.p_id) + JOIN doctor_master doc ON d.dr_id=doc.id) + Join doc_format_master f ON d.doc_format_id=f.df_id where ".$where." "; + + //echo $sql; + + $query = $this->db->query($sql); + $doclist= $query->result(); + + $content=''; + + $content.=' + + + + + + + + '; + $sr_no=0; + foreach($doclist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + '; + } + + $content.=' + + + + + + + + '; + + $content.="
#Doc. IDPerson Name / Relative NamePCode/UHIDDoctor NameIssue DateDocument Name
'.$sr_no.''.$row->Doc_id.''.$row->p_fname.'{'.$row->p_relative.' '.$row->p_rname.'}'.$row->p_code.''.$row->dr_name.''.$row->str_date_issue.''.$row->doc_name.'
#
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'document_List'.date('Yms')); + } + + } + + // Xray Chest List + public function Report_XRay_chest() + { + $this->load->view('Report5/Report_XRay_chest'); + } + + public function XRay_chest_data($daterange,$output=0){ + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + + $sql="SELECT p.p_code,p.p_fname,p.xgender,p.str_age,p.mphone1,p_address, + date_format(m.inv_date,'%d-%m-%Y') AS str_test_date,i.item_name,t.group_desc,i.item_id + FROM ((patient_master_exten p JOIN invoice_master m ON p.id=m.attach_id) + JOIN invoice_item i ON m.id=i.inv_master_id) + JOIN hc_item_type t ON i.item_type=t.itype_id + WHERE m.inv_date BETWEEN '".$minRange."' AND '".$maxRange."' + AND i.item_id=61 "; + + //echo $sql; + + $query = $this->db->query($sql); + $doclist= $query->result(); + + $content='

'.H_Name.'

'; + $content.='

'.H_address_1.'

'; + + $content.='

X-Ray Chest

'; + + $content.=''; + + $content.=' + + + + + + + + + + '; + $sr_no=0; + foreach($doclist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + '; + } + $content.="
#PCode/UHIDPatient NameAgeGenderAddressPhone NumberTest DateTest Name
'.$sr_no.''.$row->p_code.''.$row->p_fname.''.$row->str_age.''.$row->xgender.''.$row->p_address.''.$row->mphone1.''.$row->str_test_date.''.$row->item_name.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'XRay_chest_list'.date('Yms')); + } + } + + + // Corona + public function corona_suspected() + { + $this->load->view('Report5/Report_corona_suspected'); + } + + function corona_suspected_data($daterange,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" " ; + + $where.=" and m.apointment_date between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT p.p_code,p.p_fname,p.xgender,p.str_age,p.mphone1,p_address, + date_format(m.apointment_date,'%d-%m-%Y') AS str_apointment_date,o.complaints + FROM (opd_prescription o JOIN opd_master m ON m.opd_id=o.opd_id) + JOIN patient_master_exten p ON m.p_id=p.id + WHERE o.corona_suspected=1 ".$where." "; + + //echo $sql; + + $query = $this->db->query($sql); + $doclist= $query->result(); + + $content='

'.H_Name.'

'; + $content.='

'.H_address_1.'

'; + + $content.='

Corona Suspected Data

'; + + $content.=''; + + $content.=' + + + + + + + + + '; + $sr_no=0; + foreach($doclist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + '; + } + $content.="
#Patient NameAgeGenderAddressPhone NumberVisit DateSymptoms
'.$sr_no.''.$row->p_fname.''.$row->str_age.''.$row->xgender.''.$row->p_address.''.$row->mphone1.''.$row->str_apointment_date.''.$row->complaints.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'corona_suspected'.date('Yms')); + } + } + + // pregnancy + public function pregnancy_search() + { + $this->load->view('Report5/Report_pregnancy_suspected'); + } + + function pregnancy_data($daterange,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" " ; + + $where.=" and m.apointment_date between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT p.p_code,p.p_fname,p.xgender,p.str_age,p.mphone1,p_address, + date_format(m.apointment_date,'%d-%m-%Y') AS str_apointment_date,o.complaints + FROM (opd_prescription o JOIN opd_master m ON m.opd_id=o.opd_id) + JOIN patient_master_exten p ON m.p_id=p.id + WHERE o.pregnancy=1 ".$where." "; + + //echo $sql; + + $query = $this->db->query($sql); + $doclist= $query->result(); + + $content='

'.H_Name.'

'; + $content.='

'.H_address_1.'

'; + + $content.='

Pregnancy Data

'; + + $content.=''; + + $content.=' + + + + + + + + + '; + $sr_no=0; + foreach($doclist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + '; + } + $content.="
#Patient NameAgeGenderAddressPhone NumberVisit DateSymptoms
'.$sr_no.''.$row->p_fname.''.$row->str_age.''.$row->xgender.''.$row->p_address.''.$row->mphone1.''.$row->str_apointment_date.''.$row->complaints.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'pregnancy_data'.date('Yms')); + } + } + + + //Dengue + public function dengue() + { + $this->load->view('Report5/Report_dengue'); + } + + function dengue_data($daterange,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" " ; + + $where.=" and m.apointment_date between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT p.p_code,p.p_fname,p.xgender,p.str_age,p.mphone1,p_address, + date_format(m.apointment_date,'%d-%m-%Y') AS str_apointment_date,o.complaints + FROM (opd_prescription o JOIN opd_master m ON m.opd_id=o.opd_id) + JOIN patient_master_exten p ON m.p_id=p.id + WHERE o.dengue=1 ".$where." "; + + //echo $sql; + + $query = $this->db->query($sql); + $doclist= $query->result(); + + $content='

'.H_Name.'

'; + $content.='

'.H_address_1.'

'; + + $content.='

Dengue Patient Data

'; + + $content.=''; + + $content.=' + + + + + + + + + '; + $sr_no=0; + foreach($doclist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + '; + } + $content.="
#Patient NameAgeGenderAddressPhone NumberVisit DateSymptoms
'.$sr_no.''.$row->p_fname.''.$row->str_age.''.$row->xgender.''.$row->p_address.''.$row->mphone1.''.$row->str_apointment_date.''.$row->complaints.'
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'dengue_data'.date('Yms')); + } + } + + +} + \ No newline at end of file diff --git a/old_code_ci3/controllers/Report6.php b/old_code_ci3/controllers/Report6.php new file mode 100644 index 0000000..de0b464 --- /dev/null +++ b/old_code_ci3/controllers/Report6.php @@ -0,0 +1,119 @@ +'ULTRASOUND', + '2'=>'MRI', + '3'=>'X-RAY', + '4'=>'CT SCAN', + '5'=>'PATHOLOGY ', + ); + + $this->load->view('Report6/Report_Lab_Log',$data); + } + + + + function lab_log_data($daterange,$lab_type,$output=0) + { + $rangeArray = explode("S",$daterange); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where =" 1=1 " ; + + if($lab_type>0) + { + $where.=" and r.lab_type =".$lab_type; + } + + $where.=" and l.log_insert_time between '".$minRange."' and '".$maxRange."' " ; + + $sql="SELECT l.*,r.invoice_code,r.patient_name,r.lab_type + FROM lab_log l JOIN lab_request r ON l.lab_repo_id=r.id + WHERE ".$where." "; + + //echo $sql; + + $query = $this->db->query($sql); + $doclist= $query->result(); + + $lab_type_data=array( + '1'=>'ULTRASOUND', + '2'=>'MRI', + '3'=>'X-RAY', + '4'=>'CT SCAN', + '5'=>'PATHOLOGY ', + ); + $content="Data Between from ".$minRange."' to '".$maxRange."' " ; + + $content.=''; + + $content.=' + + + + + + + + + + '; + $sr_no=0; + foreach($doclist as $row) + { + $sr_no=$sr_no+1; + $content.=' + + + + + + + + + + '; + } + + $content.=' + + + + + + + + + + '; + + $content.="
#LabDate TimeInvoice /Lab No.Person NameLog TypeLog FaultsUpdateByRemark/Comment
'.$sr_no.''.$lab_type_data[$row->lab_type].''.$row->log_insert_time.''.$row->invoice_code.''.$row->patient_name.''.$row->log_type.''.$row->log_Faults.''.$row->log_by.''.$row->comments.'
#LabDate TimeInvoice /Lab No.Person NameLog TypeLog FaultsUpdateByRemark/Comment
"; + + if($output==0) + { + $this->load->library('m_pdf'); + $file_name="Report-".date('Ymdhis').".pdf"; + $filepath=$file_name; + $this->m_pdf->pdf->WriteHTML($content); + $this->m_pdf->pdf->Output($filepath,"I"); + }else{ + ExportExcel($content,'document_List'.date('Yms')); + } + + } + + + + +} + \ No newline at end of file diff --git a/old_code_ci3/controllers/ReportPanel2.php b/old_code_ci3/controllers/ReportPanel2.php new file mode 100644 index 0000000..58db238 --- /dev/null +++ b/old_code_ci3/controllers/ReportPanel2.php @@ -0,0 +1,1998 @@ +load->library("Pdf"); + } + + public function opd() { + + $this->load->library('table'); + + $template = array( + 'table_open' => '', + 'thead_open' => '', + 'thead_close' => '', + + 'heading_row_start' => '', + 'heading_row_end' => '', + 'heading_cell_start' => '', + + 'tbody_open' => '', + 'tbody_close' => '', + + 'row_start' => '', + 'row_end' => '', + 'cell_start' => '', + + 'row_alt_start' => '', + 'row_alt_end' => '', + 'cell_alt_start' => '', + + 'table_close' => '
', + 'heading_cell_end' => '
', + 'cell_end' => '
', + 'cell_alt_end' => '
' + ); + + $this->table->set_template($template); + + $query = $this->db->query("select o.opd_code,o.P_name,o.apointment_date,o.doc_name + from opd_master o"); + + $table_show = $this->table->generate($query); + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 14, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + // set text shadow effect + $pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $test= '

Report Sample Page TEsted

'; + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('OPD_001.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + public function index() + { + $this->load->view('Report/ReportMain'); + } + public function report_opd_app() + { + + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_opd_p',$data); + } + + + public function report_charge_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_other_charge',$data); + } + + public function report_ipdpayment_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/ipd_payment_report',$data); + } + + public function report_totalpayment_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_total_payment',$data); + } + + public function report_emp_total_app() + { + $sql="select * from doctor_master where active=1 order by p_fname"; + $query = $this->db->query($sql); + $data['doclist']= $query->result(); + + $sql="select * from users where active=1 order by first_name"; + $query = $this->db->query($sql); + $data['emplist']= $query->result(); + + $sql="select * from payment_mode where id in (1,2) "; + $query = $this->db->query($sql); + $data['paymodelist']= $query->result(); + + $this->load->view('Report/rep_collocation_emp',$data); + } + + public function report_opd_app_show($opd_date_range, + $doc_name_id,$emp_name_id,$paymode_id,$order_1,$order_2,$group_by) + { + $sql_f_all = "select o.opd_code, + o.P_name , + p_code , + Date_Format(o.apointment_date,'%d-%m-%Y') as 'App_Date', + o.doc_name , + if(o.insurance_id>1,'Org.','Direct') as 'Type', + m.mode_desc as 'PayMode', + o.opd_fee_gross_amount as 'GrossAmt', + o.opd_discount as Discount, + o.opd_fee_amount as 'FeeAmt', + o.prepared_by,IFNULL(GET_AGE_BY_DOB(dob),age) as Age "; + + $sql_from=" from opd_master o join payment_mode m join patient_master p on o.payment_mode=m.id and p.id=o.p_id"; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + $sql_where.=" and o.apointment_date between '".$minRange."' and '".$maxRange. "'"; + + if($doc_name_id>0) + { + $sql_where.=" and o.doc_id='".$doc_name_id."'"; + } + + if($emp_name_id>0) + { + $sql_where.=" and o.prepared_by like '%[".$emp_name_id."]'"; + } + + if($paymode_id>0) + { + $sql_where.=" and o.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by o.apointment_date"; + + if($order_1==1) + { + $sql_order.=' ,o.doc_name'; + } + + if($order_1==2) + { + $sql_order.=' ,o.prepared_by'; + } + + if($order_1==3) + { + $sql_order.=' ,m.mode_desc'; + } + + if($order_2==1) + { + $sql_order.=' ,o.doc_name'; + } + + if($order_2==2) + { + $sql_order.=' ,o.prepared_by'; + } + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 8, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + + // set text shadow effect + //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $table_start=''; + $table_end='
'; + + if($group_by==0) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name / Age'; + $table_head.='Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Fee Amt.'; + + $GroupSQL="select Date(o.apointment_date) as sdate,Date_Format(Date(o.apointment_date),'%d-%m-%Y') as strDate + from opd_master o where Date(o.apointment_date) between '".$minRange."' and '".$maxRange. "' + group by Date(o.apointment_date)"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='OPD Date : '.$row->strDate.'
'; + + $gwhere=" and Date(o.apointment_date)='".$row->sdate."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->PayMode.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + if($group_by==1) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Date'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Fee Amt.'; + + + $GroupSQL="select o.doc_id,doc_name + from opd_master o where Date(o.apointment_date) between '".$minRange."' and '".$maxRange. "' group by o.doc_id"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Doctor Name : Dr.'.$row->doc_name.'
'; + + $gwhere=" and doc_id='".$row->doc_id."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->App_Date.''; + $table_body.=''.$rowdata->PayMode.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + if($group_by==2) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='App. Date'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Fee Amt.'; + + $GroupSQL="select o.prepared_by + from opd_master o where Date(o.apointment_date) between'".$minRange."' and '".$maxRange. "' group by o.prepared_by"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Prepared By : '.$row->prepared_by.'
'; + + $gwhere=" and o.prepared_by='".$row->prepared_by."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->App_Date.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->PayMode.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + + if($group_by==3) + { + $table_head=''; + $table_head.='OPD ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Date'; + $table_head.='Doctor Name'; + $table_head.='Employee'; + $table_head.='Fee Amt.'; + + $GroupSQL="select o.payment_mode,m.mode_desc as 'PayMode' + from opd_master o join payment_mode m on o.payment_mode=m.id where Date(o.apointment_date) between'".$minRange."' and '".$maxRange. "' group by o.payment_mode"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Payment Mode : '.$row->PayMode.'
'; + + $gwhere=" and o.payment_mode='".$row->payment_mode."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->opd_code.''; + $table_body.=''.$rowdata->P_name.'/'.$rowdata->Age.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->App_Date.''; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->FeeAmt.''; + $table_body.=''; + $table_total_1=$table_total_1+$rowdata->FeeAmt; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('OPD_001.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + + public function report_charge_app_show($opd_date_range, + $doc_name_id,$emp_name_id,$paymode_id,$order_1,$order_2,$group_by) + { + $sql_f_all = "select i.id,i.invoice_code,p.p_fname,p.p_code,i.refer_by_other, + i.inv_date,Date_Format(i.inv_date,'%d-%m-%Y') as str_inv_date,i.invoice_status, + if(i.insurance_id>1,'Org.','Direct') as PType,i.prepared_by, + if(i.correction_amount>0,i.correction_net_amount,i.net_amount) as Amount,m.mode_desc , + group_concat(t.item_name) as test_list"; + + $sql_from=" from invoice_master i join patient_master p join payment_mode m join invoice_item t + on i.attach_id=p.id and i.attach_type=0 and i.payment_mode=m.id and i.id=t.inv_master_id"; + + $sql_where=" Where i.invoice_status>0 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + $sql_where.=" and Date(i.inv_date) between Date('".$minRange."') and Date('".$maxRange. "') "; + + if($doc_name_id>0) + { + $sql_where.=" and i.refer_by_id='".$doc_name_id."'"; + } + + if($emp_name_id>0) + { + $sql_where.=" and i.prepared_by like '%[".$emp_name_id."]' "; + } + + if($paymode_id>0) + { + $sql_where.=" and i.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by i.inv_date"; + + if($order_1==1) + { + $sql_order.=' ,i.refer_by_other'; + } + + if($order_1==2) + { + $sql_order.=' ,i.prepared_by'; + } + + if($order_1==3) + { + $sql_order.=' ,m.mode_desc'; + } + + if($order_2==1) + { + $sql_order.=' ,i.refer_by_other'; + } + + if($order_2==2) + { + $sql_order.=' ,i.prepared_by'; + } + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 8, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + + // set text shadow effect + //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $table_start=''; + $table_end='
'; + + if($group_by==0) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Inv. Amt.'; + + $GroupSQL="select Date(i.inv_date) as sdate,Date_Format(Date(i.inv_date),'%d-%m-%Y') as strDate + from invoice_master i where i.invoice_status>0 and Date(i.inv_date) between'".$minRange."' and '".$maxRange. "' + group by Date(i.inv_date)"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Invoice Date : '.$row->strDate.'
'; + + $gwhere=" and Date(i.inv_date)='".$row->sdate."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->refer_by_other.''; + $table_body.=''.$rowdata->mode_desc.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + if($group_by==1) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Employee'; + $table_head.='Amount'; + + $GroupSQL="select i.refer_by_id,refer_by_other + from invoice_master i where i.invoice_status>0 and Date(i.inv_date) between'".$minRange."' and '".$maxRange. "' group by i.refer_by_id"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Doctor Name : Dr.'.$row->refer_by_other.'
'; + + $gwhere=" and i.refer_by_id='".$row->refer_by_id."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->inv_date.''; + $table_body.=''.$rowdata->mode_desc.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + if($group_by==2) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Invoice Date'; + $table_head.='Doctor Name'; + $table_head.='Pay Mode'; + $table_head.='Amount'; + + $GroupSQL="select i.prepared_by + from opd_master i where i.invoice_status>0 and Date(i.apointment_date) between'".$minRange."' and '".$maxRange. "' group by i.prepared_by"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Prepared By : '.$row->prepared_by.'
'; + + $gwhere=" and i.prepared_by='".$row->prepared_by."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->inv_date.''; + $table_body.=''.$rowdata->refer_by_other.''; + $table_body.=''.$rowdata->mode_desc.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + + if($group_by==3) + { + $table_head=''; + $table_head.='Invoice ID'; + $table_head.='Patient Name'; + $table_head.='Patient Code'; + $table_head.='Inv.Date'; + $table_head.='Ref. Doc. Name'; + $table_head.='Employee'; + $table_head.='Amount'; + + $GroupSQL="select i.payment_mode,m.mode_desc as 'PayMode' + from invoice_master i join payment_mode m on i.payment_mode=m.id + where i.invoice_status>0 and Date(i.inv_date) between'".$minRange."' and '".$maxRange. "' group by i.payment_mode"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Payment Mode : '.$row->PayMode.'
'; + + $gwhere=" and i.payment_mode='".$row->payment_mode."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' group by i.id '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->invoice_code.''; + $table_body.=''.$rowdata->p_fname.''; + $table_body.=''.$rowdata->p_code.''; + $table_body.=''.$rowdata->inv_date.''; + $table_body.=''.$rowdata->refer_by_other.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''.$rowdata->Amount.''; + $table_body.=''; + $table_body.=''.$rowdata->test_list.''; + $table_total_1=$table_total_1+$rowdata->Amount; + } + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('INV_001.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + + public function report_ipdpayment_app_show($opd_date_range, + $doc_name_id,$emp_name_id,$paymode_id,$order_1,$order_2,$group_by) + { + $sql_f_all = "select i.id,i.ipd_code,i.ipd_status,m.p_fname,m.p_code,contact_person_Name, + i.register_date,p.pay_date,p.enter_pay_date,p.payment_id, + if(Date(p.pay_date)=date(p.enter_pay_date),p.pay_date,Concat(p.pay_date,'
',p.enter_pay_date)) as strPayDate, + if(i.ipd_status=0,'Admit','Discharged') as IPD_Status, + if(credit_debit=0,p.amount,0) as C_Amount, + if(credit_debit=1,p.amount,0) as D_Amount,p.payment_mode_desc, + doc.doc_name,doc_list,p.prepared_by "; + + $sql_from=" from ipd_payment p join ipd_master i join patient_master m join + (select l.ipd_id,group_concat(d.p_fname) as doc_name,group_concat(d.id) as doc_list from ipd_master_doc_list l + join doctor_master d on l.doc_id=d.id group by l.ipd_id ) as doc + on i.id=p.ipd_id and i.p_id=m.id and i.id=doc.ipd_id"; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + $sql_where.=" and Date(p.pay_date) between '".$minRange."' and '".$maxRange. "'"; + + if($doc_name_id>0) + { + $sql_where.=" and FIND_IN_SET('".$doc_name_id."',doc_list) "; + } + + if($emp_name_id>0) + { + $sql_where.=" and p.prepared_by like '%[".$emp_name_id."]' "; + } + + if($paymode_id>0) + { + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + + $sql_order=" Order by p.pay_date"; + + if($order_1==1) + { + $sql_order.=' ,doc.doc_name'; + } + + if($order_1==2) + { + $sql_order.=' ,p.prepared_by'; + } + + if($order_1==3) + { + $sql_order.=' ,p.payment_mode_desc'; + } + + if($order_2==1) + { + $sql_order.=' ,doc.doc_name'; + } + + if($order_2==2) + { + $sql_order.=' ,p.prepared_by'; + } + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + //$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetMargins(5, PDF_MARGIN_TOP, 0.25); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 8, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + + // set text shadow effect + //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='IPD No '; + $table_head.='Patient Name / Patient Code'; + $table_head.='Doctor Name'; + $table_head.='Pay Date'; + $table_head.='Pay Mode'; + $table_head.='Amount (Cr.)'; + $table_head.='Amount (Dr.)'; + $table_head.='Employee'; + + if($group_by==0) + { + + + $GroupSQL="select Date(p.pay_date) as sdate,Date_Format(Date(p.pay_date),'%d-%m-%Y') as strDate + from ipd_payment p join ipd_master i join patient_master m on i.id=p.ipd_id and i.p_id=m.id + where Date(p.pay_date) between'".$minRange."' and '".$maxRange. "' + group by Date(p.pay_date) "; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Payment Date : '.$row->strDate.'
'; + + $gwhere=" and Date(p.pay_date)='".$row->sdate."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.='['.$rowdata->p_code.']
'.$rowdata->p_fname.'
{'.$rowdata->contact_person_Name.'}'; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + if($group_by==1) + { + + + $GroupSQL="select doc.doc_name + from ipd_payment p join ipd_master i join patient_master m join + (select l.ipd_id,group_concat(d.p_fname) as doc_name,group_concat(d.id) as doc_list from ipd_master_doc_list l + join doctor_master d on l.doc_id=d.id group by l.ipd_id ) as doc + on i.id=p.ipd_id and i.p_id=m.id and i.id=doc.ipd_id + where Date(p.pay_date) between'".$minRange."' and '".$maxRange. "' group by doc.doc_name"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Doctor Name : Dr.'.$row->doc_name.'
'; + + $gwhere=" and doc.doc_name='".$row->doc_name."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.='['.$rowdata->p_code.']
'.$rowdata->p_fname.'
{'.$rowdata->contact_person_Name.'}'; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + if($group_by==2) + { + + + $GroupSQL="select p.prepared_by + from ipd_payment p join ipd_master i join patient_master m + on i.id=p.ipd_id and i.p_id=m.id + Where Date(p.pay_date) between'".$minRange."' and '".$maxRange. "' group by p.prepared_by"; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Prepared By : '.$row->prepared_by.'
'; + + $gwhere=" and p.prepared_by='".$row->prepared_by."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.='['.$rowdata->p_code.']
'.$rowdata->p_fname.'
{'.$rowdata->contact_person_Name.'}'; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + + if($group_by==3) + { + + $GroupSQL="select p.payment_mode,p.payment_mode_desc + from ipd_payment p join ipd_master i join patient_master m + on i.id=p.ipd_id and i.p_id=m.id + Where Date(p.pay_date) between'".$minRange."' and '".$maxRange. "' group by p.payment_mode "; + + $query = $this->db->query($GroupSQL); + $data['group_rec']= $query->result(); + + foreach($data['group_rec'] as $row) + { + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $data_show='Payment Mode : '.$row->payment_mode_desc.'
'; + + $gwhere=" and p.payment_mode='".$row->payment_mode."'"; + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->ipd_code.''; + $table_body.='['.$rowdata->p_code.']
'.$rowdata->p_fname.'
{'.$rowdata->contact_person_Name.'}'; + $table_body.=''.$rowdata->doc_name.''; + $table_body.=''.$rowdata->strPayDate.''; + $table_body.=''.$rowdata->payment_mode_desc.''; + $table_body.=''.$rowdata->C_Amount.''; + $table_body.=''.$rowdata->D_Amount.''; + $table_body.=''.$rowdata->prepared_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->C_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->D_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + } + } + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('ipd_payment_list.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + public function report_total_payment_app_show($opd_date_range,$emp_name_id,$paymode_id,$order_1) + { + $sql_f_all = "select p.id,p.payment_date,date_format(p.payment_date,'%d-%m-%Y %H:%m') as str_payment_date, + case p.payof_type when 1 then 'OPD' + when 2 then 'Charges' when 4 then 'IPD' else 'Other' end as PayType, + payof_id,p.payof_code, + if(credit_debit=0,amount,0) as Cr_Amount, + if(credit_debit=1,amount,0) as Dr_Amount, + p.remark,p.update_by,get_patientinfo(p.payof_type,payof_id) as P_Name, + case p.payment_mode when 1 then 'Cash' when 2 then 'Bank' end as Pay_Mode"; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id>0) + { + if($paymode_id==1) + { + $sql_where.=" and p.payment_mode in (1,3) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + } + + $sql_order=" Order by p.id"; + + if($order_1==1) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==2) + { + $sql_order.=' ,p.payment_mode'; + } + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + //$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetMargins(5, PDF_MARGIN_TOP, 0.25); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 9, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + + // set text shadow effect + //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='PayID '; + $table_head.='Date'; + $table_head.='Type of Payment'; + $table_head.='OPD/IPD/In. Code '; + $table_head.='Pay Mode'; + $table_head.='Amt (Cr.)'; + $table_head.='Amt (Dr.)'; + $table_head.='Remark'; + $table_head.='Employee'; + + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + //echo $sql_f_all.$sql_from.$sql_where.' '.$sql_order; + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->id.''; + $table_body.=''.$rowdata->str_payment_date.''; + $table_body.=''.$rowdata->PayType.''; + $table_body.=''.$rowdata->payof_code.'
'.$rowdata->P_Name.''; + $table_body.=''.$rowdata->Pay_Mode.''; + $table_body.=''.$rowdata->Cr_Amount.''; + $table_body.=''.$rowdata->Dr_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->Cr_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->Dr_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $Total_Amount=$table_total_1-$table_Dr_total_1; + + $data_show.='

Total Amount : '.$Total_Amount.'

'; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('Total_payment_list.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + public function report_charge_type($opd_date_range) + { + $sql_f_all = "select p.id,p.payment_date,date_format(p.payment_date,'%d-%m-%Y %H:%m') as str_payment_date, + case p.payof_type when 1 then 'OPD' + when 2 then 'Charges' when 4 then 'IPD' else 'Other' end as PayType, + payof_id,p.payof_code, + if(credit_debit=0,amount,0) as Cr_Amount, + if(credit_debit=1,amount,0) as Dr_Amount, + p.remark,p.update_by,get_patientinfo(p.payof_type,payof_id) as P_Name, + case p.payment_mode when 1 then 'Cash' when 2 then 'Bank' end as Pay_Mode"; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id>0) + { + if($paymode_id==1) + { + $sql_where.=" and p.payment_mode in (1,3) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + } + + $sql_order=" Order by p.id"; + + if($order_1==1) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==2) + { + $sql_order.=' ,p.payment_mode'; + } + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + //$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetMargins(5, PDF_MARGIN_TOP, 0.25); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 9, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + + // set text shadow effect + //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='PayID '; + $table_head.='Date'; + $table_head.='Type of Payment'; + $table_head.='OPD/IPD/In. Code '; + $table_head.='Pay Mode'; + $table_head.='Amt (Cr.)'; + $table_head.='Amt (Dr.)'; + $table_head.='Remark'; + $table_head.='Employee'; + + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_order); + $data['gsub_rec']= $query->result(); + + //echo $sql_f_all.$sql_from.$sql_where.' '.$sql_order; + + $table_body=''; + $table_total_1=0.00; + $table_Dr_total_1=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->id.''; + $table_body.=''.$rowdata->str_payment_date.''; + $table_body.=''.$rowdata->PayType.''; + $table_body.=''.$rowdata->payof_code.'
'.$rowdata->P_Name.''; + $table_body.=''.$rowdata->Pay_Mode.''; + $table_body.=''.$rowdata->Cr_Amount.''; + $table_body.=''.$rowdata->Dr_Amount.''; + $table_body.=''.$rowdata->remark.''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''; + + $table_total_1=$table_total_1+$rowdata->Cr_Amount; + $table_Dr_total_1=$table_Dr_total_1+$rowdata->Dr_Amount; + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_1.''; + $table_footer.=''.$table_Dr_total_1.''; + $table_footer.=''; + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + $Total_Amount=$table_total_1-$table_Dr_total_1; + + $data_show.='

Total Amount : '.$Total_Amount.'

'; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + $pdf->Output('Total_payment_list.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + + public function report_emp_total($opd_date_range,$emp_name_id,$paymode_id,$order_1) + { + $sql_f_all = "select p.update_by, + sum(if(p.payof_type=1,if(p.credit_debit=0,p.amount,0),0)) as OPD_Amount, + sum(if(p.payof_type=2,if(p.credit_debit=0,p.amount,0),0)) as Charge_Amount, + sum(if(p.payof_type=4,if(p.credit_debit=0,p.amount,0),0)) as IPD_Amount, + sum(if(p.credit_debit=1,p.amount,0)) as Return_Amount, + sum(if(p.credit_debit=0,p.amount,p.amount*-1)) as total_Amount "; + + $sql_from=" from payment_history p "; + + $sql_where=" Where 1=1 "; + + $sql_group_by=" group by p.update_by_id "; + + $rangeArray = explode("S",$opd_date_range); + $minRange = str_replace('T',' ',$rangeArray[0]); + $maxRange = str_replace('T',' ',$rangeArray[1]); + + if($minRange==$maxRange) + { + $sql_where.=" and Date(p.payment_date) between Date('".$minRange."') and Date('".$maxRange. "')"; + }else{ + $sql_where.=" and p.payment_date between '".$minRange."' and '".$maxRange. "'"; + } + + $data_show='

Date(YYYY-MM-DD h:m) between '.$minRange.' and '.$maxRange.'

'; + + + if($emp_name_id<>0) + { + $emp_name_id=str_replace('S',',',$emp_name_id); + + $sql_where.=" and p.update_by_id in (".$emp_name_id.")"; + } + + if($paymode_id>0) + { + if($paymode_id==1) + { + $sql_where.=" and p.payment_mode in (1,3) "; + }else{ + $sql_where.=" and p.payment_mode = '".$paymode_id."'"; + } + } + + $sql_order=" Order by p.update_by"; + + if($order_1==1) + { + $sql_order.=' ,p.update_by'; + } + + if($order_1==2) + { + $sql_order.=' ,p.payment_mode'; + } + + //echo $table_show; + // create new PDF document + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + // set document information + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('IHC:D.S.Bisht'); + $pdf->SetTitle('IHC:OPD List'); + $pdf->SetSubject('IHC:OPD List'); + $pdf->SetKeywords('IHC:OPD List, PDF, OPD, List, guide'); + + // set default header data + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING, array(0,64,255), array(0,64,128)); + $pdf->setFooterData(array(0,64,0), array(0,64,128)); + + // set header and footer fonts + $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + // set default monospaced font + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + // set margins + //$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetMargins(5, PDF_MARGIN_TOP, 0.25); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + // set auto page breaks + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + + // set image scale factor + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + // set some language-dependent strings (optional) + if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { + require_once(dirname(__FILE__).'/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + // --------------------------------------------------------- + + // set default font subsetting mode + $pdf->setFontSubsetting(true); + + // Set font + // dejavusans is a UTF-8 Unicode font, if you only need to + // print standard ASCII chars, you can use core fonts like + // helvetica or times to reduce file size. + $pdf->SetFont('dejavusans', '', 9, '', true); + + // Add a page + // This method has several options, check the source code documentation for more information. + + // set text shadow effect + //$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal')); + + $table_start=''; + $table_end='
'; + + $table_head=''; + $table_head.='User ID'; + $table_head.='OPD Amount'; + $table_head.='Charge Amount'; + $table_head.='IPD Amount'; + $table_head.='Return Amount'; + $table_head.='Total'; + $table_head.=''; + + + $table_footer=''; + + // Add a page + // This method has several options, check the source code documentation for more information. + $pdf->AddPage(); + + //echo $sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order; + + + $query = $this->db->query($sql_f_all.$sql_from.$sql_where.' '.$sql_group_by.$sql_order); + $data['gsub_rec']= $query->result(); + + + $table_body=''; + $table_total_opd=0.00; + $table_total_ipd=0.00; + $table_total_charge=0.00; + $table_total_return=0.00; + $table_total_all=0.00; + + //echo $sql_f_all.$sql_from.$sql_where.$gwhere.' '.$sql_order.'

'; + + foreach($data['gsub_rec'] as $rowdata) + { + $table_body.=''; + $table_body.=''.$rowdata->update_by.''; + $table_body.=''.$rowdata->OPD_Amount.''; + $table_body.=''.$rowdata->Charge_Amount.''; + $table_body.=''.$rowdata->IPD_Amount.''; + $table_body.=''.$rowdata->Return_Amount.''; + $table_body.=''.$rowdata->total_Amount.''; + $table_body.=''; + + + $table_total_opd=$table_total_opd+$rowdata->OPD_Amount; + $table_total_ipd=$table_total_ipd+$rowdata->IPD_Amount; + $table_total_charge=$table_total_charge+$rowdata->Charge_Amount; + $table_total_return=$table_total_return+$rowdata->Return_Amount; + $table_total_all=$table_total_all+$rowdata->total_Amount; + + } + + $table_footer=''; + $table_footer.='Total'; + $table_footer.=''.$table_total_opd.''; + $table_footer.=''.$table_total_charge.''; + $table_footer.=''.$table_total_ipd.''; + $table_footer.=''.$table_total_return.''; + $table_footer.=''.$table_total_all.''; + $table_footer.=''; + + $data_show.=$table_start.$table_head.$table_body.$table_footer.$table_end; + + //echo $data_show; + + // Set some content to print + $html = <<writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); + + + // --------------------------------------------------------- + + // Close and output PDF document + // This method has several options, check the source code documentation for more information. + + $pdf->Output('Total_payment_list.pdf', 'I'); + + //============================================================+ + // END OF FILE + //============================================================+ + } + + +} + +/* End of file c_test.php */ +/* Location: ./application/controllers/c_test.php */ \ No newline at end of file diff --git a/old_code_ci3/controllers/Room_bed.php b/old_code_ci3/controllers/Room_bed.php new file mode 100644 index 0000000..bc4aa9b --- /dev/null +++ b/old_code_ci3/controllers/Room_bed.php @@ -0,0 +1,57 @@ +load->database(); + } + + public function index() + { + $sql="SELECT b.* ,v.p_fname,v.p_relative,v.p_rname,v.doc_name,v.ipd_code,v.p_code,v.admit_type + From hc_bed_master b left JOIN v_ipd_list v ON b.bed_used_p_id=v.id"; + $query = $this->db->query($sql); + $data['bed_master']= $query->result(); + + $this->load->view('IPD/Bed_panel',$data); + } + + public function ipd_list() + { + $sql="select * from v_ipd_list where ipd_status=0"; + + $query = $this->db->query($sql); + $ipd_bed_list= $query->result(); + + + } + + public function get_admit_ipd_list(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="SELECT * + from v_ipd_list + where ipd_status=0 and + (p_fname LIKE '$q%' or p_code like '%$q' or ipd_code like '%$q') + order BY p_fname "; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['ipd_code'])).' | '.htmlentities(stripslashes($row['p_fname'])).' | '.htmlentities(stripslashes($row['str_register_date'])); + $new_row['value']=htmlentities(stripslashes($row['id'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/controllers/Setting.php b/old_code_ci3/controllers/Setting.php new file mode 100644 index 0000000..a028125 --- /dev/null +++ b/old_code_ci3/controllers/Setting.php @@ -0,0 +1,16 @@ +load->view('setting/setting_main'); + } + +} diff --git a/old_code_ci3/controllers/Stock.php b/old_code_ci3/controllers/Stock.php new file mode 100644 index 0000000..bd3b07a --- /dev/null +++ b/old_code_ci3/controllers/Stock.php @@ -0,0 +1,1250 @@ +load->view('Medical/Stock/indent_request'); + } + + public function Indent_Request_Search() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if(trim($sdata)=='') + { + $sql=" SELECT m.indent_id,m.indent_code,s.store_name, + m.request_status,m.created_date, + GROUP_CONCAT(t.product_name) AS product_list, + i.indent_id AS process_indent_id, + (case m.request_status + when 0 then 'Pending' + when 1 then 'Send To Store' + when 2 then 'Accept and Process' + when 3 then 'Processed and Verification Pending' + when 4 then concat('Send to Counter :',s.store_name) + when 5 then concat('Accept By Counter :',s.store_name) + else 'UnKnown' end) as request_status_str, + (case m.indent_type when 0 then 'Auto' when 1 then 'By Counter Store' when 2 then 'Main Store' else 'UnKnown' end) as indent_request_type_str + FROM (((med_indent_request m Left JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + JOIN store_master s ON m.store_id=s.store_id) + LEFT JOIN med_indent_process i ON m.indent_id=i.indent_id + where m.request_status >0 and m.indent_type in (0,1) + GROUP BY m.indent_id order by m.indent_id desc limit 50"; + }else{ + $sql=" SELECT m.indent_id,m.indent_code,s.store_name, + m.request_status,m.created_date, + GROUP_CONCAT(t.product_name) AS product_list, + i.indent_id AS process_indent_id, + (case m.request_status + when 0 then 'Pending' + when 1 then 'Send To Store' + when 2 then 'Accept and Process' + when 3 then 'Processed and Verification Pending' + when 4 then concat('Send to Counter :',s.store_name) + when 5 then concat('Accept By Counter :',s.store_name) + else 'UnKnown' end) as request_status_str, + (case m.indent_type when 0 then 'Auto' when 1 then 'By Counter Store' when 2 then 'Main Store' else 'UnKnown' end) as indent_request_type_str + FROM (((med_indent_request m Left JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + JOIN store_master s ON m.store_id=s.store_id) + LEFT JOIN med_indent_process i ON m.indent_id=i.indent_id + WHERE t.product_name LIKE '%".$sdata."%' OR m.indent_code LIKE '%".$sdata."' + and m.request_status >0 and m.indent_type in (0,1) + GROUP BY m.indent_id order by m.indent_id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['indent_req_list']= $query->result(); + + $this->load->view('Medical/Stock/indent_request_search_result',$data); + } + + + public function indent_request_item_store_list_view($indent_id) + { + $sql="SELECT m.*,s.store_name + from med_indent_request m JOIN store_master s ON m.store_id=s.store_id + where m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request']= $query->result(); + + $sql="SELECT t.*,p.item_name,p.formulation,p.genericname,p.packing + FROM ((med_indent_request m JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + WHERE m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request_items']= $query->result(); + + $data['indent_status_cont']=array( + 'Pending','Send to Store','Accept By Store','Processing Items','Send to Counter','Accept By Counter' + ); + + $this->load->view('Medical/Stock/indent_req_view_with_store',$data); + } + + public function indent_issue_items($indent_id) + { + $sql="SELECT m.*,s.store_name + from med_indent_request m JOIN store_master s ON m.store_id=s.store_id + where m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request']= $query->result(); + + $sql="select * from med_indent_process where indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_process']= $query->result(); + + $sql="SELECT t.*,p.item_name,p.formulation,p.genericname,p.packing + FROM ((med_indent_request m JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + WHERE m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request_items']= $query->result(); + + $data['indent_status_cont']=array( + 'Pending','Send to Store','Accept By Store','Processing Items','Send to Counter','Accept By Counter' + ); + + $this->load->view('Medical/Stock/indent_issue_items',$data); + + } + + public function indent_issue_items_view($indent_id) + { + $sql="SELECT m.*,s.store_name + from med_indent_request m JOIN store_master s ON m.store_id=s.store_id + where m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request']= $query->result(); + + $sql="select * from med_indent_process where indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_process']= $query->result(); + + $data['indent_status_cont']=array( + 'Pending','Send to Store','Accept By Store','Processing Items','Send to Counter','Accept By Counter' + ); + + $this->load->view('Medical/Stock/indent_issue_item_view',$data); + + } + + public function indent_issue_items_sub($indent_id,$indent_view=0) + { + $sql="SELECT t.*,p.item_name,p.formulation,p.genericname,p.packing ,SUM(a.qty) AS issued_qty + FROM ((med_indent_request m JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + LEFT JOIN med_indent_process_items a ON m.indent_id=a.indent_id AND t.id=a.indent_item_id + WHERE m.indent_id=".$indent_id." GROUP BY m.indent_id,t.id"; + + $query = $this->db->query($sql); + $med_indent_request_items= $query->result(); + + $srno=0; + $content=' + + + + + + + + '; + foreach($med_indent_request_items as $row) + { + $srno=$srno+1; + $content.= ''; + $content.= ''; + if($indent_view==0) + { + $content.= ''; + }else{ + $content.= '';; + } + + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + } + + $content.=' + + + + + + + +
#Item NameFormulationQty.Min QtyIssued Qty
'.$srno.''.$row->item_name.''.$row->item_name.''.$row->formulation.''.$row->request_qty.''.$row->min_requirement.''.$row->issued_qty.'
#Item NameFormulationQty.Min QtyIssued Qty
'; + echo $content; + } + + + public function indent_issue_items_stock($product_id,$indent_id,$indent_item_id) + { + $sql="SELECT s.id,s.purchase_id,s.Item_name,s.batch_no,s.expiry_date,s.tqty,i.qty as issue_item,i.store_stock_id + FROM (purchase_invoice_item s JOIN med_product_master p ON s.item_code=p.id) + LEFT JOIN med_indent_process_items i ON i.ssno=s.id + AND i.indent_id=".$indent_id." AND i.indent_item_id=".$indent_item_id." WHERE s.item_code=".$product_id; + + $query = $this->db->query($sql); + $data['stock_list']= $query->result(); + + $data['product_id']=$product_id; + $data['indent_id']=$indent_id; + $data['indent_item_id']=$indent_item_id; + + $this->load->view('Medical/Stock/indent_stock_list',$data); + + } + + public function indent_process_update_Qty() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('product_master_M'); + + + $product_id=$this->input->post('hid_product_id'); + $indent_id=$this->input->post('hid_indent_id'); + $indent_item_id=$this->input->post('hid_indent_item_id'); + + $ssno=$this->input->post('pur_item_id'); + $qty_issue=$this->input->post('qty_issue'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $sql="select * from med_indent_process where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_process= $query->result(); + + if(count($med_indent_process)<1) + { + $Pdata = array( + 'store_accept_time' => date('d-m-Y H:i:s'), + 'store_accept_by' => $user_id, + 'store_accept_by_name' => $user_name_info, + 'indent_id' => $indent_id, + 'indent_process_status' =>0, + 'verify_status'=>0, + ); + $inser_id=$this->product_master_M->insert_med_indent_process($Pdata); + } + + $Pdata = array( + 'indent_id' => $indent_id, + 'indent_item_id' => $indent_item_id, + 'product_id' => $product_id, + 'qty' => $qty_issue, + 'ssno' => $ssno + ); + + $sql="select * from med_indent_process_items + where indent_id=".$indent_id." and + indent_item_id=".$indent_item_id." + and product_id=".$product_id." and ssno=".$ssno; + $query = $this->db->query($sql); + $med_indent_process_items= $query->result(); + + //echo $sql; + + if(count($med_indent_process_items)>0) + { + $indent_process_item_id=$med_indent_process_items[0]->id; + $this->product_master_M->update_med_indent_process_items($Pdata,$indent_process_item_id); + }else{ + $inser_id=$this->product_master_M->insert_med_indent_process_items($Pdata); + } + + $rvar=array( + 'is_update_stock' =>1, + 'show_text'=>'Updated' + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + function indent_process_items_list($indent_id) + { + $sql="SELECT i.indent_id,i.id AS request_item_id,t.id AS process_item_id,i.product_name,t.ssno,p.batch_no,p.expiry_date,i.request_qty, + SUM(t.qty) AS t_qty + FROM ((med_indent_process m join med_indent_process_items t ON m.indent_id=t.indent_id) + JOIN med_indent_request_items i ON m.indent_id=i.indent_id AND i.id=t.indent_item_id) + JOIN purchase_invoice_item p ON t.ssno=p.id + where i.indent_id=".$indent_id." + GROUP BY i.indent_id,i.id,t.id WITH rollup"; + $query = $this->db->query($sql); + $med_indent_process_items= $query->result(); + + $content='
'; + + $content.="

Issued Items

"; + + $content.=' + + + + + + '; + $srno=0; + $header_name=""; + foreach($med_indent_process_items as $row) + { + if($row->indent_id=='') + { + + }elseif($row->request_item_id==''){ + + }elseif($row->process_item_id==''){ + $content.=' '; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + }else{ + if($header_name!=$row->product_name) + { + $content.=' '; + $content.= ''; + $content.= ''; + $content.= ''; + } + + $header_name=$row->product_name; + + $srno=$srno+1; + $content.=' '; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + } + } + + $content.= '
#Batch No.Expiry DateIssued Qty.
Item Name : Total Qty of '.$row->product_name.''.$row->t_qty.'
'.$row->product_name.'
'.$srno.''.$row->batch_no.''.$row->expiry_date.''.$row->t_qty.'
'; + + $content.= '
'; + $content.='
'; + $content.='
+ +
'; + $content.= '
'; + echo $content; + + } + + //indent Accept By Store + + function indent_store_accept_items_list($indent_id) + { + $sql="SELECT m.*,s.store_name + from med_indent_request m JOIN store_master s ON m.store_id=s.store_id + where m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request']= $query->result(); + + $this->load->view('Medical/Stock/indent_accept_items_list',$data); + } + + + function indent_accept_items_list($indent_id,$item_id=0) + { + $where=" i.indent_id=$indent_id"; + if($item_id>0) + { + $where.=" and i.id =$item_id"; + } + + $sql="SELECT i.indent_id,i.id AS request_item_id,t.id AS process_item_id,i.product_name, + t.ssno,p.batch_no,p.expiry_date,i.request_qty,t.store_stock_id, + SUM(t.qty) AS t_qty,r.request_status + FROM (((med_indent_process m join med_indent_process_items t ON m.indent_id=t.indent_id) + JOIN med_indent_request_items i ON m.indent_id=i.indent_id AND i.id=t.indent_item_id) + JOIN purchase_invoice_item p ON t.ssno=p.id) + JOIN med_indent_request r on i.indent_id=r.indent_id + where $where + GROUP BY i.indent_id,i.id,t.id WITH rollup"; + + $query = $this->db->query($sql); + $med_indent_process_items= $query->result(); + + $content=""; + + $content.=' + + + + + + + '; + $srno=0; + $header_name=""; + foreach($med_indent_process_items as $row) + { + if($row->indent_id=='') + { + + }elseif($row->request_item_id==''){ + + }elseif($row->process_item_id==''){ + $content.=' '; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + }else{ + if($header_name!=$row->product_name) + { + $content.=' '; + $content.= ''; + $content.= ''; + $content.= ''; + } + + $header_name=$row->product_name; + + $srno=$srno+1; + $content.=' '; + $content.= ''; + $content.= ''; + $content.= ''; + $content.= ''; + if($row->store_stock_id==0 && $row->request_status==4) + { + $content.= ''; + }else{ + $content.= ''; + } + + $content.= ''; + } + } + + $content.= '
#Batch No.Expiry DateIssued Qty.
Total Qty of '.$row->product_name.' : '.$row->t_qty.'
'.$row->product_name.'
'.$srno.''.$row->batch_no.''.$row->expiry_date.''.$row->t_qty.'
'; + + $content.= ''; + + echo $content; + + } + + + + public function indent_process_accept_Qty() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('product_master_M'); + + $indent_id=$this->input->post('indent_id'); + $process_item_id=$this->input->post('process_item_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $sql="select * from med_indent_request where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_request= $query->result(); + + $store_id=$med_indent_request[0]->store_id; + + $sql="select * from med_indent_process_items where id=".$process_item_id." and indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_process_items= $query->result(); + + if(count($med_indent_process_items)>0) + { + $sql="select * from purchase_invoice_item where id=".$med_indent_process_items[0]->ssno; + $query = $this->db->query($sql); + $purchase_invoice_item= $query->result(); + + $item_unit_qty=$med_indent_process_items[0]->qty*$purchase_invoice_item[0]->packing; + + $Pdata = array( + 'store_id' => $store_id, + 'ind_proc_item_id' => $process_item_id, + 'product_id' => $med_indent_process_items[0]->product_id, + 'ssno' => $med_indent_process_items[0]->ssno, + 'item_qty' => $med_indent_process_items[0]->qty, + 'item_unit_qty' => $item_unit_qty, + 'insert_date' => date('Y-m-d H:i:s'), + 'accept_by' => $user_id, + 'accept_by_name' => $user_name_info, + 'accept_time' => date('Y-m-d H:i:s'), + ); + + $insert_id=$this->product_master_M->insert_store_stock_items($Pdata); + + if($insert_id>0) + { + $Pdata = array( + 'store_stock_id' => $insert_id, + ); + + $insert_id=$this->product_master_M->update_med_indent_process_items($Pdata,$process_item_id); + } + } + + $rvar=array( + 'is_update_stock' =>1, + 'show_text'=>'Updated' + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + + public function indent_process_accept_Qty_all($indent_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $this->load->model('product_master_M'); + + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $sql="select * from med_indent_request where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_request= $query->result(); + + $store_id=$med_indent_request[0]->store_id; + + $sql="select * from med_indent_process_items where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_process_items= $query->result(); + + foreach($med_indent_process_items as $row) + { + $sql="select * from purchase_invoice_item where id=".$row->ssno; + $query = $this->db->query($sql); + $purchase_invoice_item= $query->result(); + + $process_item_id=$row->id; + + $item_unit_qty=$row->qty*$purchase_invoice_item[0]->packing; + + $Pdata = array( + 'store_id' => $store_id, + 'ind_proc_item_id' => $process_item_id, + 'product_id' => $row->product_id, + 'ssno' => $row->ssno, + 'item_qty' => $row->qty, + 'item_unit_qty' => $item_unit_qty, + 'insert_date' => date('Y-m-d H:i:s'), + 'accept_by' => $user_id, + 'accept_by_name' => $user_name_info, + 'accept_time' => date('Y-m-d H:i:s'), + ); + + $insert_id=$this->product_master_M->insert_store_stock_items($Pdata); + + if($insert_id>0) + { + $Pdata = array( + 'store_stock_id' => $insert_id, + ); + + $insert_id=$this->product_master_M->update_med_indent_process_items($Pdata,$process_item_id); + } + } + + $rvar=array( + 'is_update_stock' =>1, + 'show_text'=>'Updated' + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + + + //Store Indent Transfer Direct + + public function indent_counter_list() + { + $sql="select * from store_master order by store_name"; + $query = $this->db->query($sql); + $data['store_master']= $query->result(); + + $this->load->view('Medical/Stock/indent_counter_list',$data); + } + + public function Indent_counter_Search() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if(trim($sdata)=='') + { + $sql=" SELECT m.indent_id,m.indent_code,s.store_name, + m.request_status,m.created_date, + GROUP_CONCAT(t.product_name) AS product_list, + i.indent_id AS process_indent_id, + (case m.request_status + when 0 then 'Pending' + when 1 then 'Send To Store' + when 2 then 'Accept and Process' + when 3 then 'Processed and Verification Pending' + when 4 then concat('Send to Counter :',s.store_name) + when 5 then concat('Accept By Counter :',s.store_name) + else 'UnKnown' end) as request_status_str, + (case m.indent_type when 0 then 'Auto' when 1 then 'By Counter Store' when 2 then 'Main Store' else 'UnKnown' end) as indent_request_type_str + FROM (((med_indent_request m Left JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + JOIN store_master s ON m.store_id=s.store_id) + LEFT JOIN med_indent_process i ON m.indent_id=i.indent_id + where m.indent_type = 2 + GROUP BY m.indent_id order by m.indent_id desc limit 50"; + }else{ + $sql=" SELECT m.indent_id,m.indent_code,s.store_name, + m.request_status,m.created_date, + GROUP_CONCAT(t.product_name) AS product_list, + i.indent_id AS process_indent_id, + (case m.request_status + when 0 then 'Pending' + when 1 then 'Send To Store' + when 2 then 'Accept and Process' + when 3 then 'Processed and Verification Pending' + when 4 then concat('Send to Counter :',s.store_name) + when 5 then concat('Accept By Counter :',s.store_name) + else 'UnKnown' end) as request_status_str, + (case m.indent_type when 0 then 'Auto' when 1 then 'By Counter Store' when 2 then 'Main Store' else 'UnKnown' end) as indent_request_type_str + FROM (((med_indent_request m Left JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + JOIN store_master s ON m.store_id=s.store_id) + LEFT JOIN med_indent_process i ON m.indent_id=i.indent_id + WHERE t.product_name LIKE '%".$sdata."%' OR m.indent_code LIKE '%".$sdata."' + and m.indent_type = 2 + GROUP BY m.indent_id order by m.indent_id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['indent_req_list']= $query->result(); + + $this->load->view('Medical/Stock/indent_counter_search_result',$data); + } + + public function Create_Indent_counter($store_id=3) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + + $sql="SELECT m.indent_id,COUNT(t.id) AS No_item + from med_indent_request m LEFT join med_indent_request_items t ON m.indent_id=t.id + where store_id='".$store_id."' and indent_type <>2 + GROUP BY m.indent_id having COUNT(t.id)=0"; + $query = $this->db->query($sql); + $pending_nil_indent= $query->result(); + + $user_update_log='Indent Create By '.$user_name_info.'.'; + + $Udata = array( + 'store_id'=> $store_id, + 'indent_type'=> '2', + 'created_date'=> date('Y-m-d H:i:s'), + 'request_status'=>'0', + 'request_status_log'=>$user_update_log, + ); + + $this->load->model('product_master_M'); + + if(count($pending_nil_indent)>0) + { + $this->product_master_M->update_med_indent_request($Udata,$pending_nil_indent[0]->indent_id); + $inser_id=$pending_nil_indent[0]->indent_id; + }else{ + $inser_id=$this->product_master_M->insert_med_indent_request($Udata); + } + + $send_msg="Added Successfully"; + + if($inser_id>0) + { + redirect('Stock/Indent_counter_Edit/'.$inser_id); + }else{ + echo $send_msg; + } + + } + + public function Indent_counter_Edit($indent_id) + { + $sql="SELECT m.*,s.store_name + from med_indent_request m Left JOIN store_master s ON m.store_id=s.store_id + where m.indent_id=".$indent_id; + + $query = $this->db->query($sql); + $data['med_indent_request']= $query->result(); + + $sql="SELECT t.*,p.item_name,p.formulation,p.genericname,p.packing + FROM ((med_indent_request m JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + WHERE m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request_items']= $query->result(); + + $data['indent_status_cont']=array( + 'Pending','Send to Store','Accept By Store','Processing Items','Send to Counter','Accept By Counter' + ); + + $this->load->view('Medical/Stock/indent_counter_edit',$data); + } + + public function get_product_master(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $where_str=" i.item_name like '".$q."%'"; + + if(strlen($q)>3) + { + $where_str=" or batch_no like '".$q."%'"; + } + + $sql="SELECT i.Item_name,i.tqty,i.id,i.item_code,i.batch_no,date_format(p.date_of_invoice,'%d-%m-%Y') as purchase_date, + date_format(i.expiry_date,'%m-%Y') AS exp_date ,m.formulation,i.mrp,m.packing, + (i.tqty-sum(COALESCE(s.item_qty,0))) as Pending_stock_invoice + FROM ((purchase_invoice_item i JOIN purchase_invoice p ON i.purchase_id=p.id) + left JOIN store_stock s ON i.id=s.ssno ) + JOIN med_product_master m ON i.item_code=m.id + WHERE $where_str + GROUP BY i.item_code,i.id + HAVING (i.tqty-sum(COALESCE(s.item_qty,0)))>0 + ORDER BY i.Item_name,i.id "; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['Item_name'])).' | '.htmlentities(stripslashes($row['batch_no'])).' | '.htmlentities(stripslashes($row['formulation'])).' | '.htmlentities(stripslashes($row['exp_date'])); + $new_row['value']=htmlentities(stripslashes($row['Item_name'])).' | '.htmlentities(stripslashes($row['formulation'])); + //$new_row['value']=htmlentities(stripslashes($row['itemname'])); + + $new_row['l_item_code']=htmlentities(stripslashes($row['item_code'])); + $new_row['l_item_ssno']=htmlentities(stripslashes($row['id'])); + $new_row['l_item_qty']=htmlentities(stripslashes($row['Pending_stock_invoice'])); + $new_row['l_packing']=htmlentities(stripslashes($row['packing'])); + $new_row['l_itemname']=htmlentities(stripslashes($row['Item_name'])).' | '.htmlentities(stripslashes($row['formulation'])); + + $new_row['l_batch_mrp_exp']=htmlentities(stripslashes($row['batch_no'])).' / '.htmlentities(stripslashes($row['mrp'])).' / '.htmlentities(stripslashes($row['exp_date'])); + + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + }else{ + $new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + echo json_encode($row_set); + } + + }else{ + echo 'No Data'; + } + } + + public function Indent_product_stock($product_id) + { + $sql="SELECT i.Item_name,i.qty,i.id,i.item_code,i.batch_no,p.date_of_invoice, + date_format(i.expiry_date,'%m-%Y') AS exp_date , + (i.qty-sum(COALESCE(s.item_qty,0))) as Pending_stock_invoice + FROM (purchase_invoice_item i JOIN purchase_invoice p ON i.purchase_id=p.id) + left JOIN store_stock s ON i.id=s.ssno + WHERE i.item_code=$product_id + GROUP BY i.item_code,i.id + HAVING (i.qty-sum(COALESCE(s.item_qty,0)))>0 + ORDER BY i.Item_name,i.id "; + $query = $this->db->query($sql); + $data['product_store']= $query->result(); + + $this->load->view('Medical/Stock/indent_counter_edit_stock_list',$data); + } + + public function indent_request_item_list($indent_id) + { + $sql="SELECT m.*,s.store_name + from med_indent_request m JOIN store_master s ON m.store_id=s.store_id + where m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request']= $query->result(); + + $sql="SELECT t.*,p.item_name,p.formulation,p.genericname,p.packing + FROM ((med_indent_request m JOIN med_indent_request_items t ON m.indent_id=t.indent_id) + JOIN med_product_master p ON t.product_id=p.id) + WHERE m.indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['med_indent_request_items']= $query->result(); + + $this->load->view('Medical/Stock/indent_counter_item_list',$data); + + } + + public function indent_update_item($indent_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $sql="select * from med_indent_request where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_request= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $FormRules = array( + array( + 'field' => 'input_item_name', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[30]' + ), + + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $indent_id=$this->input->post('indent_id'); + $indent_item_id=$this->input->post('med_indent_request_items_id'); + + $this->load->model('product_master_M'); + + $Pdata = array( + 'indent_id' => $indent_id, + 'product_id' => $this->input->post('product_id'), + 'product_name' => $this->input->post('input_item_name'), + 'request_qty' => $this->input->post('input_Qty'), + 'cat' => '1', + 'insert_by' => $user_name_info, + ); + + $show_text=''; + + $is_update_stock=0; + + if($indent_item_id<1) + { + $is_update_stock=$this->product_master_M->insert_med_indent_request_items($Pdata); + }else{ + $is_update_stock=$this->product_master_M->update_med_indent_request_items($Pdata,$indent_item_id); + } + + if($is_update_stock>0) + { + $send_msg="Updated"; + }else{ + $send_msg="Error : Update in Indent Request Table"; + } + + if($is_update_stock>0) + { + $show_text=Show_Alert('success','Updated',$send_msg); + }else{ + $show_text=Show_Alert('danger','Error',$send_msg); + } + + $rvar=array( + 'is_update_stock' =>$is_update_stock, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else + { + $send_msg=validation_errors(); + $rvar=array( + 'is_update_stock' =>0, + 'show_text'=>Show_Alert('danger','Error',$send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + + public function Transfer_invoice_to_counter($inv_id,$store_id) { + $this->load->model('product_master_M'); + + $sql="SELECT COUNT(*) AS no_record + FROM (purchase_invoice p JOIN purchase_invoice_item i ON p.id=i.purchase_id) + WHERE p.id=$inv_id"; + $query = $this->db->query($sql); + $sql_result= $query->result(); + + $msg=""; + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + if(count($sql_result)>0) + { + $no_record=$sql_result[0]->no_record; + if($no_record>0) + { + $sql="SELECT (SUM(i.qty+COALESCE(i.qty_free,0))-sum(COALESCE(s.item_qty,0))) as Pending_stock_invoice + FROM (purchase_invoice_item i left JOIN store_stock s ON i.id=s.ssno) + WHERE i.purchase_id=$inv_id + GROUP BY i.purchase_id"; + $query = $this->db->query($sql); + $sql_result= $query->result(); + + if(count($sql_result)>0) + { + $Pending_stock_invoice=$sql_result[0]->Pending_stock_invoice; + + if($Pending_stock_invoice>0) + { + //Check Pending Indent: Create on Direct Purchase Invoice + + /* + $sql="SELECT m.indent_id,COUNT(t.id) AS No_item + from med_indent_request m LEFT join med_indent_request_items t ON m.indent_id=t.id + where store_id='".$store_id."' and indent_type=2 + GROUP BY m.indent_id having COUNT(t.id)=0"; + $query = $this->db->query($sql); + $pending_nil_indent= $query->result(); + + echo $sql; + + */ + + $user_update_log='Indent Create By '.$user_name_info.'.'; + + $Udata = array( + 'store_id'=> $store_id, + 'indent_type'=> '2', + 'created_date'=> date('Y-m-d H:i:s'), + 'request_status'=>'3', + 'request_status_log'=>$user_update_log, + ); + + /* + + if(count($pending_nil_indent)>0) + { + $this->product_master_M->update_med_indent_request($Udata,$pending_nil_indent[0]->indent_id); + $indent_id=$pending_nil_indent[0]->indent_id; + }else{ + $indent_id=$this->product_master_M->insert_med_indent_request($Udata); + } + + */ + + $indent_id=$this->product_master_M->insert_med_indent_request($Udata); + + + //Indent Process Create here + $Pdata = array( + 'store_accept_time' => date('d-m-Y H:i:s'), + 'store_accept_by' => $user_id, + 'store_accept_by_name' => $user_name_info, + 'indent_id' => $indent_id, + 'remark' => $user_update_log, + ); + + $process_indent_id=$this->product_master_M->insert_med_indent_process($Pdata); + + // Get Purchase Invoice List + $sql="SELECT i.Item_name,i.qty,i.id,i.item_code, + sum((i.qty+COALESCE(i.qty_free,0))-sum(COALESCE(s.item_qty,0))) as Pending_stock_invoice + FROM (purchase_invoice_item i left JOIN store_stock s ON i.id=s.ssno) + WHERE i.purchase_id=$inv_id + GROUP BY i.purchase_id,i.item_code"; + $query = $this->db->query($sql); + $sql_result= $query->result(); + + foreach($sql_result as $row) + { + //Entry in indent_request_list + + $Udata = array( + 'indent_id'=> $indent_id, + 'product_id'=> $row->item_code, + 'product_name'=> $row->Item_name, + 'request_qty'=> $row->Pending_stock_invoice, + 'datetime_before'=> date('Y-m-d H:i:s'), + 'insert_by'=> $user_id, + 'update_by'=> $user_id, + ); + $indent_item_id=$this->product_master_M->insert_med_indent_request_items($Udata); + + //Entry in indent_process_items + + $Pdata = array( + 'indent_id' => $indent_id, + 'indent_item_id' => $indent_item_id, + 'product_id' => $row->item_code, + 'qty' =>$row->Pending_stock_invoice, + 'ssno' => $row->id, + ); + + $inser_id=$this->product_master_M->insert_med_indent_process_items($Pdata); + + } + + $msg="Indent Created and Process"; + + /* Code For Indent Verified and Send to Store And Accept By Store . + Remove or Comment , if Indent Verification Step Require + */ + + /* $indent_id Already Define */ + $request_status = '4'; + + $sql="select * from med_indent_request where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_request= $query->result(); + + // 0 Pending , 1 For Send,2 Accept and Process,3 Processed and Verification Pending,4 Verifired & Send by Main Store,5 Accept By Counter + $indent_status_cont=array( + 'Pending','Send to Store','Accept By Store','Processing Items','Send to Counter','Accept By Counter' + ); + + $request_status_log=""; + + if(count($med_indent_request)>0) + { + $request_status_log.=$med_indent_request[0]->request_status_log; + } + + $request_status_log.='Status Change Direct to Store Wih Verification By '.$indent_status_cont[$request_status].' By '.$user_name_info; + + $Pdata = array( + 'request_status' => $request_status, + 'last_update_time' => date('Y-m-d H:i:s'), + 'request_status_log'=>$request_status_log, + ); + + if(count($med_indent_request)>0){ + $is_update_stock=$this->product_master_M->update_med_indent_request($Pdata,$indent_id); + $msg= $indent_status_cont[$request_status]; + }else{ + $msg= 'Indent Record Not Found'; + } + + /* Indent Accept by Counter Auto */ + + redirect('Stock/indent_process_accept_Qty_all/'.indent_id); + + /* Code End Here */ + + + }else{ + $msg="No Items found in Purchase Item"; + } + + }else{ + $msg="No Items found in Purchase Item"; + } + + }else{ + $msg="No Items found in Purchase Item"; + } + + }else{ + $msg="No Invoice Found"; + } + + echo $msg; + } + + public function indent_request_item_delete($indent_id,$indent_item_id_del) + { + $this->load->model('product_master_M'); + + $sql="SELECT r.id,r.product_name,s.ssno,s.store_id + FROM (med_indent_request_items r JOIN med_indent_process_items p ON r.id=p.indent_item_id) + LEFT JOIN store_stock s ON s.ind_proc_item_id=p.id + WHERE r.id=$indent_item_id_del"; + $query = $this->db->query($sql); + $result = $query->result(); + + $rvar=array( + 'is_delete' =>0, + 'show_text'=>'Nothing Happen', + ); + + if(count($result)>0) + { + $ssno=$result[0]->ssno; + + if($ssno=='') + { + $is_delete=$this->product_master_M->delete_med_indent_request_item($indent_id,$indent_item_id_del); + + $rvar=array( + 'is_delete' =>1, + 'show_text'=>'Removed Successfully', + ); + }else{ + $rvar=array( + 'is_delete' =>0, + 'show_text'=>'After Indent Process, Cannot Delete', + ); + } + }else{ + $rvar=array( + 'is_delete' =>0, + 'show_text'=>'No Record Found', + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function indent_update_item_direct($indent_id) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $sql="select * from med_indent_request where indent_id=".$indent_id; + $query = $this->db->query($sql); + $med_indent_request= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $FormRules = array( + array( + 'field' => 'input_add_qty', + 'label' => 'Product Name', + 'rules' => 'required|numeric|greater_than[0]', + ), + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $indent_id=$this->input->post('indent_id'); + $product_id=$this->input->post('product_id'); + $product_name=$this->input->post('product_name'); + $add_qty=$this->input->post('input_add_qty'); + $inv_ssno=$this->input->post('inv_ssno'); + $indent_item_id=$this->input->post('med_indent_request_items_id'); + + $this->load->model('product_master_M'); + + #Check indent Process + $sql="select indent_process_id + from med_indent_process where indent_id=$indent_id"; + $query = $this->db->query($sql); + $sql_result= $query->result(); + + $user_update_log='ADD By :'.$user_name_info; + + if(count($sql_result)==0) + { + $Pdata = array( + 'store_accept_time' => date('d-m-Y H:i:s'), + 'store_accept_by' => $user_id, + 'store_accept_by_name' => $user_name_info, + 'indent_id' => $indent_id, + 'remark' => $user_update_log, + ); + + $process_indent_id=$this->product_master_M->insert_med_indent_process($Pdata); + } + + $Udata = array( + 'indent_id'=> $indent_id, + 'product_id'=> $product_id, + 'product_name'=> $product_name, + 'request_qty'=> $add_qty, + 'datetime_before'=> date('Y-m-d H:i:s'), + 'insert_by'=> $user_id, + 'update_by'=> $user_id, + ); + + if($indent_item_id>0) + { + $this->product_master_M->update_med_indent_request_items($Udata,$indent_item_id); + }else{ + $indent_item_id=$this->product_master_M->insert_med_indent_request_items($Udata); + } + + $Pdata = array( + 'indent_id' => $indent_id, + 'indent_item_id' => $indent_item_id, + 'product_id' => $product_id, + 'qty' =>$add_qty, + 'ssno' => $inv_ssno, + ); + + $sql="select id + from med_indent_process_items + where indent_id=$indent_id and indent_item_id=$indent_item_id and ssno=$inv_ssno"; + $query = $this->db->query($sql); + $sql_result= $query->result(); + + if(count($sql_result)>0) + { + $med_indent_process_items_id=$sql_result[0]->id; + $this->product_master_M->update_med_indent_process_items($Pdata,$med_indent_process_items_id); + }else{ + $med_indent_process_items_id=$this->product_master_M->insert_med_indent_process_items($Pdata); + } + + $show_text='Update Done'; + + $is_update_stock=1; + + $rvar=array( + 'is_update_stock' =>$is_update_stock, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + else + { + $send_msg=validation_errors(); + $rvar=array( + 'is_update_stock' =>0, + 'show_text'=>Show_Alert('danger','Error',$send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Storestock.php b/old_code_ci3/controllers/Storestock.php new file mode 100644 index 0000000..f110ed5 --- /dev/null +++ b/old_code_ci3/controllers/Storestock.php @@ -0,0 +1,2126 @@ +load->model('Stock_M'); + $this->load->model('Master_M'); + + } + + public function index() + { + + $this->load->view('Storestock/Dashboard'); + } + + public function Indent_List() + { + $this->load->view('Storestock/Draft_indent'); + } + + //Product Master + public function Product_search() + { + $sdata=$this->input->post('txtsearch'); + + $sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if(trim($sdata)=='') + { + $sql="select * from med_store_product_master order by id desc limit 100"; + }else{ + $sql="select * from med_store_product_master + where (item_name LIKE '%".$sdata."%' + OR genericname LIKE '%".$sdata."%' + OR id = '".$sdata."')"; + } + + $query = $this->db->query($sql); + $data['product_list']= $query->result(); + + $this->load->view('Medical/Purchase/product_search_result',$data); + } + + public function Product_edit($Product_id) + { + $sql="Select * from med_store_product_master where id=".$Product_id; + $query = $this->db->query($sql); + $data['product_data']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $this->load->view('Medical/Purchase/product_edit',$data); + } + + public function Product_delete($Product_id) + { + $sql="Select count(*) as no_rec from inv_med_item where item_code=".$Product_id; + $query = $this->db->query($sql); + $product_sale_data= $query->result(); + + $sql="Select count(*) as no_rec from purchase_invoice_item where item_code=".$Product_id; + $query = $this->db->query($sql); + $product_purchase_data= $query->result(); + + $is_delete_master=0; + + $data_show=""; + + if($product_sale_data[0]->no_rec>0 || $product_purchase_data[0]->no_rec>0) + { + if($product_sale_data[0]->no_rec>0){ + $data_show.="

This Product in Sale Invoice, So cann't Delete

"; + } + + if($product_purchase_data[0]->no_rec>0){ + $data_show.="

This Product in Purchase Invoice, So cann't Delete

"; + } + + }else{ + + $this->load->model('product_master_M'); + $is_delete_master=$this->product_master_M->delete_master($Product_id); + + if($is_delete_master==0) + { + $data_show.="

Some Error on Delete this product

"; + }else{ + $data_show.="

Deleted

"; + } + + } + + echo $data_show; + + + } + + public function NewProduct() + { + $sql="Select * from med_company order by company_name"; + $query = $this->db->query($sql); + $data['med_company']= $query->result(); + + $sql="Select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation']= $query->result(); + + $this->load->view('Medical/Purchase/product_new',$data); + } + + + + + //End Product Master + + public function getIndentTable() + { + //Single Store Remove Store ID feild + + $requestData= $_REQUEST; + + $columns = array( + // datatable column index => database column name + 0 => 'indent_code', + 1 => 'issued_name', + 2=> 'indent_date_str', + 3=> 'id', + ); + + // getting total number records without any search + $sql_f_all = "SELECT m.id,m.indent_code,m.issued_name,m.indent_date,DATE_FORMAT(m.indent_date,'%d-%m-%Y') as indent_date_str "; + + $sql_count="Select count(*) as no_rec "; + + $sql_from=" from invoice_stock_master m"; + + //$total_sql=$sql_count.$sql_from; + $total_sql="Select count(*) as no_rec from invoice_stock_master m"; + + $query = $this->db->query($total_sql); + $data['total_rec']= $query->result(); + $totalData=$data['total_rec'][0]->no_rec; + + $totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + + $sql_where=" WHERE 1=1 "; + + $sql_where_flag=0; + + // getting records as per search parameters + if( !empty($requestData['columns'][0]['search']['value']) ){ //indent_code + $sql_where.=" AND indent_code LIKE '%".$requestData['columns'][0]['search']['value']."' "; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][1]['search']['value']) ){ //issued_name + $stext=$requestData['columns'][1]['search']['value']; + $sql_where.=" AND (issued_name LIKE '%".$stext."' )"; + $sql_where_flag=1; + } + + if( !empty($requestData['columns'][2]['search']['value']) ){ //indent_date + $stext=$requestData['columns'][2]['search']['value']; + $sql_where.=" AND (indent_date = '".$stext."' )"; + $sql_where_flag=1; + } + + $total_filer_sql=$sql_count.$sql_from.$sql_where; + + $query = $this->db->query($total_filer_sql); + $data['total_rec_filter']= $query->result();// when there is a search parameter then we have to modify total number filtered rows as per search result. + $totalFiltered=$data['total_rec_filter'][0]->no_rec; + + $sql_order=" ORDER BY id desc,". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + + $Result_sql=$sql_f_all.$sql_from.$sql_where.$sql_order; + + $query = $this->db->query($Result_sql); + $rdata= $query->result_array(); + + //$totalFiltered=count($rdata); + + $output = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => array(), + "sql" => $Result_sql + ); + + foreach($rdata as $aRow) + { + $row = array(); + + foreach($columns as $col) + { + $row[] = $aRow[$col]; + } + + $output['data'][] = $row; + } + + echo json_encode($output); // send data as json format + + } + + public function new_indent() + { + $sql="select * from location_master "; + $query = $this->db->query($sql); + $data['location_master']= $query->result(); + + $sql="select * from employee_master "; + $query = $this->db->query($sql); + $data['employee_master']= $query->result(); + + $this->load->view('Storestock/new_indent',$data); + } + + public function Indent_create($location_type) + { + + $date_indent=$this->input->post('date_indent'); + $loc_id=$this->input->post('loc_id'); + + $issued_name=""; + + if($location_type==1){ + $sql="select * from location_master where l_id=$loc_id "; + $query = $this->db->query($sql); + $location_master= $query->result(); + + if(count($location_master)>0){ + $issued_name=$location_master[0]->loc_name; + } + + }elseif($location_type==2){ + $sql="select * from employee_master where emp_id=$loc_id "; + $query = $this->db->query($sql); + $employee_master= $query->result(); + + if(count($employee_master)>0){ + $issued_name=$employee_master[0]->emp_name.' ['.$employee_master[0]->emp_code.']'; + } + + } + + $data['invoice_stock_master'] = array( + 'indent_date' => str_to_MysqlDate($date_indent), + 'location_type' => $location_type, + 'location_id' => $loc_id, + 'issued_name' => $issued_name, + ); + + $inser_id=$this->Stock_M->insert_indent($data['invoice_stock_master']); + + redirect('Storestock/Indent_show/'.$inser_id); + + } + + public function Indent_show($indent_id) + { + + $sql="select * from invoice_stock_master where id=$indent_id "; + $query = $this->db->query($sql); + $data['invoice_stock_master']= $query->result(); + + $sql="SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_stock_item i JOIN purchase_invoice_item_stock p ON i.item_code=p.item_code AND p.remove_item=0 ) + where indent_id=".$indent_id." GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_stock_item']= $query->result(); + + $sql="select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST, + sum(SGST) as TSGST + from inv_stock_item where indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $data['content']=$this->load->view('Storestock/indent_item_list',$data,true); + + $this->load->view('Storestock/indent_edit',$data); + + } + + public function Indent_Items_list($indent_id) + { + $sql="select * from inv_stock_item where indent_id=$indent_id Order by id"; + $query = $this->db->query($sql); + $data['inv_stock_item']= $query->result(); + + $sql="select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST, + sum(SGST) as TSGST + from inv_stock_item where indent_id=".$indent_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + + $content=$this->load->view('Storestock/indent_item_list',$data,true); + + echo $content; + } + + + // Purchase Stock + + public function Purchase() + { + $this->load->view('Storestock/Purchase/supplier_list'); + } + + public function PurchaseMasterEdit($inv_id) + { + $sql="select * from stock_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $sql="select p.*,s.name_supplier from purchase_invoice_stock p join stock_supplier s on p.sid=s.sid where p.id=".$inv_id; + $query = $this->db->query($sql); + $data['inv_master_data']= $query->result(); + + $sql="select * from purchase_invoice_item_stock where purchase_id='".$inv_id."' "; + $query = $this->db->query($sql); + $data['purchase_item']= $query->result(); + + $this->load->view('Storestock/Purchase/purchase_invoice_master_edit',$data); + + } + + + public function UpdatePurchase() + { + $rec_id=$this->input->post('hid_purchaseid'); + $sid=$this->input->post('input_supplier'); + $invoice_code=$this->input->post('input_invoicecode'); + $d_invoice=$this->input->post('datepicker_invoice'); + $ischallan=$this->input->post('cbo_billtype'); + + $Udata = array( + 'sid'=> $sid, + 'date_of_invoice'=> str_to_MysqlDate($d_invoice), + 'Invoice_no'=> $invoice_code, + 'ischallan'=>$ischallan + ); + + $update_id=$this->Stock_M->update_purchase($Udata,$rec_id); + + $rvar=array( + 'insertid' =>1, + 'show_text'=>'Data Update' + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function UpdatePurchaseInvoiceStatus($purchase_inv_id,$inv_status) + { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $Udata = array( + 'inv_status'=> $inv_status, + 'inv_status_update_by'=> $user_name_info, + ); + + $update_id=$this->Stock_M->update_purchase($Udata,$purchase_inv_id); + + redirect('Storestock/PurchaseMasterEdit/'.$purchase_inv_id); + + } + + public function PurchaseNew() + { + $sql="select * from stock_supplier where active=1 order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $this->load->view('Storestock/Purchase/new_purchase_invoice',$data); + } + + public function SupplierList() + { + $sql="select * from stock_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $this->load->view('Storestock/Purchase/supplier_master',$data); + } + + public function PurchaseInvoice() + { + $sdata=trim($this->input->post('txtsearch')); + + //$sdata = preg_replace('/[^A-Za-z0-9_ \-]/', '', $sdata); + + if(trim($sdata)=='') + { + $sql="select p.id,p.Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice,p.sid,s.name_supplier, + s.short_name,s.gst_no, + p.T_Net_Amount as tamount,p.ischallan + from (purchase_invoice_stock p join stock_supplier s on p.sid=s.sid) + + group by p.id + order by p.id desc limit 50"; + }else{ + + $numric_condition=""; + + if(is_numeric($sdata)) + { + $numric_condition=" OR p.Invoice_no=".$sdata ; + } + + $sql="select p.id,p.Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice, + p.sid,s.name_supplier,s.short_name,s.gst_no, + p.T_Net_Amount as tamount,p.ischallan + from (purchase_invoice_stock p join stock_supplier s on p.sid=s.sid) + where (p.Invoice_no LIKE '%".$sdata."%' ".$numric_condition." ) + group by p.id order by p.id desc limit 50"; + } + + $query = $this->db->query($sql); + $data['purchase_list']= $query->result(); + + $this->load->view('Storestock/Purchase/purchase_supp_list',$data); + } + + public function purchase_invoice_item_list_old($item_code) + { + $sql="SELECT s.name_supplier, date_format(p.date_of_invoice,'%d-%m-%Y') as date_of_invoice_str, + i.Item_name,i.packing,i.purchase_price,i.qty,i.qty_free,i.mrp + FROM (purchase_invoice_stock p JOIN purchase_invoice_item_stock i ON p.id=i.purchase_id) + JOIN med_supplier s ON p.sid=s.sid + WHERE i.item_code=$item_code ORDER BY i.id DESC LIMIT 5 "; + $query = $this->db->query($sql); + $data['purchase_item_old']= $query->result(); + + $this->load->view('Storestock/Purchase/purchase_item_old',$data); + + } + + public function print_purchase($inv_id) + { + $sql="select * from stock_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $sql="select p.*,s.name_supplier from purchase_invoice_stock p join stock_supplier s on p.sid=s.sid where p.id=".$inv_id; + $query = $this->db->query($sql); + $data['inv_master_data']= $query->result(); + + $sql="select * from purchase_invoice_item_stock where purchase_id='".$inv_id."' "; + $query = $this->db->query($sql); + $data['purchase_item']= $query->result(); + + $content = $this->load->view('Storestock/Purchase/purchase_invoice_item_print', $data, true); + + //load mPDF library + + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(H_Name); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Return_Invoice-'.$inv_id."-".date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //echo $content; + + $this->m_pdf->pdf->debug = true; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output("TEST.pdf","I"); + } + + public function PurchaseInvoiceEdit($inv_id) + { + $sql="select p.id,p.Invoice_no,p.date_of_invoice,date_format(p.date_of_invoice,'%d/%m/%Y') as str_date_of_invoice, + p.sid,s.name_supplier,s.short_name,s.gst_no,p.inv_status,p.ischallan + from purchase_invoice_stock p join stock_supplier s on p.sid=s.sid + where p.id=".$inv_id; + $query = $this->db->query($sql); + $data['purchase_invoice']= $query->result(); + + $sql="select * from purchase_invoice_item_stock where purchase_id=".$inv_id; + $query = $this->db->query($sql); + $data['purchase_invoice_item']= $query->result(); + + $sql="select * from med_gst_per "; + $query = $this->db->query($sql); + $data['med_gst_per']= $query->result(); + + $this->load->view('Storestock/Purchase/purchase_invoice_edit',$data); + } + + public function purchase_update_stock($inv_id,$return_stock=0) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $sql="select * from purchase_invoice_stock where id=".$inv_id; + $query = $this->db->query($sql); + $purchase_invoice= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + $FormRules = array( + array( + 'field' => 'input_product_code', + 'label' => 'Not Found in Database', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_drug_hid', + 'label' => 'Product Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_product_mrp', + 'label' => 'Product MRP', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_selling_price', + 'label' => 'Selling Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_Qty', + 'label' => 'Product Qty', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_package', + 'label' => 'Package', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_HSNCODE', + 'label' => 'HSNCODE', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_CGST', + 'label' => 'CGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_SGST', + 'label' => 'SGST', + 'rules' => 'required|min_length[1]|max_length[10]' + ), + array( + 'field' => 'input_purchase_price', + 'label' => 'Purchase Price', + 'rules' => 'required|min_length[1]|max_length[10]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $item_code=$this->input->post('input_product_code'); + $item_id=$this->input->post('invoice_item_id'); + + $datepicker_doe_month=$this->input->post('datepicker_doe_month'); + $datepicker_doe_year=$this->input->post('datepicker_doe_year'); + + $datepicker_doe="20".$datepicker_doe_year."-".$datepicker_doe_month."-01"; + + $this->load->model('Medical_M'); + + $Pdata = array( + 'purchase_id' => $inv_id, + 'item_code' => $item_code, + 'item_name' => $this->input->post('input_drug_hid'), + 'packing' => $this->input->post('input_package'), + 'batch_no' => $this->input->post('input_batch_code'), + 'purchase_price' => $this->input->post('input_purchase_price'), + 'expiry_date' => $datepicker_doe, + 'mrp' => $this->input->post('input_product_mrp'), + + 'qty' => $this->input->post('input_Qty'), + 'qty_free' => $this->input->post('input_Qty_Free'), + + 'discount' => $this->input->post('input_disc_price'), + + 'CGST_per' => $this->input->post('input_CGST'), + 'SGST_per' => $this->input->post('input_SGST'), + + 'HSNCODE' => $this->input->post('input_HSNCODE'), + + 'cold_storage' => $this->input->post('input_storage'), + 'shelf_no' => $this->input->post('input_shelf_no'), + 'rack_no' => $this->input->post('input_rack_no'), + 'stock_date' => $purchase_invoice[0]->date_of_invoice, + + 'selling_price' => $this->input->post('input_selling_price'), + + 'sch_disc_amt' => $this->input->post('input_sch_amount'), + 'sch_disc_per' => $this->input->post('input_sch_disc'), + + 'insert_by' => $user_name_info, + + 'item_return' => $return_stock + ); + + $show_text=''; + + $is_update_stock=0; + + $send_msg=""; + + if($item_id<1) + { + $is_update_stock=$this->Stock_M->insert_purchase_item($Pdata); + $send_msg="Added"; + }else{ + $sql="select * from purchase_invoice_item_stock where id='$item_id' "; + $query = $this->db->query($sql); + $drug_item= $query->result(); + + if(count($drug_item)>0){ + $tot_sale_qty=$drug_item[0]->total_sale_unit; + + $qty = $this->input->post('input_Qty'); + $qty_free= $this->input->post('input_Qty_Free'); + + $packing=$this->input->post('input_package'); + + $tot_qty=($qty+$qty_free)*$packing; + + if($tot_sale_qty<=$tot_qty) + { + $is_update_stock=$this->Stock_M->update_purchase_item($Pdata,$item_id); + if($is_update_stock>0) + { + $send_msg="Updated"; + }else{ + $send_msg="Error : Update in Stock Table"; + } + }else{ + $send_msg="Error : Update Qty is Less then saled Qty :".$tot_qty." / Saled :".$tot_sale_qty; + + //Update While Qty in Minus + + $is_update_stock=$this->Stock_M->update_purchase_item($Pdata,$item_id); + if($is_update_stock>0) + { + $send_msg="Updated : But Error : Update Qty is Less then saled Qty :".$tot_qty." / Saled :".$tot_sale_qty; + }else{ + $send_msg="Error : Update in Stock Table"; + } + + } + + }else{ + $send_msg="Error : Record Not Found in Stock Table"; + } + } + + $rvar=array( + 'is_update_stock' =>$is_update_stock, + 'product_code' => $item_code, + 'show_text'=>$send_msg + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else + { + $send_msg=validation_errors(); + $rvar=array( + 'is_update_stock' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function purchase_invoice_item_list($inv_id) + { + $sql="select *,date_format(expiry_date,'%m/%y') as exp_date_str from purchase_invoice_item_stock where purchase_id='".$inv_id."' "; + $query = $this->db->query($sql); + $data['purchase_item']= $query->result(); + + $sql="select * from purchase_invoice_stock where id='".$inv_id."' "; + $query = $this->db->query($sql); + $data['purchase_invoice']= $query->result(); + + + $this->load->view('Storestock/Purchase/purchase_invoice_item',$data); + + } + + function purchase_invoice_item_edit($inv_id,$inv_item_id) + { + $sql="select *, + date_format(expiry_date,'%m') as str_expiry_month , + date_format(expiry_date,'%y') as str_expiry_year + from purchase_invoice_item_stock where id=".$inv_item_id." and purchase_id=".$inv_id; + $query = $this->db->query($sql); + $purchase_invoice_item= $query->result(); + + if(count($purchase_invoice_item)>0) + { + $rvar=array( + 'is_update_stock'=>'1', + 'item_id' =>$purchase_invoice_item[0]->id, + 'product_code' =>$purchase_invoice_item[0]->item_code, + 'product_mrp' => $purchase_invoice_item[0]->mrp, + 'selling_price'=>$purchase_invoice_item[0]->selling_price, + 'batch_code'=>$purchase_invoice_item[0]->batch_no, + 'disc_price'=>$purchase_invoice_item[0]->discount, + 'qty'=>$purchase_invoice_item[0]->qty, + 'qty_free'=>$purchase_invoice_item[0]->qty_free, + 'package'=>$purchase_invoice_item[0]->packing, + 'purchase_price'=>$purchase_invoice_item[0]->purchase_price, + 'datepicker_doe_month'=>$purchase_invoice_item[0]->str_expiry_month, + 'datepicker_doe_year'=>$purchase_invoice_item[0]->str_expiry_year, + 'drug'=>$purchase_invoice_item[0]->Item_name, + + 'sch_disc_amt'=>$purchase_invoice_item[0]->sch_disc_amt, + 'sch_disc_per'=>$purchase_invoice_item[0]->sch_disc_per, + + 'HSNCODE'=>$purchase_invoice_item[0]->HSNCODE, + 'CGST_per'=>$purchase_invoice_item[0]->CGST_per, + 'SGST_per'=>$purchase_invoice_item[0]->SGST_per, + + 'cold_storage'=>$purchase_invoice_item[0]->cold_storage, + 'shelf_no'=>$purchase_invoice_item[0]->shelf_no, + 'rack_no'=>$purchase_invoice_item[0]->rack_no, + + ); + }else{ + $rvar=array( + 'is_update_stock'=>'0', + 'show_text'=>$sql + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function add_item($type,$req=0) + { + + $inser_id=1; + $Error_Show=''; + $exist=0; + $input_id=0; + + $store_stock_id=$this->input->post('l_ssno'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name_info = $user->first_name.''. $user->last_name .'['.$user_id.']'.date('d-m-Y H:i:s'); + + if($type==1) + { + $inv_id=$this->input->post('inv_id'); + $qty=$this->input->post('qty'); + $disc=$this->input->post('disc'); + $product_unit_rate=$this->input->post('product_unit_rate'); + + $sql="SELECT p.item_name as item_name,t.batch_no,t.expiry_date, + (t.total_unit-t.total_sale_unit) AS S_qty, + t.mrp,t.selling_unit_rate,p.id AS master_product_id, + t.id as purchase_item_id,p.formulation, + t.HSNCODE,t.CGST_per,t.SGST_per,t.packing + FROM med_store_product_master p + JOIN purchase_invoice_item_stock t ON p.id=t.item_code + where t.id= ".$store_stock_id; + $query = $this->db->query($sql); + $data['itemlist']= $query->result(); + + $sql="select * from inv_stock_item where indent_id=".$inv_id." + and store_stock_id=".$store_stock_id; + $query = $this->db->query($sql); + $itemExist= $query->result(); + + $CGST=$data['itemlist'][0]->CGST_per; + $SGST=$data['itemlist'][0]->SGST_per; + + //$item_rate=$data['itemlist'][0]->unit_rate; + $item_rate=$product_unit_rate; + + $amount_value=$qty*$item_rate; + + $disc_amount=$amount_value*$disc/100; + + $Tamount_value=$amount_value-$disc_amount; + + $HSNCODE=$data['itemlist'][0]->HSNCODE; + + $stock_qty=$data['itemlist'][0]->S_qty; + + if($qty>$stock_qty) + { + $inser_id=0; + $Error_Show='Stock Qty. is less than Required Qty : Current Qty :'.$stock_qty; + }elseif($stock_qty==0){ + $stock_qty=0; + $inser_id=0; + $Error_Show='Stock is Empty'; + } + + if($inser_id>0) + { + $data['insert_inv_med_item'] = array( + 'indent_id' => $inv_id, + 'item_code' => $data['itemlist'][0]->master_product_id, + 'item_Name' => $data['itemlist'][0]->item_name, + 'formulation' => $data['itemlist'][0]->formulation, + 'qty' => $qty, + 'batch_no' => $data['itemlist'][0]->batch_no, + 'expiry' => $data['itemlist'][0]->expiry_date, + 'price' => $item_rate, + 'price2' => $item_rate, + 'mrp' => $data['itemlist'][0]->mrp, + 'disc_per' => $disc, + 'disc_amount' => $disc_amount, + 'amount' => $amount_value, + 'tamount' => $Tamount_value, + 'CGST_per'=> $CGST, + 'SGST_per'=> $SGST, + 'HSNCODE'=> $HSNCODE, + 'store_stock_id'=>$data['itemlist'][0]->purchase_item_id, + 'update_by_id'=>$user_id, + 'update_by_remark'=>$user_name_info, + 'packing'=>$data['itemlist'][0]->packing, + ); + + if(count($itemExist)>0) + { + $Error_Show='Please Check Also Same Item List'; + $exist=count($itemExist); + $input_id=$itemExist[0]->id; + $input_id=0; + } + + $inser_id=$this->Stock_M->add_indentitem( $data['insert_inv_med_item']); + } + } + else if($type==2) + { + $update_qty=$this->input->post('u_qty'); + $itemid=$this->input->post('itemid'); + + $sql="select * from inv_stock_item where id=".$itemid; + $query = $this->db->query($sql); + $data['inv_med_item']= $query->result(); + + $CGST=$data['inv_med_item'][0]->CGST_per; + $SGST=$data['inv_med_item'][0]->SGST_per; + $disc=$data['inv_med_item'][0]->disc_per; + + $inv_id=$data['inv_med_item'][0]->indent_id; + + $store_stock_id=$data['inv_med_item'][0]->store_stock_id; + + $sql="SELECT p.item_name,t.batch_no,t.expiry_date, + (t.total_unit-t.total_sale_unit) AS S_qty, + t.mrp,t.selling_unit_rate,p.id AS master_product_id, + t.id as purchase_item_id,p.formulation, + t.HSNCODE,t.CGST_per,t.SGST_per,t.packing + FROM med_store_product_master p + JOIN purchase_invoice_item_stock t ON p.id=t.item_code + where t.id= ".$store_stock_id; + + $query = $this->db->query($sql); + $item_master= $query->result(); + + $stock_qty=0; + + $old_qty=$data['inv_med_item'][0]->qty; + $diff_qty=$update_qty-$old_qty; + + if($diff_qty>0) + { + if(count($item_master)>0) + { + $stock_qty=$item_master[0]->S_qty; + if($diff_qty>$stock_qty) + { + $inser_id=0; + $Error_Show='Stock Qty. is less than Required Qty : Current Qty :'.$stock_qty; + } + }else{ + $stock_qty=0; + $inser_id=0; + $Error_Show='Stock is Empty'; + } + } + + if($inser_id>0) + { + $item_rate=$data['inv_med_item'][0]->price; + $amount_value=$update_qty*$item_rate; + + $disc_amount=$amount_value*$disc/100; + + $Tamount_value=$amount_value-$disc_amount; + + $data['update_inv_med_item'] = array( + 'qty' => $update_qty, + 'disc_amount' => $disc_amount, + 'amount' => $amount_value, + 'tamount' => $Tamount_value, + 'store_stock_id'=>$store_stock_id, + 'packing'=>$data['inv_med_item'][0]->packing, + 'indent_id' => $inv_id, + ); + + $this->Stock_M->update_indentitem($data['update_inv_med_item'],$itemid); + $inser_id=$itemid; + + } + + //$this->Medical_M->update_invoice_group($inv_id); + //$this->Medical_M->update_invoice_final($inv_id); + + }else{ + $itemid=$this->input->post('itemid'); + + $sql="select * from inv_stock_item where id=".$itemid; + $query = $this->db->query($sql); + $inv_items= $query->row_array(); + + $inv_id=$inv_items['indent_id']; + + $this->Stock_M->delete_indentitem($itemid,$inv_items); + + } + + $content=''; + + if($inser_id>0) + { + //$this->Medical_M->update_invoice_final($inv_id); + + $sql="SELECT i.*,ifnull(DATEDIFF(expiry,CURDATE()),1000) AS no_day, + SUM(p.total_unit-p.total_sale_unit-total_return_unit-total_lost_unit)/p.packing AS cur_qty + FROM (inv_stock_item i JOIN purchase_invoice_item_stock p ON i.item_code=p.item_code AND p.remove_item=0 ) + where indent_id=".$inv_id." GROUP BY i.id"; + $query = $this->db->query($sql); + $data['inv_stock_item']= $query->result(); + + $sql="select item_code + from inv_stock_item where indent_id=".$inv_id." Group by item_code Having count(id)>1"; + $query = $this->db->query($sql); + $data['inv_items_multiple']= $query->result(); + + $sql="select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST, + sum(disc_amount) as t_dis_amt from inv_stock_item where indent_id=".$inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + $sql="select * from invoice_stock_master where id=".$inv_id; + $query = $this->db->query($sql); + $data['invoiceMaster']= $query->result(); + + $user = $this->ion_auth->user()->row(); + $data['user_id'] = $user->id; + + $data['sale_return']=$data['invoiceMaster'][0]->sale_return; + + $content=$this->load->view('Storestock/indent_item_list',$data,true); + //$content=''; + } + + $rvar=array( + 'exist' =>$exist, + 'insertid' =>$inser_id, + 'content'=>$content, + 'error'=>$Error_Show, + 'input_id'=>$input_id, + 'csrf_dst_name_value'=>$this->security->get_csrf_hash() + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + public function purchase_invoice_item_delete($inv_id,$inv_item_del) + { + + $sql="select * from purchase_invoice_item_stock where id='$inv_item_del' "; + $query = $this->db->query($sql); + $drug_item= $query->result(); + + if(count($drug_item)>0){ + $sale_qty=$drug_item[0]->total_sale_unit; + + if($sale_qty>0) + { + $rvar=array( + 'is_update_stock' =>0, + 'show_text'=>'Sold some Quantity of this Item', + ); + + }else{ + $is_update_stock=$this->Stock_M->delete_purchase_item($inv_id,$inv_item_del); + $rvar=array( + 'is_update_stock' =>1, + 'show_text'=>'Removed Successfully', + ); + } + } + + $encode_data = json_encode($rvar); + echo $encode_data; + } + + + public function final_invoice($inv_id) + { + + $this->Stock_M->update_invoice_final($inv_id); + + $sql="select *,(discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST from invoice_stock_master where id=".$inv_id; + $query = $this->db->query($sql); + $data['invoice_stock_master']= $query->result(); + + $sql="select * from inv_stock_item where indent_id=".$inv_id; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select sum(amount) as Gtotal,sum(tamount) as tamt,sum(CGST) as TCGST,sum(SGST) as TSGST, + sum(disc_amount) as t_dis_amt from inv_stock_item where indent_id=".$inv_id; + $query = $this->db->query($sql); + $data['invoiceGtotal']= $query->result(); + + + $this->load->view('Storestock/Store_Final_Invoice',$data); + } + + + + public function get_drug(){ + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="SELECT p.item_name as item_name,p.formulation,t.batch_no,t.expiry_date as expiry_date_str,t.expiry_date, + (t.total_unit-t.total_sale_unit-total_lost_unit-t.total_return_unit) AS c_qty, + t.id,t.mrp,t.selling_unit_rate,p.id AS item_code,t.packing + FROM med_store_product_master p + JOIN purchase_invoice_item_stock t ON p.id=t.item_code + and (t.total_unit-t.total_sale_unit-t.total_lost_unit-t.total_return_unit)>0 + and (expiry_date>date_add(sysdate(),interval 1 day) or p.exp_date_applicable=0) + and t.remove_item=0 and t.item_return=0 + where (p.item_name like '".$q."%' "; + + if(strlen($q)>5) + { + $sql=$sql. " or p.item_name SOUNDS LIKE '".$q."'"; + } + + $sql=$sql.") order by p.item_name,id limit 100"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['item_name'].' '.$row['formulation'])).' |B:'.htmlentities(stripslashes($row['batch_no'])). ' |Pak:'.htmlentities(stripslashes($row['packing'])).' |Rs.'.htmlentities(stripslashes($row['mrp'])).' |Qty:'.htmlentities(stripslashes($row['c_qty'])); + $new_row['value']=htmlentities(stripslashes($row['item_name'])); + $new_row['l_item_code']=htmlentities(stripslashes($row['item_code'])); + $new_row['l_ss_no']=htmlentities(stripslashes($row['id'])); + $new_row['l_Batch']=htmlentities(stripslashes($row['batch_no'])); + $new_row['l_Expiry']=htmlentities(stripslashes($row['expiry_date_str'])); + $new_row['l_mrp']=htmlentities(stripslashes($row['mrp'])); + $new_row['l_unit_rate']=htmlentities(stripslashes($row['selling_unit_rate'])); + $new_row['l_c_qty']=htmlentities(stripslashes($row['c_qty'])); + $new_row['l_packing']=htmlentities(stripslashes($row['packing'])); + //$new_row['sql']=$sql; + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + }else{ + $new_row['sql']=$sql; + $row_set[] = $new_row; + echo json_encode($row_set); + } + } + } + + public function get_drug_master(){ + + if (isset($_GET['term'])){ + $q = strtolower($_GET['term']); + + $sql="SELECT m.* ,p.id as ss_no,m.packing as p_packing,p.mrp,p.purchase_price,p.discount, + p.batch_no,date_format(expiry_date,'%m') as str_expiry_month , + date_format(expiry_date,'%y') as str_expiry_year , + m.batch_applicable,m.exp_date_applicable, + if(p.id is null,m.CGST_per,p.CGST_per) as p_CGST_per, + if(p.id is null,m.SGST_per,p.SGST_per) as p_SGST_per, + if(p.id is null,m.rack_no,p.rack_no) as p_rack_no, + if(p.id is null,m.shelf_no,p.shelf_no) as p_shelf_no, + if(p.id is null,m.cold_storage,p.cold_storage) as p_cold_storage + + FROM med_store_product_master m + LEFT JOIN (SELECT * from purchase_invoice_item_stock + WHERE id in (select max(id) from purchase_invoice_item_stock + WHERE Item_name LIKE '".$q."%' + group BY item_code ) ) as p ON m.id=p.item_code + WHERE m.is_continue=1 and m.Item_name LIKE '".$q."%' + order BY m.item_name "; + + $sql=$sql." limit 20"; + + $query = $this->db->query($sql); + + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['item_name'])).' | '.htmlentities(stripslashes($row['p_packing'])).' | '.htmlentities(stripslashes($row['mrp'])); + $new_row['value']=htmlentities(stripslashes($row['item_name'])); + $new_row['l_item_code']=htmlentities(stripslashes($row['id'])); + $new_row['l_mrp']=htmlentities(stripslashes($row['mrp'])); + + $new_row['l_packing']=htmlentities(stripslashes($row['packing'])); + $new_row['l_CGST_per']=htmlentities(stripslashes($row['p_CGST_per'])); + $new_row['l_SGST_per']=htmlentities(stripslashes($row['p_SGST_per'])); + $new_row['l_HSNCODE']=htmlentities(stripslashes($row['HSNCODE'])); + + $new_row['l_batch_no']=htmlentities(stripslashes($row['batch_no'])); + + $new_row['l_purchase_price']=htmlentities(stripslashes($row['purchase_price'])); + + $new_row['l_package']=htmlentities(stripslashes($row['p_packing'])); + $new_row['l_disc_price']=htmlentities(stripslashes($row['discount'])); + + $new_row['l_rack_no']=htmlentities(stripslashes($row['p_rack_no'])); + $new_row['l_shelf_no']=htmlentities(stripslashes($row['p_shelf_no'])); + $new_row['l_cold_storage']=htmlentities(stripslashes($row['p_cold_storage'])); + + $new_row['batch_applicable']=htmlentities(stripslashes($row['batch_applicable'])); + $new_row['exp_date_applicable']=htmlentities(stripslashes($row['exp_date_applicable'])); + + $new_row['datepicker_doe_month']=htmlentities(stripslashes($row['str_expiry_month'])); + $new_row['datepicker_doe_year']=htmlentities(stripslashes($row['str_expiry_year'])); + + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + }else{ + $row_set[] = array(); + echo json_encode($row_set); + } + } + } + + public function challan_invoice($supplier_id) + { + $sql="SELECT p.id,t.id AS ss_no,p.Invoice_no,p.date_of_invoice, + date_format(p.date_of_invoice,'%d-%m-%Y') as str_date_of_invoice,p.sid,s.name_supplier, + s.short_name,s.gst_no, + p.T_Net_Amount as tamount,p.ischallan, + t.Item_name,t.qty,t.qty_free,t.mrp + FROM (purchase_invoice_stock p join stock_supplier s on p.sid=s.sid) + JOIN purchase_invoice_item_stock t ON p.id=t.purchase_id + where p.sid=$supplier_id and p.ischallan=1 + group by p.id,t.id "; + + $query = $this->db->query($sql); + $data['purchase_challan_item']= $query->result(); + + $this->load->view('Storestock/Purchase/purchase_challan_list',$data); + } + + public function challan_item_to_purchase($ss_no,$purchase_id) + { + $sql="select * from purchase_invoice_item_stock where id=$ss_no"; + $query = $this->db->query($sql); + $purchase_invoice_item= $query->result(); + + if(count($purchase_invoice_item)>0) + { + $old_purchase_id=$purchase_invoice_item[0]->purchase_id; + + $Pdata = array( + 'purchase_id' => $purchase_id, + 'old_purchase_id' => $old_purchase_id, + ); + + $is_update_stock=$this->Stock_M->update_purchase_item($Pdata,$ss_no); + //$this->db->query("CALL p_purchase_invoice(".$old_purchase_id.")"); + + $rvar=array( + 'is_transfer' =>$is_update_stock, + 'show_text'=>"Item Addedd Successfully", + ); + + }else{ + $rvar=array( + 'is_transfer' =>0, + 'show_text'=>"Item Not Found ", + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function challan_item_return($ss_no) + { + $sql="select * from purchase_invoice_item_stock where old_purchase_id>0 and id=$ss_no"; + $query = $this->db->query($sql); + $purchase_invoice_item= $query->result(); + + if(count($purchase_invoice_item)>0) + { + $old_challan_id=$purchase_invoice_item[0]->old_purchase_id; + $current_pur_id=$purchase_invoice_item[0]->purchase_id; + + $sql="select * from purchase_invoice_stock where id=$old_challan_id"; + $query = $this->db->query($sql); + $challan_invoice= $query->result(); + + if(count($challan_invoice)>0) + { + $Pdata = array( + 'purchase_id' => $old_challan_id, + 'old_purchase_id' => 0, + ); + + + $is_update_stock=$this->Stock_M->update_purchase_item($Pdata,$ss_no); + //$this->db->query("CALL p_purchase_invoice(".$current_pur_id.")"); + + $rvar=array( + 'is_transfer' =>$is_update_stock, + 'show_text'=>"Item Addedd Successfully", + ); + }else{ + + $Pdata = array( + 'purchase_id' => $old_challan_id, + 'old_purchase_id' => 0, + ); + + + $is_update_stock=$this->Stock_M->update_purchase_item($Pdata,$ss_no); + + + $rvar=array( + 'is_transfer' =>0, + 'show_text'=>"Challan Not Found ", + ); + } + + + }else{ + $rvar=array( + 'is_transfer' =>0, + 'show_text'=>"Item Not Found ", + ); + } + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + + public function purchase_invoice_delete($inv_id) + { + + $sql="select * from purchase_invoice_item_stock where purchase_id=$inv_id"; + $query = $this->db->query($sql); + $purchase_invoice_item= $query->result(); + + if (count($purchase_invoice_item)>0){ + $rvar=array( + 'is_delete' =>0, + 'show_text'=>"Invoice has Items, Empty the item list", + ); + }else{ + + $is_delete=$this->Stock_M->delete_purchase($inv_id); + $rvar=array( + 'is_delete' =>1, + 'show_text'=>"Invoice has been deleted", + ); + } + + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + public function SupplierListSub() + { + $sql="select * from stock_supplier order by name_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $this->load->view('Storestock/Purchase/supplier_master_sub',$data); + } + + public function SupplierEdit($sid=0) + { + $sql="select * from stock_supplier where sid=".$sid; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $sql="select * from india_state "; + $query = $this->db->query($sql); + $data['india_state']= $query->result(); + + $this->load->view('Storestock/Purchase/supplier_Edit',$data); + } + + public function CreatePurchase() + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_invoicecode', + 'label' => 'Invoice No', + 'rules' => 'required|min_length[3]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $sid=$this->input->post('input_supplier'); + $invoice_code=$this->input->post('input_invoicecode'); + $d_invoice=$this->input->post('datepicker_invoice'); + $ischallan=$this->input->post('cbo_billtype'); + + $where=" where sid=$sid"; + + if(is_numeric($invoice_code)) + $where.=" and Invoice_no=".$invoice_code ; + else + $where.=" and Invoice_no='".$invoice_code."'"; + + $sql="select count(*) as no_rec from purchase_invoice ".$where; + $query = $this->db->query($sql); + $chk_rec= $query->result(); + + if($chk_rec[0]->no_rec==0) + { + $Udata = array( + 'sid'=> $sid, + 'date_of_invoice'=> str_to_MysqlDate($d_invoice), + 'Invoice_no'=> $invoice_code, + 'ischallan'=>$ischallan + ); + + $inser_id=$this->Stock_M->insert_purchase($Udata); + $send_msg="Added Successfully"; + + if($inser_id>0) + { + $show_text=$send_msg; + }else{ + $show_text=$send_msg; + } + }else{ + $show_text='Record Already Exist'; + $inser_id=0; + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>$send_msg + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function SupplierUpdate($sid=0) + { + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'input_name_supplier', + 'label' => 'Supplier Name', + 'rules' => 'required|min_length[3]|max_length[100]' + ), + array( + 'field' => 'input_short_name', + 'label' => 'Short Name', + 'rules' => 'required|min_length[1]|max_length[30]' + ), + array( + 'field' => 'input_gst_no', + 'label' => 'GST No.', + 'rules' => 'required|min_length[5]|max_length[15]' + ), + array( + 'field' => 'input_state', + 'label' => 'State', + 'rules' => 'required|min_length[1]|max_length[20]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + $sid=$this->input->post('hid_sid'); + $name_supplier=$this->input->post('input_name_supplier'); + $short_name=$this->input->post('input_short_name'); + $contact_no=$this->input->post('input_contact_no'); + $gst_no=$this->input->post('input_gst_no'); + $city=$this->input->post('input_city'); + $state=$this->input->post('input_state'); + + $Udata = array( + 'name_supplier'=> $name_supplier, + 'short_name'=> $short_name, + 'contact_no'=> $contact_no, + 'gst_no'=> $gst_no, + 'city'=> $city, + 'state'=> $state + ); + + + if($sid>0) + { + $inser_id=$this->Stock_M->update_supplier($Udata,$sid); + $send_msg="Saved Successfully"; + }else{ + $inser_id=$this->Stock_M->insert_supplier($Udata); + $send_msg="Added Successfully"; + } + + if($inser_id>0) + { + $show_text=Show_Alert('success','Success',$send_msg); + }else{ + $show_text=Show_Alert('danger','Error',$send_msg); + } + + $rvar=array( + 'insertid' =>$inser_id, + 'show_text'=>$show_text + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + else{ + $send_msg=validation_errors(); + $rvar=array( + 'insertid' =>0, + 'show_text'=>Show_Alert('danger','Error',$send_msg) + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + + } + + public function StockDrugList() + { + $this->load->view('Storestock/Medical_stock_drug'); + } + + // Store Main + public function main_store() + { + $this->load->view('Storestock/Stock/main_store_dashboard'); + } + + + // Location Master + public function location_master_list() + { + $sql="select * from location_master order by loc_name "; + $query = $this->db->query($sql); + $data['location_master']= $query->result(); + + $this->load->view('Storestock/Stock/location_master_list',$data); + } + + function Location_add() + { + $this->load->view('MasterData/location_master_add'); + } + + function Location_edit($l_id) + { + $sql="select * from location_master where l_id= $l_id"; + $query = $this->db->query($sql); + $data['location_master']= $query->result(); + + $this->load->view('MasterData/location_master_edit',$data); + } + + function Location_save() + { + $input_loc_name = $this->input->post('input_loc_name'); + $input_loc_desc = $this->input->post('input_loc_desc'); + $hid_l_id = $this->input->post('hid_location_id'); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' ['.$user_id.']'; + + $insert_data=array( + 'loc_name'=>$input_loc_name, + 'loc_desc'=>$input_loc_desc, + 'loc_add_by'=>$user_name.' : '.date('Y-m-d H:i:s'), + ); + + if($hid_l_id==0){ + $inser_id=$this->Master_M->insert_location_master($insert_data); + }else{ + $inser_id=$this->Master_M->update_location_master($insert_data,$hid_l_id); + } + + echo $inser_id; + } + + + + // Print Indent + + public function print_single_indent($inv_id,$print_format=0) + { + //$cash 0 for Cash Only,1 for Credit only,2 Package Credit only,3 for All + + $this->Stock_M->update_invoice_final($inv_id); + + $sql="select i.indent_id,i.id,i.item_Name,i.formulation, + i.batch_no,Date_Format(i.expiry,'%m-%y')as expiry, + i.price,i.qty,(i.amount) as amount,i.HSNCODE, + m.indent_code,m.id as m_id, + date_format(m.indent_date,'%d-%m-%Y') as str_inv_date, + (twdisc_amount) as twdisc_amount, + (i.disc_amount+i.disc_whole) as d_amt, + (i.CGST+i.SGST) as gst, + (i.CGST_per+i.SGST_per) as gst_per ,i.sale_return + from inv_stock_item i join invoice_stock_master m + on i.indent_id=m.id + where m.id=$inv_id order by i.sale_return,id"; + $query = $this->db->query($sql); + $data['inv_items']= $query->result(); + + $sql="select *, + date_format(indent_date,'%d-%m-%Y') as str_inv_date, + (discount_amount+item_discount_amount) as inv_disc_total, + (CGST_Tamount+SGST_Tamount) as TGST + from invoice_stock_master + where id=$inv_id"; + $query = $this->db->query($sql); + $data['invoice_stock_master']= $query->result(); + + + //load mPDF library + $this->load->library('m_pdf'); + + //$this->m_pdf->pdf->SetProtection(array(), '1234567', '277395'); + + $this->m_pdf->pdf->SetWatermarkText(M_store); + $this->m_pdf->pdf->showWatermarkText = false; + + $file_name='Report-MedicalBill_'.$inv_id.'_'.date('Ymdhis').".pdf"; + + $filepath=$file_name; + + //$this->load->view('Medical/medical_bill_print_format',$data); + + $content=$this->load->view('Storestock/Store_Print',$data,TRUE); + //echo $content; + + //generate the PDF from the given html + $this->m_pdf->pdf->WriteHTML($content); + + //download it. + $this->m_pdf->pdf->Output($filepath,"I"); + + } + + // Store Stock + + public function store_stock() + { + $sql="select * from stock_supplier"; + $query = $this->db->query($sql); + $data['supplier_data']= $query->result(); + + $sql = "select * from med_formulation order by formulation_length"; + $query = $this->db->query($sql); + $data['med_formulation'] = $query->result(); + + $this->load->view('Storestock/store_stock_search', $data); + } + + public function store_Stock_result() + { + $supplier_id = $this->input->post('input_supplier'); + $item_name = $this->input->post('txtsearch'); + $store_id = $this->input->post('input_store_id'); + $chk_reorder = $this->input->post('chk_reorder'); + + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)<=p.re_order_qty"; + } + + $where = " remove_item=0 "; + + if ($supplier_id > 0) { + $where .= " and m.sid = " . $supplier_id; + } + + + if ($item_name <> '') { + $where .= " and p.Item_name like '%" . $item_name . "%' "; + } + + $sql = "SELECT i.Item_name,i.item_code ,sum(distinct i.tqty), + pm.re_order_qty, + sum(i.total_unit) as T_unit, + sum(if(ss.sale_qty is NULL,0,ss.sale_qty)) sal_qty, + GROUP_CONCAT(distinct s.name_supplier) AS supplier_names + FROM (((purchase_invoice_item_stock i join purchase_invoice_stock p on i.purchase_id=p.id ) + join stock_supplier s on s.sid=p.sid) + JOIN med_store_product_master pm ON i.item_code=pm.id AND pm.is_continue=1) + LEFT JOIN + (SELECT item_code,sum(qty) AS sale_qty FROM inv_stock_item GROUP BY item_code ) + AS ss ON i.item_code= ss.item_code + Where " . $where . " group by i.item_code " . $HAVING . " order by i.Item_name"; + + + $sql = "SELECT p.id, p.item_name, + IFNULL(s.item_code,0) AS item_found, + ifnull(s.packing,p.packing) as packing, + SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit) as C_Unit_Stock_Qty, + Concat(TRUNCATE(SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit)/s.packing,0), + ':', + MOD(SUM(s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit),s.packing)) as C_Pak_Qty, + sum(s.total_unit) as P_Unit_Qty, + sum(s.total_unit)/s.packing as Pak_qty, + sum(s.total_sale_unit) as sale_unit, + sum(s.total_sale_unit)/s.packing as C_Pak_Sale_Qty, + p.re_order_qty, + s.total_lost_unit + FROM (med_store_product_master p + JOIN purchase_invoice_item_stock s ON p.id=s.item_code AND s.remove_item=0 AND s.item_return=0) + JOIN purchase_invoice_stock m ON s.purchase_id=m.id and p.is_continue=1 + WHERE " . $where . " group by p.id,s.packing " . $HAVING . " order by p.Item_name "; + + $query = $this->db->query($sql); + $data['stock_list'] = $query->result(); + + //echo $sql; + + $this->load->view('Storestock/Stock_search_qty_result', $data); + } + + + public function get_product_stock($product_id, $remove_item = 0) + { + $supplier_id = $this->input->post('input_supplier'); + $date_range = $this->input->post('date_range'); + + $product_pak = $this->input->post('product_pak'); + + $where = "1=1 "; + + if ($date_range <> '0') { + $rangeArray = explode("S", $date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and p.date_of_invoice between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + $where .= " and i.item_code=$product_id and i.packing=$product_pak "; + + $sql = "SELECT i.id,s.name_supplier,s.short_name,i.Item_name, + p.Invoice_no,p.date_of_invoice,i.mrp,i.packing, + i.batch_no,i.expiry_date,i.purchase_price,i.purchase_unit_rate, + i.qty,i.qty_free,i.tqty,i.total_unit,i.total_sale_unit, + i.total_return_unit,i.total_lost_unit, + (i.total_unit-i.total_sale_unit-i.total_lost_unit-i.total_return_unit) as cur_unit + FROM (purchase_invoice_stock p JOIN purchase_invoice_item_stock i ON p.id=i.purchase_id and i.item_return=0) + JOIN med_supplier s ON p.sid=s.sid + WHERE $where and remove_item=$remove_item + Order by p.id"; + + $query = $this->db->query($sql); + $data['product_purchase_detail'] = $query->result(); + + $this->load->view('Storestock/Stock_Item_history', $data); + } + + public function Stock_result_excel($chk_reorder, $item_name = "", $schedule_id = '') + { + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING (SUM(TRUNCATE((p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit)/p.packing,0)))<=m.re_order_qty"; + } + + $where = " 1=1 "; + + if ($item_name <> '-') { + $where .= " and m.item_name like '%" . urldecode($item_name) . "%' "; + } + + if ($schedule_id == '0') { + } else { + + $schedule_id = explode("S", $schedule_id); + if (count($schedule_id) > 0) { + $where .= " ( "; + } + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or m.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or m.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or m.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or m.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or m.narcotic=1 "; + } + } + if (count($schedule_id) > 0) { + $where .= " ) "; + } + } + + + + $where .= " and i.date_of_invoice>date_add(curdate(),interval -24 month) "; + + $sql = "SELECT m.item_name, m.id,m.genericname, + SUM(p.tqty) AS Pak_qty, + SUM(p.total_unit) AS P_Unit_Qty, + m.packing, + SUM(TRUNCATE((p.total_unit-p.total_sale_unit)/p.packing,0)) AS C_Pak_Qty, + SUM(p.total_sale_unit) AS sale_unit, + SUM(TRUNCATE((p.total_sale_unit)/p.packing,0)) AS C_Pak_Sale_Qty, + m.re_order_qty, + SUM(p.total_unit-p.total_sale_unit) AS C_Unit_Stock_Qty, + SUM(TRUNCATE((p.total_unit-p.total_sale_unit-p.total_lost_unit-p.total_return_unit),0))*MAX(p.purchase_unit_rate) AS Stock_Cost, + p.purchase_unit_rate + FROM (med_store_product_master m JOIN purchase_invoice_item_stock p + ON m.id=p.item_code and m.is_continue=1 and p.item_return=0 AND p.remove_item=0) + JOIN purchase_invoice_stock i ON p.purchase_id=i.id + WHERE " . $where . " group by m.id " . $HAVING . " order by m.Item_name"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + + + $content = ""; + //$content.=$sql; + $content .= ' + + + + + + + + + + + + + + '; + + $total_stock_value = 0; + + foreach ($stock_list as $row) { + + if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="background-color: #999999;"'; + } else { + $tr_color = ''; + } + + $content .= ' + + + + + + + + + + '; + $total_stock_value += $row->Stock_Cost; + } + + $content .= ' + + + '; + + $content .= '
Item NameGeneric NameCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyPackage/Re-Order QtyPurchase Unit RateStock Cost
' . $row->item_name . '' . $row->genericname . '' . $row->C_Pak_Qty . '' . $row->C_Unit_Stock_Qty . '' . $row->C_Pak_Sale_Qty . '' . $row->sale_unit . '' . $row->packing . '' . $row->purchase_unit_rate . '' . $row->Stock_Cost . '
Total Stock Cost' . $total_stock_value . '
'; + + ExportExcel($content, 'Report_Medical_store_stock'); + } + + public function Stock_result_excel_2($supplier_id, $opd_date_range, $item_name, $chk_reorder, $schedule_id = '') + { + + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)<=p.re_order_qty"; + } + + $where = " 1=1 "; + + if ($item_name <> '-') { + $where .= " and p.item_name like '%" . $item_name . "%' "; + } + + if (!($opd_date_range == '' || $opd_date_range <> '0')) { + $rangeArray = explode("S", $opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and s.stock_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + if ($schedule_id == '') { + } else { + + $where .= " and (1<>1 "; + $schedule_id = explode("S", $schedule_id); + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or p.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or p.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or p.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or p.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or p.narcotic=1 "; + } + } + $where .= ")"; + } + + + $sql = "SELECT p.item_name, p.id,p.genericname, + SUM(s.tqty) AS Pak_qty, + SUM(s.total_unit) AS P_Unit_Qty, + s.packing, + SUM(TRUNCATE((s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit)/s.packing,0)) AS C_Pak_Qty, + SUM(s.total_sale_unit) AS sale_unit, + SUM(TRUNCATE((s.total_sale_unit)/s.packing,0)) AS C_Pak_Sale_Qty, + p.re_order_qty, + SUM(s.total_unit-s.total_sale_unit) AS C_Unit_Stock_Qty, + SUM(TRUNCATE((s.total_unit-s.total_sale_unit),0))*MAX(s.purchase_unit_rate) AS Stock_Cost + FROM (med_store_product_master p JOIN purchase_invoice_item_stock s ON p.id=s.item_code and s.item_return=0) + JOIN purchase_invoice_stock m ON s.purchase_id=m.id + WHERE " . $where . " group by p.id,s.packing " . $HAVING . " order by p.Item_name"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + + $content = ""; + $content .= ' + + + + + + + + + + + '; + + foreach ($stock_list as $row) { + + if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="background-color: #999999;"'; + } else { + $tr_color = ''; + } + + $content .= ' + + + + + + + '; + } + + $content .= '
Item NameTotal Unit QtyCurrent Unit QtyTotal Sale Unit QtyPackage/Re-Order QtyStock Cost
' . $row->item_name . '' . $row->P_Unit_Qty . '' . $row->C_Unit_Stock_Qty . '' . $row->sale_unit . '' . $row->packing . '' . $row->Stock_Cost . '
'; + + //echo $content; + ExportExcel($content, 'Report_Medical_store_stock'); + } + + public function Stock_result_excel_3($supplier_id, $opd_date_range, $item_name, $chk_reorder, $schedule_id = "") + { + + $HAVING = ""; + + if ($chk_reorder == "on") { + $HAVING = " HAVING SUM(s.total_unit-s.total_lost_unit-s.total_sale_unit-s.total_return_unit)<=p.re_order_qty"; + } + + $where = " 1=1 "; + + if ($item_name <> '-') { + $where .= " and p.item_name like '%" . $item_name . "%' "; + } + + if (!($opd_date_range == '' || $opd_date_range == '0')) { + $rangeArray = explode("S", $opd_date_range); + $minRange = $rangeArray[0]; + $maxRange = $rangeArray[1]; + + $where .= " and s.stock_date between '" . $minRange . "' and '" . $maxRange . "'"; + } + + if ($supplier_id > 0) { + $where .= " and m.sid=$supplier_id"; + } + + if ($schedule_id == '') { + } else { + + $where .= " and (1<>1 "; + $schedule_id = explode("S", $schedule_id); + foreach ($schedule_id as $row) { + if ($row == 1) { + $where .= " or p.schedule_h=1 "; + } + + if ($row == 2) { + $where .= " or p.schedule_h1=1 "; + } + + if ($row == 3) { + $where .= " or p.schedule_x=1 "; + } + + if ($row == 4) { + $where .= " or p.schedule_g=1 "; + } + + if ($row == 5) { + $where .= " or p.narcotic=1 "; + } + } + $where .= ")"; + } + + $sql = "SELECT p.item_name, p.id,p.genericname, + SUM(s.tqty) AS Pak_qty, + SUM(s.total_unit) AS P_Unit_Qty, + s.packing,s.batch_no,date_format(s.expiry_date,'%m-%Y') as str_exp, + s.mrp, + TRIM(',' FROM Concat(if(p.schedule_h=1,'schedule_h,',''), + if(p.schedule_h1=1,'schedule_h1,',''), + if(p.narcotic=1,'narcotic,',''), + if(p.schedule_x=1,'schedule_x,',''), + if(p.schedule_g=1,'schedule_g,',''))) as shed_x_h, + s.HSNCODE, + SUM(TRUNCATE((s.total_unit-s.total_sale_unit-s.total_lost_unit-s.total_return_unit)/s.packing,0)) AS C_Pak_Qty, + SUM(s.total_sale_unit) AS sale_unit,p.SGST_per, + SUM(TRUNCATE((s.total_sale_unit)/s.packing,0)) AS C_Pak_Sale_Qty, + p.re_order_qty, + SUM(s.total_unit-s.total_sale_unit) AS C_Unit_Stock_Qty,s.purchase_unit_rate, + SUM(TRUNCATE((s.total_unit-s.total_sale_unit-total_lost_unit-s.total_return_unit),0))*MAX(s.purchase_unit_rate) AS Stock_Cost , + v.name_supplier,date_format(date_of_invoice,'%d-%m-%Y') as P_Date + FROM ((med_store_product_master p JOIN purchase_invoice_item_stock s ON p.id=s.item_code) + JOIN purchase_invoice_stock m ON s.purchase_id=m.id ) + JOIN stock_supplier v on v.sid=m.sid + WHERE " . $where . " group by p.id,s.packing " . $HAVING . " order by p.Item_name"; + $query = $this->db->query($sql); + $stock_list = $query->result(); + + + $content = ""; + $content .= ' + + + + + + + + + + + + + + + + + + + + '; + + foreach ($stock_list as $row) { + + if ($row->C_Pak_Qty <= $row->re_order_qty) { + $tr_color = 'style="background-color: #999999;"'; + } else { + $tr_color = ''; + } + + $content .= ' + + + + + + + + + + + + + + + + '; + } + + $content .= '
Item NameCompostion Name (Salt Name)Pur. DateBatch No.ExpiryPurchase Unit QtySale Unit QtyCur. QtyShedule H / XSuppLier NameHSN CodeGST PerStock CostPurchase RateMRP
' . $row->item_name . '' . $row->genericname . '' . $row->P_Date . '' . $row->batch_no . '' . $row->str_exp . '' . $row->P_Unit_Qty . '' . $row->sale_unit . '' . $row->C_Unit_Stock_Qty . '' . $row->shed_x_h . '' . $row->name_supplier . '' . $row->HSNCODE . '' . $row->SGST_per . '' . $row->Stock_Cost . '' . $row->purchase_unit_rate . '' . $row->mrp . '
'; + + //echo $content; + ExportExcel($content, 'Report_Medical_store_stock'); + } + + + + + + + + + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/Testcont.php b/old_code_ci3/controllers/Testcont.php new file mode 100644 index 0000000..16d936d --- /dev/null +++ b/old_code_ci3/controllers/Testcont.php @@ -0,0 +1,137 @@ +load->library("Barcode"); + + $bar_content_bar=rawurldecode($bar_content); + + $barcodeobj = new TCPDFBarcode($bar_content_bar, 'C128'); + $barcode = $barcodeobj->getBarcodePNG(2, 30, array(0,128,0)); + echo $barcode; + + } + + public function bar2($bar_content) { + + $this->load->library("Barcode2"); + + $bar_content_bar=rawurldecode($bar_content); + + $barcodeobj = new TCPDF2DBarcode($bar_content_bar, 'QRCODE,L'); + $barcode = $barcodeobj->getBarcodePNG(); + echo $barcode; + } + + public function test_upload() + { + $this->load->view('testcode/test_1'); + } + + public function save_image($user_id) + { + $filename = $user_id.time() . '.jpg'; + $filepath = '/uploads/'; + + $config['upload_path'] = 'uploads'; + $config['allowed_types'] = 'gif|jpg|png|jpeg'; + + $new_name = time().$_FILES["webcam"]['name']; + $config['file_name'] = $new_name; + + $this->load->library('upload', $config); + if (!$this->upload->do_upload('webcam')) { + $error = array('error' => $this->upload->display_errors()); + echo $error['error']; + } + } + + + public function testdir($file_v_no) + { + $sql="select * from file_opd_rec where v_no=$file_v_no"; + $query = $this->db->query($sql); + $chk_file= $query->result(); + + if(count($chk_file)>0) + { + $full_path=$chk_file[0]->full_path; + $start_no=stripos($full_path,$file_v_no); + $end_no=strlen($full_path); + + $folder_name=substr($full_path,0,$start_no); + + $files_info = get_dir_file_info($folder_name); + + Echo '
';
+			print_r($files_info);
+			Echo '
'; + + foreach($files_info as $key => $value) { + $find_file=number_format(substr_count($value['name'],$file_v_no),0); + if($find_file==1) + { + echo ' File Name :'.$value['name'].' / Find File '.$file_v_no.'
'; + $index_key=str_replace($file_v_no.'_','',$value['name']); + $index_key=str_replace('.webm','',$index_key); + + $file_list[$index_key] = $value['name']; + } + } + + ksort($file_list); + + echo 'No. of Files :'. count($file_list); + + $prev_file=''; + $current_file=''; + foreach($file_list as $key => $value) { + $current_file=$folder_name.'/'.$value; + if(strlen($prev_file)>0) + { + //First File + $objFH = fopen( $prev_file, "rb" ); + $strBuffer1 = fread( $objFH, filesize( $prev_file) ); + fclose( $objFH ); + + //Second File + $objFH = fopen( $current_file, "rb" ); + $strBuffer2 = fread( $objFH, filesize( $current_file) ); + fclose( $objFH ); + + // manipulate buffers here... + $strBuffer3 = $strBuffer1 . $strBuffer2; + + // open for write/binary-safe + $objFH = fopen( $current_file, "wb" ); + fwrite( $objFH, $strBuffer3 ); + fclose( $objFH ); + + //Delete prev File + unlink($prev_file); + } + + $prev_file=$current_file; + } + + Echo '
';
+			print_r($file_list);
+			Echo '
'; + + + } + + } + + public function test_math() + { + Test_exp("2+5*3"); + } + +} \ No newline at end of file diff --git a/old_code_ci3/controllers/User_Authentication.php b/old_code_ci3/controllers/User_Authentication.php new file mode 100644 index 0000000..f97a6c9 --- /dev/null +++ b/old_code_ci3/controllers/User_Authentication.php @@ -0,0 +1,84 @@ +load->helper('form'); + + // Load form validation library + $this->load->library('form_validation'); + + // Load session library + $this->load->library('session'); + + $this->load->helper('security'); +} + +// Show login page +public function index() { + $this->load->view('Mobile_app/login'); +} + +// Check for user login process +public function user_login_process() { + + // Retrieve session data + $session_set_value = $this->session->all_userdata(); + + // Check for remember_me data in retrieved session data + if (isset($session_set_value['remember_me']) && $session_set_value['remember_me'] == "1") { + //$this->load->view('admin_page'); + $data['user'] = 1; + $this->load->view('Mobile_app/index',$data); + } else { + + // Check for validation + $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); + $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean'); + + if ($this->form_validation->run() == FALSE) { + //$this->load->view('login_form'); + $this->load->view('Mobile_app/login'); + } else { + $username = $this->input->post('username'); + $password = $this->input->post('password'); + if ($username == "fugo" && $password == "formget") { + $remember = $this->input->post('remember_me'); + if ($remember) { + // Set remember me value in session + $this->session->set_userdata('remember_me', TRUE); + } + $sess_data = array( + 'username' => $username, + 'password' => $password + ); + + $this->session->set_userdata('logged_in', $sess_data); + //$this->load->view('admin_page'); + + $data['user'] = 1; + $this->load->view('Mobile_app/index',$data); + + } else { + $data = array( + 'error_message' => 'Invalid Username or Password' + ); + $this->load->view('Mobile_app/login', $data); + } + } + } +} + +// Logout from admin page +public function logout() { + + // Destroy session data + $this->session->sess_destroy(); + $data['message_display'] = 'Successfully Logout'; + $this->load->view('Mobile_app/login', $data); +} + +}?> \ No newline at end of file diff --git a/old_code_ci3/controllers/Web_medical.php b/old_code_ci3/controllers/Web_medical.php new file mode 100644 index 0000000..9fb0eb5 --- /dev/null +++ b/old_code_ci3/controllers/Web_medical.php @@ -0,0 +1,9 @@ +load->view('form'); + } + + public function submission() + { + + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'inputEmail3', + 'label' => 'Email Address', + 'rules' => 'required|min_length[5]|max_length[30]|valid_email' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + echo '
Your website is submitted
'; + } + else + { + echo '
'.validation_errors().'
'; + } + } + + } diff --git a/old_code_ci3/controllers/Welcome.php b/old_code_ci3/controllers/Welcome.php new file mode 100644 index 0000000..f14df7e --- /dev/null +++ b/old_code_ci3/controllers/Welcome.php @@ -0,0 +1,105 @@ +load->view('welcome_message'); + } + + public function logout() + { + $this->ion_auth->logout(); + redirect('auth_dst/login', 'refresh'); + } + + public function index() + { + if (!$this->ion_auth->logged_in()) + { + redirect('auth_dst/login', 'refresh'); + } + + $d= $this->ion_auth->user()->row(); + + $data['user'] = $d; + + //print_r($d); + + $sql="SELECT count(opd_id) as no_opd_id + FROM opd_master WHERE online_book=1 and apointment_date=date(sysdate())"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $data['No_of_online_opd']=$opd_master[0]->no_opd_id; + + $this->load->view('Header',$data); + $this->load->view('LeftSide',$data); + $this->load->view('AdminMain'); + //$this->load->view('ControlSide'); + $this->load->view('Footer'); + } + + public function loademail() + { + $this->load->view('TestForm'); + } + public function loademail2() + { + $this->load->view('TestForm2'); + } + + public function check_login() + { + if (!$this->ion_auth->logged_in()) + { + $rvar=array( + 'login' =>1 + ); + $encode_data = json_encode($rvar); + echo $encode_data; + } + } + + public function Patient() + { + $this->load->view('Patient'); + } + + + function update_online_opd(){ + + $sql="SELECT count(opd_id) as no_opd_id + FROM opd_master + WHERE online_book=1 and apointment_date=date(sysdate())"; + $query = $this->db->query($sql); + $opd_master= $query->result(); + + $No_of_online_opd=$opd_master[0]->no_opd_id; + + $rvar=array( + 'online_opd' =>$No_of_online_opd, + ); + + $encode_data = json_encode($rvar); + echo $encode_data; + + } + + + function opd_online_list() + { + $sql="SELECT o.*,p.p_code,p.p_fname + FROM opd_master o JOIN patient_master p on o.p_id=p.id + WHERE o.online_book=1 and o.apointment_date=date(sysdate())"; + $query = $this->db->query($sql); + $data['opd_online_list']= $query->result(); + + $this->load->view('dashboard/opd_line_list',$data); + + } + + +} diff --git a/old_code_ci3/controllers/Workplace.php b/old_code_ci3/controllers/Workplace.php new file mode 100644 index 0000000..df55ae9 --- /dev/null +++ b/old_code_ci3/controllers/Workplace.php @@ -0,0 +1,14 @@ +load->view('workplace/workpanel'); + } +} \ No newline at end of file diff --git a/old_code_ci3/controllers/index.html b/old_code_ci3/controllers/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/old_code_ci3/controllers/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/controllers/php_opd_appointment_online.php b/old_code_ci3/controllers/php_opd_appointment_online.php new file mode 100644 index 0000000..0e8327c --- /dev/null +++ b/old_code_ci3/controllers/php_opd_appointment_online.php @@ -0,0 +1,248 @@ + $apiKey, 'numbers' => $numbers, "sender" => $sender, "message" => $message); + // Send the POST request with cURL + $ch = curl_init('https://api.textlocal.in/send/'); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + curl_close($ch); + +} + +$conn_main=mysqli_connect("localhost","root","Bisht@9720958717","main_website") or die("Unable to connect to Main Server"); + +if (mysqli_connect_errno()) +{ + echo "Failed to connect to MySQL: " . mysqli_connect_error(); +} + +// New Patient Create in HMS + +$sql = "select * from patient_master p where p.p_id=0 order by id limit 1"; + +$result = mysqli_query($conn_main,$sql) or die(mysqli_error($conn_main)); + +$flag=0; + +while($row = mysqli_fetch_array($result)) + { + $hospital_id=$row['hospital_id']; + $p_fname =$row['p_fname']; + $p_relative = $row['p_relative']; + $p_rname= $row['p_rname']; + $gender= $row['gender']; + $dob= $row['dob']; + $mphone1= $row['mphone1']; + + + $sql="select * from hospital_client where hospital_id=".$hospital_id; + $hospital_data = mysqli_query($conn_main,$sql) or die(mysqli_error($conn_main)); + + while($row_hospital = mysqli_fetch_array($hospital_data)) + { + $hospital_name=$row_hospital['hospital_name']; + $online_url=$row_hospital['online_url']; + $webservice_url=$row_hospital['webservice_url']; + $vpn_server_id=$row_hospital['vpn_server_id']; + + $data = array( + 'mphone1' => $mphone1, + 'p_fname' => strtoupper($p_fname), + 'gender' => $gender, + 'p_relative' => $p_relative, + 'p_rname' => strtoupper($p_rname), + 'dob' => $dob, + 'estimate_dob' => 1 + ); + + $data_json = json_encode($data); + + $post_url=$webservice_url.'/Opd_online_api/patient_create'; + echo $post_url; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $post_url); + curl_setopt($ch, CURLOPT_HEADER, 0); + //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS,$data); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + curl_close($ch); + + $retrun_data=json_decode(utf8_encode($response)); + + var_dump($retrun_data); + } + + $update_sql="update patient_master + set p_id=".$retrun_data->New_UHID.", + p_code='".$retrun_data->p_code."' + where id=".$row['id']; + + echo $update_sql; + + mysqli_query($conn_main,$update_sql); + + } + +// New Patient Created End + +//Update Patient_Id in OPd_BOOK Table +$update_sql="UPDATE patient_master p JOIN opd_book b ON p.id=b.online_patient_id +SET b.hospital_patient_id=p.p_id +WHERE p.p_id>0 AND b.hospital_patient_id=0"; + +mysqli_query($conn_main,$update_sql); + +//Update Payment Info in OPD_BOOK Table + +$update_sql="UPDATE opd_book b JOIN payments p ON p.product_id=b.id +SET b.pg_id=p.id +WHERE b.pg_id IS null"; + +mysqli_query($conn_main,$update_sql); + +// OPD Registering Process Start here + +$sql="select * from opd_book +where pg_id>0 and (hospital_opd_id=0 or hospital_opd_id is null)"; + +$opd_book_data = mysqli_query($conn_main,$sql) or die(mysqli_error($conn_main)); + +while($row_opd_book = mysqli_fetch_array($opd_book_data)) +{ + $hospital_patient_id=$row_opd_book['hospital_patient_id']; + $hospital_doc_id=$row_opd_book['hospital_doc_id']; + $appointment_date=$row_opd_book['appointment_date']; + $opd_fee=$row_opd_book['opd_fee']; + $hospital_id=$row_opd_book['hospital_id']; + + $sql="select * from hospital_client where hospital_id=".$hospital_id; + $hospital_data = mysqli_query($conn_main,$sql) or die(mysqli_error($conn_main)); + + while($row_hospital = mysqli_fetch_array($hospital_data)) + { + $hospital_name=$row_hospital['hospital_name']; + $online_url=$row_hospital['online_url']; + $webservice_url=$row_hospital['webservice_url']; + $vpn_server_id=$row_hospital['vpn_server_id']; + + $data = array( + 'hospital_patient_id' => $hospital_patient_id, + 'hospital_doc_id' => $hospital_doc_id, + 'appointment_date' => $appointment_date, + 'opd_fee'=> $opd_fee + ); + + $data_json = json_encode($data); + + $post_url=$webservice_url.'/Opd_online_api/opd_register'; + echo $post_url; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $post_url); + curl_setopt($ch, CURLOPT_HEADER, 0); + //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS,$data); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + curl_close($ch); + + $retrun_data=json_decode(utf8_encode($response)); + + var_dump($retrun_data); + + $update_sql="update opd_book + set hospital_opd_id=".$retrun_data->OPD_ID." + where id=".$row_opd_book['id']; + + mysqli_query($conn_main,$update_sql); + + //Send SMS + + $sms_template="Your OPD Appointment with Dr. #DrName# has been Booked. +
Booked No : #BookNo#. +
Date: #date# +
Time Between #time# +
Place: #HospitalName# +
Thanks DevSoft Tech"; + + $sql="Select * from opd_slot where slot_id=".$row_opd_book['slot_id']; + $opd_slot = mysqli_query($conn_main,$sql) or die(mysqli_error($conn_main)); + + if($row_opd_slot = mysqli_fetch_array($opd_slot)) + { + $str_time=$row_opd_slot['slot_desc']; + }else{ + $str_time=' '; + } + + $sms_template=str_replace('#DrName#',$retrun_data->DOC_NAME,$sms_template); + $sms_template=str_replace('#BookNo#',$retrun_data->BOOKNO,$sms_template); + $sms_template=str_replace('#date#',$retrun_data->BOOKDATE,$sms_template); + $sms_template=str_replace('#time#',$str_time,$sms_template); + $sms_template=str_replace('#HospitalName#',$hospital_name,$sms_template); + + $mphone1=$retrun_data->PHONENO; + + $sms_send="insert into sms_outbox (hospital_id,phone_number,content) + values ($hospital_id,$mphone1,'$sms_template')"; + + $write_web_sms="insert into web_msg_content (web_content,web_content_key,msg_insert_date,hospital_id,hospital_name,phone_no) + values ('".$data_sms."','Medicine',sysdate(),1,'Krishna Pharmcy','".$sender_number."')"; + + if ($conn_main->query($sms_send) === TRUE) { + $last_id = $conn_main->insert_id; + echo "New record created successfully. Last inserted ID is: " . $last_id; + + $url_link="https://m.dhms.in/msg/show/".$last_id; + $from_hospital=$hospital_name; + + //Send SMS End + + $insert_sms_sql="INSERT INTO sms_fast2sms (hospital_id, sender_id, message, variables_values, route, numbers) + VALUES (".$hospital_id.", 'DSTWEB', 160545, '".$hospital_name."|".$url_link."', 'dlt', '".substr($mphone1,-10)."')"; + + echo $insert_sms_sql; + + mysqli_query($conn_main,$insert_sms_sql); + + } else { + echo "Error: " . $sms_send . "
" . $conn->error; + } + + + + + + + + + + echo $sms_send; + + mysqli_query($conn_main,$sms_send); + } + +} + + +// OPD Registered , Process End Here +mysqli_close($conn_main); +//echo date("l jS \of F Y h:i:s A"); diff --git a/old_code_ci3/helpers/commonfunction_helper.php b/old_code_ci3/helpers/commonfunction_helper.php new file mode 100644 index 0000000..5d066f9 --- /dev/null +++ b/old_code_ci3/helpers/commonfunction_helper.php @@ -0,0 +1,217 @@ +0) + { + return "checked"; + } + else{ + return ""; + } +} + +function Doc_Value($doc_id) +{ + return 'Hello'; +} + +function Show_Alert($alert_type,$Head_title,$Body_content) +{ + $showAlert='
+ + '.$Head_title.' '.$Body_content.'
'; + + return $showAlert; +} + +function number_to_word($number) +{ + $no = round($number); + $point = round($number - $no, 2) * 100; + $hundred = null; + $digits_1 = strlen($no); + $i = 0; + $str = array(); + $words = array('0' => '', '1' => 'one', '2' => 'two', + '3' => 'three', '4' => 'four', '5' => 'five', '6' => 'six', + '7' => 'seven', '8' => 'eight', '9' => 'nine', + '10' => 'ten', '11' => 'eleven', '12' => 'twelve', + '13' => 'thirteen', '14' => 'fourteen', + '15' => 'fifteen', '16' => 'sixteen', '17' => 'seventeen', + '18' => 'eighteen', '19' =>'nineteen', '20' => 'twenty', + '30' => 'thirty', '40' => 'forty', '50' => 'fifty', + '60' => 'sixty', '70' => 'seventy', + '80' => 'eighty', '90' => 'ninety'); + $digits = array('', 'hundred', 'thousand', 'lakh', 'crore'); + while ($i < $digits_1) { + $divider = ($i == 2) ? 10 : 100; + $number = floor($no % $divider); + $no = floor($no / $divider); + $i += ($divider == 10) ? 1 : 2; + if ($number) { + $plural = (($counter = count($str)) && $number > 9) ? 's' : null; + $hundred = ($counter == 1 && $str[0]) ? ' and ' : null; + $str [] = ($number < 21) ? $words[$number] . + " " . $digits[$counter] . $plural . " " . $hundred + : + $words[floor($number / 10) * 10] + . " " . $words[$number % 10] . " " + . $digits[$counter] . $plural . " " . $hundred; + } else $str[] = null; + } + $str = array_reverse($str); + $result = implode('', $str); + $points = ($point) ? + "." . $words[$point / 10] . " " . + $words[$point = $point % 10] : ''; + + + $rvalue="".ucwords($result)." Only"; + return $rvalue; + +} + +function ExportExcel($table,$filename) +{ + + //header("Content-type: application/x-msdownload"); + //header('Content-Disposition: attachment; filename="filename.xls"'); + + // Sending headers to force the user to download the file + header('Content-Type: application/vnd.ms-excel'); + header('Content-Disposition: attachment;filename="'.$filename.'_'.date('dMy').'.xls"'); + header('Cache-Control: max-age=0'); + header("Pragma: no-cache"); + header("Expires: 0"); + + echo $table; +} + +function objectToArray($d) { + if (is_object($d)) { + // Gets the properties of the given object + // with get_object_vars function + $d = get_object_vars($d); + } + + if (is_array($d)) { + /* + * Return array converted to object + * Using __FUNCTION__ (Magic constant) + * for recursive call + */ + return array_map(__FUNCTION__, $d); + } + else { + // Return array + return $d; + } +} + +function compare_arrays($data1,$data2) + { + $data_change=""; + + foreach ($data2 as $key => $value) + { + + if((isset($data1[$key])) && (strtoupper($key)!='LOG')) + { + if($value!=$data1[$key]) + { + $data_change.='Field :'.$key.' Old Value:{'.$data1[$key].'} => New Value:{'.$value.'}'.PHP_EOL; + } + } + + } + + return $data_change; + } + + function cal_exp($exp) + { + //$string = "(11+10)*3"; + $string = $exp; + $result="Not Valid"; + $pattern = '~^[0-9()+\-*\/.]+$~'; + if(preg_match($pattern, $string)){ + $math_string ="return (".$string.");"; + $result = floatval(@eval($math_string)); + } + + if(is_numeric($result)){ + round($result,2); + } + + return $result; + } + + + + + + + + + + + + + + + + + + + + + + + + + + +?> \ No newline at end of file diff --git a/old_code_ci3/helpers/index.html b/old_code_ci3/helpers/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/old_code_ci3/helpers/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/models/DbRemote_M.php b/old_code_ci3/models/DbRemote_M.php new file mode 100644 index 0000000..e69de29 diff --git a/old_code_ci3/models/DocFormat_M.php b/old_code_ci3/models/DocFormat_M.php new file mode 100644 index 0000000..ac5e084 --- /dev/null +++ b/old_code_ci3/models/DocFormat_M.php @@ -0,0 +1,93 @@ +db->insert("doc_format_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function insert_sub($data) { + + if ($this->db->insert("doc_format_sub", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function insert_sub_item($data) { + + if ($this->db->insert("doc_format_sub_item", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_master($data,$old_id_no) { + $this->db->set($data); + $this->db->where("df_id", $old_id_no); + if ($this->db->update("doc_format_master", $data)) { + return 1; + }else + return 0; + } + + public function update_sub($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("doc_format_sub", $data)) { + return 1; + }else + return 0; + } + + public function update_sub_item($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("doc_format_sub_item", $data)) { + return 1; + }else + return 0; + } + + public function insert_patient_doc($data) { + if ($this->db->insert("patient_doc", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_patient_doc($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("patient_doc", $data)) { + return 1; + }else + return 0; + } + + public function insert_patient_doc_raw($data) { + $this->db->insert("patient_doc_raw", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_patient_doc_raw($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("patient_doc_raw", $data); + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Doctor_M.php b/old_code_ci3/models/Doctor_M.php new file mode 100644 index 0000000..bc82b9a --- /dev/null +++ b/old_code_ci3/models/Doctor_M.php @@ -0,0 +1,133 @@ +db->query($sql); + $result = $query->result_array(); + //print_r($result); + return $result; + } + + public function insert($data) { + + if ($this->db->insert("doctor_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function insert_spec($data) { + + if ($this->db->insert("doc_spec", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function insert_fee($data) { + + if ($this->db->insert("doc_opd_fee", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_fee($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("doc_opd_fee", $data)) { + return 1; + }else + return 0; + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("doctor_master", $data)) { + return 1; + }else + return 0; + } + + + + + public function delete_fee($delete_id_no) { + $this->db->where('id', $delete_id_no); + $q = $this->db->get('doc_opd_fee'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name . '['.date("d-m-Y h:i").']'; + + $data['remove_update_by']=$user_name; + + if ($this->db->insert("doc_opd_fee_update", $data)) { + $this->db->where("id", $delete_id_no); + $this->db->delete("doc_opd_fee"); + return 1; + }else{ + return 0; + } + } + + //opd_prescription_template + + public function insert_opd_prescription_template($data) { + if ($this->db->insert("opd_prescription_template", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + //opd_prescription_template -> Sub opd_prescrption_prescribed_template + public function insert_opd_prescrption_prescribed_template($data) { + if ($this->db->insert("opd_prescrption_prescribed_template", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function remove_p_medical($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescrption_prescribed_template"); + } + + + + public function update_opd_prescription_template($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("opd_prescription_template", $data)) { + return 1; + }else + return 0; + } + + public function update_opd_prescrption_prescribed_template($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("opd_prescrption_prescribed_template", $data)) { + return 1; + }else + return 0; +} + + + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/DotPrint_M.php b/old_code_ci3/models/DotPrint_M.php new file mode 100644 index 0000000..f00c77c --- /dev/null +++ b/old_code_ci3/models/DotPrint_M.php @@ -0,0 +1,25 @@ +db->insert("dot_printer", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("dot_printer", $data)) { + return 1; + }else + return 0; + } +} \ No newline at end of file diff --git a/old_code_ci3/models/ECHS_M.php b/old_code_ci3/models/ECHS_M.php new file mode 100644 index 0000000..8334e9b --- /dev/null +++ b/old_code_ci3/models/ECHS_M.php @@ -0,0 +1,43 @@ +db->insert("echs_master", $data)) { + $insert_id = $this->db->insert_id(); + $pid=1000000+$insert_id; + $pid=date('ym').$pid; + + return $insert_id; + }else + return 0; + } + + public function insert_mem($data) { + + if ($this->db->insert("echs_member", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_mem($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("echs_member", $data); + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("echs_master", $data); + } + + + } +?> \ No newline at end of file diff --git a/old_code_ci3/models/FileMedical_M.php b/old_code_ci3/models/FileMedical_M.php new file mode 100644 index 0000000..4508645 --- /dev/null +++ b/old_code_ci3/models/FileMedical_M.php @@ -0,0 +1,61 @@ +db->insert("purchase_invoice_scan_file", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + } else { + echo $this->db->_error_message(); + return 0; + } + } + + public function update_purchase_scan($data, $old_id_no) + { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("purchase_invoice_scan_file", $data); + } + + function get_purchase_scan_filedetail($id) + { + return $this->db->get_where('purchase_invoice_scan_file', array('id' => $id))->row_array(); + } + + function get_filedetail_file_url($id) + { + if ($id == '' || $id == 0) { + $file_url = "No File"; + } else { + $file_url = $this->db->get_where('purchase_invoice_scan_file', array('id' => $id))->row()->full_path; + } + + return $file_url; + } + + function delete_purchase_scan_fileupload($id) + { + $this->db->where('id', $id); + $q = $this->db->get('purchase_invoice_scan_file'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $user_name = $this->session->userdata('username') . '[' . $this->session->userdata('agent_id') . ']' . date('d-m-Y H:i:s'); + $data['delete_by'] = $user_name; + + if ($this->db->insert("purchase_invoice_scan_file_delete", $data)) { + return $this->db->delete('purchase_invoice_scan_file', array('id' => $id)); + } else { + return 0; + } + } +} diff --git a/old_code_ci3/models/FileOPDRec_M.php b/old_code_ci3/models/FileOPDRec_M.php new file mode 100644 index 0000000..a44f330 --- /dev/null +++ b/old_code_ci3/models/FileOPDRec_M.php @@ -0,0 +1,62 @@ +db->query($sql); + $chk_file= $query->result(); + + if(count($chk_file)>0) + { + $this->db->set($data); + $this->db->where("v_no",$file_v_no); + $this->db->update("file_opd_rec", $data); + }else{ + $data['v_no']=$file_v_no; + if ($this->db->insert("file_opd_rec", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else{ + echo $this->db->_error_message(); + return 0; + } + } + } + + public function file_complie($file_v_no) + { + $sql="select * from file_opd_rec where v_no=$file_v_no"; + $query = $this->db->query($sql); + $chk_file= $query->result(); + + if(count($chk_file)>0) + { + $full_path=$chk_file[0]->full_path; + $start_no=stripos($full_path,$file_v_no); + $end_no=strlen($full_path); + + $folder_name=substr($full_path,0,$start_no); + + $files_info = get_dir_file_info($folder_name); + + Echo '
';
+		        print_r($files_info) ;
+		    Echo '
'; + } + + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("file_opd_rec", $data); + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/File_M.php b/old_code_ci3/models/File_M.php new file mode 100644 index 0000000..b97fe5a --- /dev/null +++ b/old_code_ci3/models/File_M.php @@ -0,0 +1,63 @@ +db->insert("file_upload_data", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else{ + echo $this->db->_error_message(); + return 0; + } + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("file_upload_data", $data); + } + + function get_filedetail($id) + { + return $this->db->get_where('file_upload_data',array('id'=>$id))->row_array(); + } + + function get_filedetail_file_url($id) + { + if($id=='' || $id==0 ) + { + $file_url="No File"; + + }else{ + $file_url=$this->db->get_where('file_upload_data',array('id'=>$id))->row()->full_path; + } + + return $file_url; + } + + function delete_fileupload($id) + { + $this->db->where('id', $id); + $q = $this->db->get('file_upload_data'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $user_name=$this->session->userdata('username').'['.$this->session->userdata('agent_id').']'.date('d-m-Y H:i:s'); + $data['delete_by']=$user_name; + + if ($this->db->insert("file_upload_data_delete", $data)) + { + return $this->db->delete('file_upload_data',array('id'=>$id)); + }else{ + return 0; + } + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Insurance_M.php b/old_code_ci3/models/Insurance_M.php new file mode 100644 index 0000000..bdb8c71 --- /dev/null +++ b/old_code_ci3/models/Insurance_M.php @@ -0,0 +1,29 @@ +db->insert("hc_insurance", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("hc_insurance", $data)) { + return 1; + }else + return 0; + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Invoice_M.php b/old_code_ci3/models/Invoice_M.php new file mode 100644 index 0000000..6f07fa1 --- /dev/null +++ b/old_code_ci3/models/Invoice_M.php @@ -0,0 +1,95 @@ +db->insert("invoice_master", $data)) { + $insert_id = $this->db->insert_id(); + + $pid=str_pad(substr($insert_id,-7,7),7,0,STR_PAD_LEFT); + + $pid='N'.date('ym').$pid; + $data1 = array( + 'invoice_code' => $pid + ); + + $this->db->set($data1); + $this->db->where("id", $insert_id); + $this->db->update("invoice_master", $data1); + + return $insert_id; + }else + return 0; + } + + public function addinvoiceitem($data) + { + if ($this->db->insert("invoice_item", $data)) { + $insert_id = $this->db->insert_id(); + + $this->db->query("CALL p_cal_invoice_byItem(".$insert_id.")"); + + return $insert_id; + }else + return 0; + } + + public function deleteinvoiceitem($del_id) + { + $this->db->where('id', $del_id); + $q = $this->db->get('invoice_item'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $data['update_by_id']=$user_id; + $data['update_by']=$user_name; + $data['update_action']='1'; + + if ($this->db->insert("invoice_item_update", $data)) { + $this->db->where("id", $del_id); + $this->db->delete("invoice_item"); + return 1; + }else{ + return 0; + } + + $this->db->query("CALL p_cal_invoice_byItem(".$data['inv_master_id'].")"); + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("invoice_master", $data); + + $this->db->query("CALL p_cal_invoice_byItem(".$old_id_no.")"); + } + + public function update_item($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("invoice_item", $data); + + $this->db->where('id', $old_id_no); + $q = $this->db->get('invoice_item'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $this->db->query("CALL p_cal_invoice_byItem(".$data['inv_master_id'].")"); + } + + public function update_invoice_final($inv_id) + { + $this->db->query("CALL p_cal_invoice_byItem(".$inv_id.")"); + + } +} \ No newline at end of file diff --git a/old_code_ci3/models/Ion_auth_model.php b/old_code_ci3/models/Ion_auth_model.php new file mode 100644 index 0000000..e2cbc6e --- /dev/null +++ b/old_code_ci3/models/Ion_auth_model.php @@ -0,0 +1,2249 @@ +load->database(); + $this->load->config('ion_auth', TRUE); + $this->load->helper('cookie'); + $this->load->helper('date'); + $this->lang->load('ion_auth'); + + // initialize db tables data + $this->tables = $this->config->item('tables', 'ion_auth'); + + //initialize data + $this->identity_column = $this->config->item('identity', 'ion_auth'); + $this->store_salt = $this->config->item('store_salt', 'ion_auth'); + $this->salt_length = $this->config->item('salt_length', 'ion_auth'); + $this->join = $this->config->item('join', 'ion_auth'); + + + // initialize hash method options (Bcrypt) + $this->hash_method = $this->config->item('hash_method', 'ion_auth'); + $this->default_rounds = $this->config->item('default_rounds', 'ion_auth'); + $this->random_rounds = $this->config->item('random_rounds', 'ion_auth'); + $this->min_rounds = $this->config->item('min_rounds', 'ion_auth'); + $this->max_rounds = $this->config->item('max_rounds', 'ion_auth'); + + + // initialize messages and error + $this->messages = array(); + $this->errors = array(); + $delimiters_source = $this->config->item('delimiters_source', 'ion_auth'); + + // load the error delimeters either from the config file or use what's been supplied to form validation + if ($delimiters_source === 'form_validation') + { + // load in delimiters from form_validation + // to keep this simple we'll load the value using reflection since these properties are protected + $this->load->library('form_validation'); + $form_validation_class = new ReflectionClass("CI_Form_validation"); + + $error_prefix = $form_validation_class->getProperty("_error_prefix"); + $error_prefix->setAccessible(TRUE); + $this->error_start_delimiter = $error_prefix->getValue($this->form_validation); + $this->message_start_delimiter = $this->error_start_delimiter; + + $error_suffix = $form_validation_class->getProperty("_error_suffix"); + $error_suffix->setAccessible(TRUE); + $this->error_end_delimiter = $error_suffix->getValue($this->form_validation); + $this->message_end_delimiter = $this->error_end_delimiter; + } + else + { + // use delimiters from config + $this->message_start_delimiter = $this->config->item('message_start_delimiter', 'ion_auth'); + $this->message_end_delimiter = $this->config->item('message_end_delimiter', 'ion_auth'); + $this->error_start_delimiter = $this->config->item('error_start_delimiter', 'ion_auth'); + $this->error_end_delimiter = $this->config->item('error_end_delimiter', 'ion_auth'); + } + + + // initialize our hooks object + $this->_ion_hooks = new stdClass; + + // load the bcrypt class if needed + if ($this->hash_method == 'bcrypt') { + if ($this->random_rounds) + { + $rand = rand($this->min_rounds,$this->max_rounds); + $params = array('rounds' => $rand); + } + else + { + $params = array('rounds' => $this->default_rounds); + } + + $params['salt_prefix'] = $this->config->item('salt_prefix', 'ion_auth'); + $this->load->library('bcrypt',$params); + } + + $this->trigger_events('model_constructor'); + } + + /** + * Misc functions + * + * Hash password : Hashes the password to be stored in the database. + * Hash password db : This function takes a password and validates it + * against an entry in the users table. + * Salt : Generates a random salt value. + * + * @author Mathew + */ + + /** + * Hashes the password to be stored in the database. + * + * @return void + * @author Mathew + **/ + public function hash_password($password, $salt=false, $use_sha1_override=FALSE) + { + if (empty($password)) + { + return FALSE; + } + + // bcrypt + if ($use_sha1_override === FALSE && $this->hash_method == 'bcrypt') + { + return $this->bcrypt->hash($password); + } + + + if ($this->store_salt && $salt) + { + return sha1($password . $salt); + } + else + { + $salt = $this->salt(); + return $salt . substr(sha1($salt . $password), 0, -$this->salt_length); + } + } + + /** + * This function takes a password and validates it + * against an entry in the users table. + * + * @return void + * @author Mathew + **/ + public function hash_password_db($id, $password, $use_sha1_override=FALSE) + { + if (empty($id) || empty($password)) + { + return FALSE; + } + + $this->trigger_events('extra_where'); + + $query = $this->db->select('password, salt') + ->where('id', $id) + ->limit(1) + ->order_by('id', 'desc') + ->get($this->tables['users']); + + $hash_password_db = $query->row(); + + if ($query->num_rows() !== 1) + { + return FALSE; + } + + // bcrypt + if ($use_sha1_override === FALSE && $this->hash_method == 'bcrypt') + { + if ($this->bcrypt->verify($password,$hash_password_db->password)) + { + return TRUE; + } + + return FALSE; + } + + // sha1 + if ($this->store_salt) + { + $db_password = sha1($password . $hash_password_db->salt); + } + else + { + $salt = substr($hash_password_db->password, 0, $this->salt_length); + + $db_password = $salt . substr(sha1($salt . $password), 0, -$this->salt_length); + } + + if($db_password == $hash_password_db->password) + { + return TRUE; + } + else + { + return FALSE; + } + } + + /** + * Generates a random salt value for forgotten passwords or any other keys. Uses SHA1. + * + * @return void + * @author Mathew + **/ + public function hash_code($password) + { + return $this->hash_password($password, FALSE, TRUE); + } + + /** + * Generates a random salt value. + * + * Salt generation code taken from https://github.com/ircmaxell/password_compat/blob/master/lib/password.php + * + * @return void + * @author Anthony Ferrera + **/ + public function salt() + { + + $raw_salt_len = 16; + + $buffer = ''; + $buffer_valid = false; + + if (function_exists('mcrypt_create_iv') && !defined('PHALANGER')) { + $buffer = mcrypt_create_iv($raw_salt_len, MCRYPT_DEV_URANDOM); + if ($buffer) { + $buffer_valid = true; + } + } + + if (!$buffer_valid && function_exists('openssl_random_pseudo_bytes')) { + $buffer = openssl_random_pseudo_bytes($raw_salt_len); + if ($buffer) { + $buffer_valid = true; + } + } + + if (!$buffer_valid && @is_readable('/dev/urandom')) { + $f = fopen('/dev/urandom', 'r'); + $read = strlen($buffer); + while ($read < $raw_salt_len) { + $buffer .= fread($f, $raw_salt_len - $read); + $read = strlen($buffer); + } + fclose($f); + if ($read >= $raw_salt_len) { + $buffer_valid = true; + } + } + + if (!$buffer_valid || strlen($buffer) < $raw_salt_len) { + $bl = strlen($buffer); + for ($i = 0; $i < $raw_salt_len; $i++) { + if ($i < $bl) { + $buffer[$i] = $buffer[$i] ^ chr(mt_rand(0, 255)); + } else { + $buffer .= chr(mt_rand(0, 255)); + } + } + } + + $salt = $buffer; + + // encode string with the Base64 variant used by crypt + $base64_digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + $bcrypt64_digits = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + $base64_string = base64_encode($salt); + $salt = strtr(rtrim($base64_string, '='), $base64_digits, $bcrypt64_digits); + + $salt = substr($salt, 0, $this->salt_length); + + + return $salt; + + } + + /** + * Activation functions + * + * Activate : Validates and removes activation code. + * Deactivate : Updates a users row with an activation code. + * + * @author Mathew + */ + + /** + * activate + * + * @return void + * @author Mathew + **/ + public function activate($id, $code = false) + { + $this->trigger_events('pre_activate'); + + if ($code !== FALSE) + { + $query = $this->db->select($this->identity_column) + ->where('activation_code', $code) + ->where('id', $id) + ->limit(1) + ->order_by('id', 'desc') + ->get($this->tables['users']); + + $result = $query->row(); + + if ($query->num_rows() !== 1) + { + $this->trigger_events(array('post_activate', 'post_activate_unsuccessful')); + $this->set_error('activate_unsuccessful'); + return FALSE; + } + + $data = array( + 'activation_code' => NULL, + 'active' => 1 + ); + + $this->trigger_events('extra_where'); + $this->db->update($this->tables['users'], $data, array('id' => $id)); + } + else + { + $data = array( + 'activation_code' => NULL, + 'active' => 1 + ); + + + $this->trigger_events('extra_where'); + $this->db->update($this->tables['users'], $data, array('id' => $id)); + } + + + $return = $this->db->affected_rows() == 1; + if ($return) + { + $this->trigger_events(array('post_activate', 'post_activate_successful')); + $this->set_message('activate_successful'); + } + else + { + $this->trigger_events(array('post_activate', 'post_activate_unsuccessful')); + $this->set_error('activate_unsuccessful'); + } + + + return $return; + } + + + /** + * Deactivate + * + * @return void + * @author Mathew + **/ + public function deactivate($id = NULL) + { + $this->trigger_events('deactivate'); + + if (!isset($id)) + { + $this->set_error('deactivate_unsuccessful'); + return FALSE; + } + + $activation_code = sha1(md5(microtime())); + $this->activation_code = $activation_code; + + $data = array( + 'activation_code' => $activation_code, + 'active' => 0 + ); + + $this->trigger_events('extra_where'); + $this->db->update($this->tables['users'], $data, array('id' => $id)); + + $return = $this->db->affected_rows() == 1; + if ($return) + $this->set_message('deactivate_successful'); + else + $this->set_error('deactivate_unsuccessful'); + + return $return; + } + + public function clear_forgotten_password_code($code) { + + if (empty($code)) + { + return FALSE; + } + + $this->db->where('forgotten_password_code', $code); + + if ($this->db->count_all_results($this->tables['users']) > 0) + { + $data = array( + 'forgotten_password_code' => NULL, + 'forgotten_password_time' => NULL + ); + + $this->db->update($this->tables['users'], $data, array('forgotten_password_code' => $code)); + + return TRUE; + } + + return FALSE; + } + + /** + * reset password + * + * @return bool + * @author Mathew + **/ + public function reset_password($identity, $new) { + $this->trigger_events('pre_change_password'); + + if (!$this->identity_check($identity)) { + $this->trigger_events(array('post_change_password', 'post_change_password_unsuccessful')); + return FALSE; + } + + $this->trigger_events('extra_where'); + + $query = $this->db->select('id, password, salt') + ->where($this->identity_column, $identity) + ->limit(1) + ->order_by('id', 'desc') + ->get($this->tables['users']); + + if ($query->num_rows() !== 1) + { + $this->trigger_events(array('post_change_password', 'post_change_password_unsuccessful')); + $this->set_error('password_change_unsuccessful'); + return FALSE; + } + + $result = $query->row(); + + $new = $this->hash_password($new, $result->salt); + + // store the new password and reset the remember code so all remembered instances have to re-login + // also clear the forgotten password code + $data = array( + 'password' => $new, + 'remember_code' => NULL, + 'forgotten_password_code' => NULL, + 'forgotten_password_time' => NULL, + ); + + $this->trigger_events('extra_where'); + $this->db->update($this->tables['users'], $data, array($this->identity_column => $identity)); + + $return = $this->db->affected_rows() == 1; + if ($return) + { + $this->trigger_events(array('post_change_password', 'post_change_password_successful')); + $this->set_message('password_change_successful'); + } + else + { + $this->trigger_events(array('post_change_password', 'post_change_password_unsuccessful')); + $this->set_error('password_change_unsuccessful'); + } + + return $return; + } + + /** + * change password + * + * @return bool + * @author Mathew + **/ + public function change_password($identity, $old, $new) + { + $this->trigger_events('pre_change_password'); + + $this->trigger_events('extra_where'); + + $query = $this->db->select('id, password, salt') + ->where($this->identity_column, $identity) + ->limit(1) + ->order_by('id', 'desc') + ->get($this->tables['users']); + + if ($query->num_rows() !== 1) + { + $this->trigger_events(array('post_change_password', 'post_change_password_unsuccessful')); + $this->set_error('password_change_unsuccessful'); + return FALSE; + } + + $user = $query->row(); + + $old_password_matches = $this->hash_password_db($user->id, $old); + + if ($old_password_matches === TRUE) + { + // store the new password and reset the remember code so all remembered instances have to re-login + $hashed_new_password = $this->hash_password($new, $user->salt); + $data = array( + 'password' => $hashed_new_password, + 'remember_code' => NULL, + ); + + $this->trigger_events('extra_where'); + + $successfully_changed_password_in_db = $this->db->update($this->tables['users'], $data, array($this->identity_column => $identity)); + if ($successfully_changed_password_in_db) + { + $this->trigger_events(array('post_change_password', 'post_change_password_successful')); + $this->set_message('password_change_successful'); + } + else + { + $this->trigger_events(array('post_change_password', 'post_change_password_unsuccessful')); + $this->set_error('password_change_unsuccessful'); + } + + return $successfully_changed_password_in_db; + } + + $this->set_error('password_change_unsuccessful'); + return FALSE; + } + + /** + * Checks username + * + * @return bool + * @author Mathew + **/ + public function username_check($username = '') + { + $this->trigger_events('username_check'); + + if (empty($username)) + { + return FALSE; + } + + $this->trigger_events('extra_where'); + + return $this->db->where('username', $username) + ->group_by("id") + ->order_by("id", "ASC") + ->limit(1) + ->count_all_results($this->tables['users']) > 0; + } + + /** + * Checks email + * + * @return bool + * @author Mathew + **/ + public function email_check($email = '') + { + $this->trigger_events('email_check'); + + if (empty($email)) + { + return FALSE; + } + + $this->trigger_events('extra_where'); + + return $this->db->where('email', $email) + ->group_by("id") + ->order_by("id", "ASC") + ->limit(1) + ->count_all_results($this->tables['users']) > 0; + } + + /** + * Identity check + * + * @return bool + * @author Mathew + **/ + public function identity_check($identity = '') + { + $this->trigger_events('identity_check'); + + if (empty($identity)) + { + return FALSE; + } + + return $this->db->where($this->identity_column, $identity) + ->count_all_results($this->tables['users']) > 0; + } + + /** + * Insert a forgotten password key. + * + * @return bool + * @author Mathew + * @updated Ryan + * @updated 52aa456eef8b60ad6754b31fbdcc77bb + **/ + public function forgotten_password($identity) + { + if (empty($identity)) + { + $this->trigger_events(array('post_forgotten_password', 'post_forgotten_password_unsuccessful')); + return FALSE; + } + + // All some more randomness + $activation_code_part = ""; + if(function_exists("openssl_random_pseudo_bytes")) { + $activation_code_part = openssl_random_pseudo_bytes(128); + } + + for($i=0;$i<1024;$i++) { + $activation_code_part = sha1($activation_code_part . mt_rand() . microtime()); + } + + $key = $this->hash_code($activation_code_part.$identity); + + // If enable query strings is set, then we need to replace any unsafe characters so that the code can still work + if ($key != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE) + { + // preg_quote() in PHP 5.3 escapes -, so the str_replace() and addition of - to preg_quote() is to maintain backwards + // compatibility as many are unaware of how characters in the permitted_uri_chars will be parsed as a regex pattern + if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $key)) + { + $key = preg_replace("/[^".$this->config->item('permitted_uri_chars')."]+/i", "-", $key); + } + } + + $this->forgotten_password_code = $key; + + $this->trigger_events('extra_where'); + + $update = array( + 'forgotten_password_code' => $key, + 'forgotten_password_time' => time() + ); + + $this->db->update($this->tables['users'], $update, array($this->identity_column => $identity)); + + $return = $this->db->affected_rows() == 1; + + if ($return) + $this->trigger_events(array('post_forgotten_password', 'post_forgotten_password_successful')); + else + $this->trigger_events(array('post_forgotten_password', 'post_forgotten_password_unsuccessful')); + + return $return; + } + + /** + * Forgotten Password Complete + * + * @return string + * @author Mathew + **/ + public function forgotten_password_complete($code, $salt=FALSE) + { + $this->trigger_events('pre_forgotten_password_complete'); + + if (empty($code)) + { + $this->trigger_events(array('post_forgotten_password_complete', 'post_forgotten_password_complete_unsuccessful')); + return FALSE; + } + + $profile = $this->where('forgotten_password_code', $code)->users()->row(); //pass the code to profile + + if ($profile) { + + if ($this->config->item('forgot_password_expiration', 'ion_auth') > 0) { + //Make sure it isn't expired + $expiration = $this->config->item('forgot_password_expiration', 'ion_auth'); + if (time() - $profile->forgotten_password_time > $expiration) { + //it has expired + $this->set_error('forgot_password_expired'); + $this->trigger_events(array('post_forgotten_password_complete', 'post_forgotten_password_complete_unsuccessful')); + return FALSE; + } + } + + $password = $this->salt(); + + $data = array( + 'password' => $this->hash_password($password, $salt), + 'forgotten_password_code' => NULL, + 'active' => 1, + ); + + $this->db->update($this->tables['users'], $data, array('forgotten_password_code' => $code)); + + $this->trigger_events(array('post_forgotten_password_complete', 'post_forgotten_password_complete_successful')); + return $password; + } + + $this->trigger_events(array('post_forgotten_password_complete', 'post_forgotten_password_complete_unsuccessful')); + return FALSE; + } + + /** + * register + * + * @return bool + * @author Mathew + **/ + public function register($identity, $password, $email, $additional_data = array(), $groups = array()) + { + $this->trigger_events('pre_register'); + + $manual_activation = $this->config->item('manual_activation', 'ion_auth'); + + if ($this->identity_check($identity)) + { + $this->set_error('account_creation_duplicate_identity'); + return FALSE; + } + elseif ( !$this->config->item('default_group', 'ion_auth') && empty($groups) ) + { + $this->set_error('account_creation_missing_default_group'); + return FALSE; + } + + // check if the default set in config exists in database + $query = $this->db->get_where($this->tables['groups'],array('name' => $this->config->item('default_group', 'ion_auth')),1)->row(); + if( !isset($query->id) && empty($groups) ) + { + $this->set_error('account_creation_invalid_default_group'); + return FALSE; + } + + // capture default group details + $default_group = $query; + + // IP Address + $ip_address = $this->_prepare_ip($this->input->ip_address()); + $salt = $this->store_salt ? $this->salt() : FALSE; + $password = $this->hash_password($password, $salt); + + // Users table. + $data = array( + $this->identity_column => $identity, + 'password' => $password, + 'email' => $email, + 'ip_address' => $ip_address, + 'created_on' => time(), + 'active' => ($manual_activation === false ? 1 : 0) + ); + + if ($this->store_salt) + { + $data['salt'] = $salt; + } + + // filter out any data passed that doesnt have a matching column in the users table + // and merge the set user data and the additional data + $user_data = array_merge($this->_filter_data($this->tables['users'], $additional_data), $data); + + $this->trigger_events('extra_set'); + + $this->db->insert($this->tables['users'], $user_data); + + $id = $this->db->insert_id(); + + // add in groups array if it doesn't exists and stop adding into default group if default group ids are set + if( isset($default_group->id) && empty($groups) ) + { + $groups[] = $default_group->id; + } + + if (!empty($groups)) + { + // add to groups + foreach ($groups as $group) + { + $this->add_to_group($group, $id); + } + } + + $this->trigger_events('post_register'); + + return (isset($id)) ? $id : FALSE; + } + + /** + * login + * + * @return bool + * @author Mathew + **/ + public function login($identity, $password, $remember=FALSE) + { + $this->trigger_events('pre_login'); + + if (empty($identity) || empty($password)) + { + $this->set_error('login_unsuccessful'); + return FALSE; + } + + $this->trigger_events('extra_where'); + + $query = $this->db->select($this->identity_column . ', email, id, password, active, last_login') + ->where($this->identity_column, $identity) + ->limit(1) + ->order_by('id', 'desc') + ->get($this->tables['users']); + + if($this->is_time_locked_out($identity)) + { + // Hash something anyway, just to take up time + $this->hash_password($password); + + $this->trigger_events('post_login_unsuccessful'); + $this->set_error('login_timeout'); + + return FALSE; + } + + if ($query->num_rows() === 1) + { + $user = $query->row(); + + $password = $this->hash_password_db($user->id, $password); + + if ($password === TRUE) + { + if ($user->active == 0) + { + $this->trigger_events('post_login_unsuccessful'); + $this->set_error('login_unsuccessful_not_active'); + + return FALSE; + } + + $this->set_session($user); + + $this->update_last_login($user->id); + + $this->clear_login_attempts($identity); + + if ($remember && $this->config->item('remember_users', 'ion_auth')) + { + $this->remember_user($user->id); + } + + $this->trigger_events(array('post_login', 'post_login_successful')); + $this->set_message('login_successful'); + + return TRUE; + } + } + + // Hash something anyway, just to take up time + $this->hash_password($password); + + $this->increase_login_attempts($identity); + + $this->trigger_events('post_login_unsuccessful'); + $this->set_error('login_unsuccessful'); + + return FALSE; + } + + /** + * is_max_login_attempts_exceeded + * Based on code from Tank Auth, by Ilya Konyukhov (https://github.com/ilkon/Tank-Auth) + * + * @param string $identity + * @return boolean + **/ + public function is_max_login_attempts_exceeded($identity) { + if ($this->config->item('track_login_attempts', 'ion_auth')) { + $max_attempts = $this->config->item('maximum_login_attempts', 'ion_auth'); + if ($max_attempts > 0) { + $attempts = $this->get_attempts_num($identity); + return $attempts >= $max_attempts; + } + } + return FALSE; + } + + /** + * Get number of attempts to login occured from given IP-address or identity + * Based on code from Tank Auth, by Ilya Konyukhov (https://github.com/ilkon/Tank-Auth) + * + * @param string $identity + * @return int + */ + public function get_attempts_num($identity) + { + if ($this->config->item('track_login_attempts', 'ion_auth')) { + $ip_address = $this->_prepare_ip($this->input->ip_address()); + $this->db->select('1', FALSE); + if ($this->config->item('track_login_ip_address', 'ion_auth')) { + $this->db->where('ip_address', $ip_address); + $this->db->where('login', $identity); + } else if (strlen($identity) > 0) $this->db->or_where('login', $identity); + $qres = $this->db->get($this->tables['login_attempts']); + return $qres->num_rows(); + } + return 0; + } + + /** + * Get a boolean to determine if an account should be locked out due to + * exceeded login attempts within a given period + * + * @return boolean + */ + public function is_time_locked_out($identity) { + + return $this->is_max_login_attempts_exceeded($identity) && $this->get_last_attempt_time($identity) > time() - $this->config->item('lockout_time', 'ion_auth'); + } + + /** + * Get the time of the last time a login attempt occured from given IP-address or identity + * + * @param string $identity + * @return int + */ + public function get_last_attempt_time($identity) { + if ($this->config->item('track_login_attempts', 'ion_auth')) { + $ip_address = $this->_prepare_ip($this->input->ip_address()); + + $this->db->select('time'); + if ($this->config->item('track_login_ip_address', 'ion_auth')) $this->db->where('ip_address', $ip_address); + else if (strlen($identity) > 0) $this->db->or_where('login', $identity); + $this->db->order_by('id', 'desc'); + $qres = $this->db->get($this->tables['login_attempts'], 1); + + if($qres->num_rows() > 0) { + return $qres->row()->time; + } + } + + return 0; + } + + /** + * increase_login_attempts + * Based on code from Tank Auth, by Ilya Konyukhov (https://github.com/ilkon/Tank-Auth) + * + * @param string $identity + **/ + public function increase_login_attempts($identity) { + if ($this->config->item('track_login_attempts', 'ion_auth')) { + $ip_address = $this->_prepare_ip($this->input->ip_address()); + return $this->db->insert($this->tables['login_attempts'], array('ip_address' => $ip_address, 'login' => $identity, 'time' => time())); + } + return FALSE; + } + + /** + * clear_login_attempts + * Based on code from Tank Auth, by Ilya Konyukhov (https://github.com/ilkon/Tank-Auth) + * + * @param string $identity + **/ + public function clear_login_attempts($identity, $expire_period = 86400) { + if ($this->config->item('track_login_attempts', 'ion_auth')) { + $ip_address = $this->_prepare_ip($this->input->ip_address()); + + $this->db->where(array('ip_address' => $ip_address, 'login' => $identity)); + // Purge obsolete login attempts + $this->db->or_where('time <', time() - $expire_period, FALSE); + + return $this->db->delete($this->tables['login_attempts']); + } + return FALSE; + } + + public function limit($limit) + { + $this->trigger_events('limit'); + $this->_ion_limit = $limit; + + return $this; + } + + public function offset($offset) + { + $this->trigger_events('offset'); + $this->_ion_offset = $offset; + + return $this; + } + + public function where($where, $value = NULL) + { + $this->trigger_events('where'); + + if (!is_array($where)) + { + $where = array($where => $value); + } + + array_push($this->_ion_where, $where); + + return $this; + } + + public function like($like, $value = NULL, $position = 'both') + { + $this->trigger_events('like'); + + if (!is_array($like)) + { + $like = array($like => array( + 'value' => $value, + 'position' => $position, + )); + } + + array_push($this->_ion_like, $like); + + return $this; + } + + public function select($select) + { + $this->trigger_events('select'); + + $this->_ion_select[] = $select; + + return $this; + } + + public function order_by($by, $order='desc') + { + $this->trigger_events('order_by'); + + $this->_ion_order_by = $by; + $this->_ion_order = $order; + + return $this; + } + + public function row() + { + $this->trigger_events('row'); + + $row = $this->response->row(); + + return $row; + } + + public function row_array() + { + $this->trigger_events(array('row', 'row_array')); + + $row = $this->response->row_array(); + + return $row; + } + + public function result() + { + $this->trigger_events('result'); + + $result = $this->response->result(); + + return $result; + } + + public function result_array() + { + $this->trigger_events(array('result', 'result_array')); + + $result = $this->response->result_array(); + + return $result; + } + + public function num_rows() + { + $this->trigger_events(array('num_rows')); + + $result = $this->response->num_rows(); + + return $result; + } + + /** + * users + * + * @return object Users + * @author Ben Edmunds + **/ + public function users($groups = NULL) + { + $this->trigger_events('users'); + + if (isset($this->_ion_select) && !empty($this->_ion_select)) + { + foreach ($this->_ion_select as $select) + { + $this->db->select($select); + } + + $this->_ion_select = array(); + } + else + { + //default selects + $this->db->select(array( + $this->tables['users'].'.*', + $this->tables['users'].'.id as id', + $this->tables['users'].'.id as user_id' + )); + } + + // filter by group id(s) if passed + if (isset($groups)) + { + // build an array if only one group was passed + if (!is_array($groups)) + { + $groups = Array($groups); + } + + // join and then run a where_in against the group ids + if (isset($groups) && !empty($groups)) + { + $this->db->distinct(); + $this->db->join( + $this->tables['users_groups'], + $this->tables['users_groups'].'.'.$this->join['users'].'='.$this->tables['users'].'.id', + 'inner' + ); + } + + // verify if group name or group id was used and create and put elements in different arrays + $group_ids = array(); + $group_names = array(); + foreach($groups as $group) + { + if(is_numeric($group)) $group_ids[] = $group; + else $group_names[] = $group; + } + $or_where_in = (!empty($group_ids) && !empty($group_names)) ? 'or_where_in' : 'where_in'; + // if group name was used we do one more join with groups + if(!empty($group_names)) + { + $this->db->join($this->tables['groups'], $this->tables['users_groups'] . '.' . $this->join['groups'] . ' = ' . $this->tables['groups'] . '.id', 'inner'); + $this->db->where_in($this->tables['groups'] . '.name', $group_names); + } + if(!empty($group_ids)) + { + $this->db->{$or_where_in}($this->tables['users_groups'].'.'.$this->join['groups'], $group_ids); + } + } + + $this->trigger_events('extra_where'); + + // run each where that was passed + if (isset($this->_ion_where) && !empty($this->_ion_where)) + { + foreach ($this->_ion_where as $where) + { + $this->db->where($where); + } + + $this->_ion_where = array(); + } + + if (isset($this->_ion_like) && !empty($this->_ion_like)) + { + foreach ($this->_ion_like as $like) + { + $this->db->or_like($like); + } + + $this->_ion_like = array(); + } + + if (isset($this->_ion_limit) && isset($this->_ion_offset)) + { + $this->db->limit($this->_ion_limit, $this->_ion_offset); + + $this->_ion_limit = NULL; + $this->_ion_offset = NULL; + } + else if (isset($this->_ion_limit)) + { + $this->db->limit($this->_ion_limit); + + $this->_ion_limit = NULL; + } + + // set the order + if (isset($this->_ion_order_by) && isset($this->_ion_order)) + { + $this->db->order_by($this->_ion_order_by, $this->_ion_order); + + $this->_ion_order = NULL; + $this->_ion_order_by = NULL; + } + + $this->response = $this->db->get($this->tables['users']); + + return $this; + } + + /** + * user + * + * @return object + * @author Ben Edmunds + **/ + public function user($id = NULL) + { + $this->trigger_events('user'); + + // if no id was passed use the current users id + $id = isset($id) ? $id : $this->session->userdata('user_id'); + + $this->limit(1); + $this->order_by($this->tables['users'].'.id', 'desc'); + $this->where($this->tables['users'].'.id', $id); + + $this->users(); + + return $this; + } + + /** + * get_users_groups + * + * @return array + * @author Ben Edmunds + **/ + public function get_users_groups($id=FALSE) + { + $this->trigger_events('get_users_group'); + + // if no id was passed use the current users id + $id || $id = $this->session->userdata('user_id'); + + return $this->db->select($this->tables['users_groups'].'.'.$this->join['groups'].' as id, '.$this->tables['groups'].'.name, '.$this->tables['groups'].'.description') + ->where($this->tables['users_groups'].'.'.$this->join['users'], $id) + ->join($this->tables['groups'], $this->tables['users_groups'].'.'.$this->join['groups'].'='.$this->tables['groups'].'.id') + ->get($this->tables['users_groups']); + } + + /** + * add_to_group + * + * @return bool + * @author Ben Edmunds + **/ + public function add_to_group($group_ids, $user_id=false) + { + $this->trigger_events('add_to_group'); + + // if no id was passed use the current users id + $user_id || $user_id = $this->session->userdata('user_id'); + + if(!is_array($group_ids)) + { + $group_ids = array($group_ids); + } + + $return = 0; + + // Then insert each into the database + foreach ($group_ids as $group_id) + { + if ($this->db->insert($this->tables['users_groups'], array( $this->join['groups'] => (float)$group_id, $this->join['users'] => (float)$user_id))) + { + if (isset($this->_cache_groups[$group_id])) { + $group_name = $this->_cache_groups[$group_id]; + } + else { + $group = $this->group($group_id)->result(); + $group_name = $group[0]->name; + $this->_cache_groups[$group_id] = $group_name; + } + $this->_cache_user_in_group[$user_id][$group_id] = $group_name; + + // Return the number of groups added + $return += 1; + } + } + + return $return; + } + + /** + * remove_from_group + * + * @return bool + * @author Ben Edmunds + **/ + public function remove_from_group($group_ids=false, $user_id=false) + { + $this->trigger_events('remove_from_group'); + + // user id is required + if(empty($user_id)) + { + return FALSE; + } + + // if group id(s) are passed remove user from the group(s) + if( ! empty($group_ids)) + { + if(!is_array($group_ids)) + { + $group_ids = array($group_ids); + } + + foreach($group_ids as $group_id) + { + $this->db->delete($this->tables['users_groups'], array($this->join['groups'] => (float)$group_id, $this->join['users'] => (float)$user_id)); + if (isset($this->_cache_user_in_group[$user_id]) && isset($this->_cache_user_in_group[$user_id][$group_id])) + { + unset($this->_cache_user_in_group[$user_id][$group_id]); + } + } + + $return = TRUE; + } + // otherwise remove user from all groups + else + { + if ($return = $this->db->delete($this->tables['users_groups'], array($this->join['users'] => (float)$user_id))) { + $this->_cache_user_in_group[$user_id] = array(); + } + } + return $return; + } + + /** + * groups + * + * @return object + * @author Ben Edmunds + **/ + public function groups() + { + $this->trigger_events('groups'); + + // run each where that was passed + if (isset($this->_ion_where) && !empty($this->_ion_where)) + { + foreach ($this->_ion_where as $where) + { + $this->db->where($where); + } + $this->_ion_where = array(); + } + + if (isset($this->_ion_limit) && isset($this->_ion_offset)) + { + $this->db->limit($this->_ion_limit, $this->_ion_offset); + + $this->_ion_limit = NULL; + $this->_ion_offset = NULL; + } + else if (isset($this->_ion_limit)) + { + $this->db->limit($this->_ion_limit); + + $this->_ion_limit = NULL; + } + + // set the order + if (isset($this->_ion_order_by) && isset($this->_ion_order)) + { + $this->db->order_by($this->_ion_order_by, $this->_ion_order); + } + + $this->response = $this->db->get($this->tables['groups']); + + return $this; + } + + /** + * group + * + * @return object + * @author Ben Edmunds + **/ + public function group($id = NULL) + { + $this->trigger_events('group'); + + if (isset($id)) + { + $this->where($this->tables['groups'].'.id', $id); + } + + $this->limit(1); + $this->order_by('id', 'desc'); + + return $this->groups(); + } + + /** + * update + * + * @return bool + * @author Phil Sturgeon + **/ + public function update($id, array $data) + { + $this->trigger_events('pre_update_user'); + + $user = $this->user($id)->row(); + + $this->db->trans_begin(); + + if (array_key_exists($this->identity_column, $data) && $this->identity_check($data[$this->identity_column]) && $user->{$this->identity_column} !== $data[$this->identity_column]) + { + $this->db->trans_rollback(); + $this->set_error('account_creation_duplicate_identity'); + + $this->trigger_events(array('post_update_user', 'post_update_user_unsuccessful')); + $this->set_error('update_unsuccessful'); + + return FALSE; + } + + // Filter the data passed + $data = $this->_filter_data($this->tables['users'], $data); + + if (array_key_exists($this->identity_column, $data) || array_key_exists('password', $data) || array_key_exists('email', $data)) + { + if (array_key_exists('password', $data)) + { + if( ! empty($data['password'])) + { + $data['password'] = $this->hash_password($data['password'], $user->salt); + } + else + { + // unset password so it doesn't effect database entry if no password passed + unset($data['password']); + } + } + } + + $this->trigger_events('extra_where'); + $this->db->update($this->tables['users'], $data, array('id' => $user->id)); + + if ($this->db->trans_status() === FALSE) + { + $this->db->trans_rollback(); + + $this->trigger_events(array('post_update_user', 'post_update_user_unsuccessful')); + $this->set_error('update_unsuccessful'); + return FALSE; + } + + $this->db->trans_commit(); + + $this->trigger_events(array('post_update_user', 'post_update_user_successful')); + $this->set_message('update_successful'); + return TRUE; + } + + /** + * delete_user + * + * @return bool + * @author Phil Sturgeon + **/ + public function delete_user($id) + { + $this->trigger_events('pre_delete_user'); + + $this->db->trans_begin(); + + // remove user from groups + $this->remove_from_group(NULL, $id); + + // delete user from users table should be placed after remove from group + $this->db->delete($this->tables['users'], array('id' => $id)); + + // if user does not exist in database then it returns FALSE else removes the user from groups + if ($this->db->affected_rows() <= 0) + { + return FALSE; + } + + if ($this->db->trans_status() === FALSE) + { + $this->db->trans_rollback(); + $this->trigger_events(array('post_delete_user', 'post_delete_user_unsuccessful')); + $this->set_error('delete_unsuccessful'); + return FALSE; + } + + $this->db->trans_commit(); + + $this->trigger_events(array('post_delete_user', 'post_delete_user_successful')); + $this->set_message('delete_successful'); + return TRUE; + } + + /** + * update_last_login + * + * @return bool + * @author Ben Edmunds + **/ + public function update_last_login($id) + { + $this->trigger_events('update_last_login'); + + $this->load->helper('date'); + + $this->trigger_events('extra_where'); + + $this->db->update($this->tables['users'], array('last_login' => time()), array('id' => $id)); + + return $this->db->affected_rows() == 1; + } + + /** + * set_lang + * + * @return bool + * @author Ben Edmunds + **/ + public function set_lang($lang = 'en') + { + $this->trigger_events('set_lang'); + + // if the user_expire is set to zero we'll set the expiration two years from now. + if($this->config->item('user_expire', 'ion_auth') === 0) + { + $expire = (60*60*24*365*2); + } + // otherwise use what is set + else + { + $expire = $this->config->item('user_expire', 'ion_auth'); + } + + set_cookie(array( + 'name' => 'lang_code', + 'value' => $lang, + 'expire' => $expire + )); + + return TRUE; + } + + /** + * set_session + * + * @return bool + * @author jrmadsen67 + **/ + public function set_session($user) + { + + $this->trigger_events('pre_set_session'); + + $session_data = array( + 'identity' => $user->{$this->identity_column}, + $this->identity_column => $user->{$this->identity_column}, + 'email' => $user->email, + 'user_id' => $user->id, //everyone likes to overwrite id so we'll use user_id + 'old_last_login' => $user->last_login + ); + + $this->session->set_userdata($session_data); + + $this->trigger_events('post_set_session'); + + return TRUE; + } + + /** + * remember_user + * + * @return bool + * @author Ben Edmunds + **/ + public function remember_user($id) + { + $this->trigger_events('pre_remember_user'); + + if (!$id) + { + return FALSE; + } + + $user = $this->user($id)->row(); + + $salt = $this->salt(); + + $this->db->update($this->tables['users'], array('remember_code' => $salt), array('id' => $id)); + + if ($this->db->affected_rows() > -1) + { + // if the user_expire is set to zero we'll set the expiration two years from now. + if($this->config->item('user_expire', 'ion_auth') === 0) + { + $expire = (60*60*24*365*2); + } + // otherwise use what is set + else + { + $expire = $this->config->item('user_expire', 'ion_auth'); + } + + set_cookie(array( + 'name' => $this->config->item('identity_cookie_name', 'ion_auth'), + 'value' => $user->{$this->identity_column}, + 'expire' => $expire + )); + + set_cookie(array( + 'name' => $this->config->item('remember_cookie_name', 'ion_auth'), + 'value' => $salt, + 'expire' => $expire + )); + + $this->trigger_events(array('post_remember_user', 'remember_user_successful')); + return TRUE; + } + + $this->trigger_events(array('post_remember_user', 'remember_user_unsuccessful')); + return FALSE; + } + + /** + * login_remembed_user + * + * @return bool + * @author Ben Edmunds + **/ + public function login_remembered_user() + { + $this->trigger_events('pre_login_remembered_user'); + + // check for valid data + if (!get_cookie($this->config->item('identity_cookie_name', 'ion_auth')) + || !get_cookie($this->config->item('remember_cookie_name', 'ion_auth')) + || !$this->identity_check(get_cookie($this->config->item('identity_cookie_name', 'ion_auth')))) + { + $this->trigger_events(array('post_login_remembered_user', 'post_login_remembered_user_unsuccessful')); + return FALSE; + } + + // get the user + $this->trigger_events('extra_where'); + $query = $this->db->select($this->identity_column.', id, email, last_login') + ->where($this->identity_column, get_cookie($this->config->item('identity_cookie_name', 'ion_auth'))) + ->where('remember_code', get_cookie($this->config->item('remember_cookie_name', 'ion_auth'))) + ->limit(1) + ->order_by('id', 'desc') + ->get($this->tables['users']); + + // if the user was found, sign them in + if ($query->num_rows() == 1) + { + $user = $query->row(); + + $this->update_last_login($user->id); + + $this->set_session($user); + + // extend the users cookies if the option is enabled + if ($this->config->item('user_extend_on_login', 'ion_auth')) + { + $this->remember_user($user->id); + } + + $this->trigger_events(array('post_login_remembered_user', 'post_login_remembered_user_successful')); + return TRUE; + } + + $this->trigger_events(array('post_login_remembered_user', 'post_login_remembered_user_unsuccessful')); + return FALSE; + } + + + /** + * create_group + * + * @author aditya menon + */ + public function create_group($group_name = FALSE, $group_description = '', $additional_data = array()) + { + // bail if the group name was not passed + if(!$group_name) + { + $this->set_error('group_name_required'); + return FALSE; + } + + // bail if the group name already exists + $existing_group = $this->db->get_where($this->tables['groups'], array('name' => $group_name))->num_rows(); + if($existing_group !== 0) + { + $this->set_error('group_already_exists'); + return FALSE; + } + + $data = array('name'=>$group_name,'description'=>$group_description); + + // filter out any data passed that doesnt have a matching column in the groups table + // and merge the set group data and the additional data + if (!empty($additional_data)) $data = array_merge($this->_filter_data($this->tables['groups'], $additional_data), $data); + + $this->trigger_events('extra_group_set'); + + // insert the new group + $this->db->insert($this->tables['groups'], $data); + $group_id = $this->db->insert_id(); + + // report success + $this->set_message('group_creation_successful'); + // return the brand new group id + return $group_id; + } + + /** + * update_group + * + * @return bool + * @author aditya menon + **/ + public function update_group($group_id = FALSE, $group_name = FALSE, $additional_data = array()) + { + if (empty($group_id)) return FALSE; + + $data = array(); + + if (!empty($group_name)) + { + // we are changing the name, so do some checks + + // bail if the group name already exists + $existing_group = $this->db->get_where($this->tables['groups'], array('name' => $group_name))->row(); + if(isset($existing_group->id) && $existing_group->id != $group_id) + { + $this->set_error('group_already_exists'); + return FALSE; + } + + $data['name'] = $group_name; + } + + // restrict change of name of the admin group + $group = $this->db->get_where($this->tables['groups'], array('id' => $group_id))->row(); + if($this->config->item('admin_group', 'ion_auth') === $group->name && $group_name !== $group->name) + { + $this->set_error('group_name_admin_not_alter'); + return FALSE; + } + + + // IMPORTANT!! Third parameter was string type $description; this following code is to maintain backward compatibility + // New projects should work with 3rd param as array + if (is_string($additional_data)) $additional_data = array('description' => $additional_data); + + + // filter out any data passed that doesnt have a matching column in the groups table + // and merge the set group data and the additional data + if (!empty($additional_data)) $data = array_merge($this->_filter_data($this->tables['groups'], $additional_data), $data); + + + $this->db->update($this->tables['groups'], $data, array('id' => $group_id)); + + $this->set_message('group_update_successful'); + + return TRUE; + } + + /** + * delete_group + * + * @return bool + * @author aditya menon + **/ + public function delete_group($group_id = FALSE) + { + // bail if mandatory param not set + if(!$group_id || empty($group_id)) + { + return FALSE; + } + $group = $this->group($group_id)->row(); + if($group->name == $this->config->item('admin_group', 'ion_auth')) + { + $this->trigger_events(array('post_delete_group', 'post_delete_group_notallowed')); + $this->set_error('group_delete_notallowed'); + return FALSE; + } + + $this->trigger_events('pre_delete_group'); + + $this->db->trans_begin(); + + // remove all users from this group + $this->db->delete($this->tables['users_groups'], array($this->join['groups'] => $group_id)); + // remove the group itself + $this->db->delete($this->tables['groups'], array('id' => $group_id)); + + if ($this->db->trans_status() === FALSE) + { + $this->db->trans_rollback(); + $this->trigger_events(array('post_delete_group', 'post_delete_group_unsuccessful')); + $this->set_error('group_delete_unsuccessful'); + return FALSE; + } + + $this->db->trans_commit(); + + $this->trigger_events(array('post_delete_group', 'post_delete_group_successful')); + $this->set_message('group_delete_successful'); + return TRUE; + } + + public function set_hook($event, $name, $class, $method, $arguments) + { + $this->_ion_hooks->{$event}[$name] = new stdClass; + $this->_ion_hooks->{$event}[$name]->class = $class; + $this->_ion_hooks->{$event}[$name]->method = $method; + $this->_ion_hooks->{$event}[$name]->arguments = $arguments; + } + + public function remove_hook($event, $name) + { + if (isset($this->_ion_hooks->{$event}[$name])) + { + unset($this->_ion_hooks->{$event}[$name]); + } + } + + public function remove_hooks($event) + { + if (isset($this->_ion_hooks->$event)) + { + unset($this->_ion_hooks->$event); + } + } + + protected function _call_hook($event, $name) + { + if (isset($this->_ion_hooks->{$event}[$name]) && method_exists($this->_ion_hooks->{$event}[$name]->class, $this->_ion_hooks->{$event}[$name]->method)) + { + $hook = $this->_ion_hooks->{$event}[$name]; + + return call_user_func_array(array($hook->class, $hook->method), $hook->arguments); + } + + return FALSE; + } + + public function trigger_events($events) + { + if (is_array($events) && !empty($events)) + { + foreach ($events as $event) + { + $this->trigger_events($event); + } + } + else + { + if (isset($this->_ion_hooks->$events) && !empty($this->_ion_hooks->$events)) + { + foreach ($this->_ion_hooks->$events as $name => $hook) + { + $this->_call_hook($events, $name); + } + } + } + } + + /** + * set_message_delimiters + * + * Set the message delimiters + * + * @return void + * @author Ben Edmunds + **/ + public function set_message_delimiters($start_delimiter, $end_delimiter) + { + $this->message_start_delimiter = $start_delimiter; + $this->message_end_delimiter = $end_delimiter; + + return TRUE; + } + + /** + * set_error_delimiters + * + * Set the error delimiters + * + * @return void + * @author Ben Edmunds + **/ + public function set_error_delimiters($start_delimiter, $end_delimiter) + { + $this->error_start_delimiter = $start_delimiter; + $this->error_end_delimiter = $end_delimiter; + + return TRUE; + } + + /** + * set_message + * + * Set a message + * + * @return void + * @author Ben Edmunds + **/ + public function set_message($message) + { + $this->messages[] = $message; + + return $message; + } + + + + /** + * messages + * + * Get the messages + * + * @return void + * @author Ben Edmunds + **/ + public function messages() + { + $_output = ''; + foreach ($this->messages as $message) + { + $messageLang = $this->lang->line($message) ? $this->lang->line($message) : '##' . $message . '##'; + $_output .= $this->message_start_delimiter . $messageLang . $this->message_end_delimiter; + } + + return $_output; + } + + /** + * messages as array + * + * Get the messages as an array + * + * @return array + * @author Raul Baldner Junior + **/ + public function messages_array($langify = TRUE) + { + if ($langify) + { + $_output = array(); + foreach ($this->messages as $message) + { + $messageLang = $this->lang->line($message) ? $this->lang->line($message) : '##' . $message . '##'; + $_output[] = $this->message_start_delimiter . $messageLang . $this->message_end_delimiter; + } + return $_output; + } + else + { + return $this->messages; + } + } + + + /** + * clear_messages + * + * Clear messages + * + * @return void + * @author Ben Edmunds + **/ + public function clear_messages() + { + $this->messages = array(); + + return TRUE; + } + + + /** + * set_error + * + * Set an error message + * + * @return void + * @author Ben Edmunds + **/ + public function set_error($error) + { + $this->errors[] = $error; + + return $error; + } + + /** + * errors + * + * Get the error message + * + * @return void + * @author Ben Edmunds + **/ + public function errors() + { + $_output = ''; + foreach ($this->errors as $error) + { + $errorLang = $this->lang->line($error) ? $this->lang->line($error) : '##' . $error . '##'; + $_output .= $this->error_start_delimiter . $errorLang . $this->error_end_delimiter; + } + + return $_output; + } + + /** + * errors as array + * + * Get the error messages as an array + * + * @return array + * @author Raul Baldner Junior + **/ + public function errors_array($langify = TRUE) + { + if ($langify) + { + $_output = array(); + foreach ($this->errors as $error) + { + $errorLang = $this->lang->line($error) ? $this->lang->line($error) : '##' . $error . '##'; + $_output[] = $this->error_start_delimiter . $errorLang . $this->error_end_delimiter; + } + return $_output; + } + else + { + return $this->errors; + } + } + + + /** + * clear_errors + * + * Clear Errors + * + * @return void + * @author Ben Edmunds + **/ + public function clear_errors() + { + $this->errors = array(); + + return TRUE; + } + + + + protected function _filter_data($table, $data) + { + $filtered_data = array(); + $columns = $this->db->list_fields($table); + + if (is_array($data)) + { + foreach ($columns as $column) + { + if (array_key_exists($column, $data)) + $filtered_data[$column] = $data[$column]; + } + } + + return $filtered_data; + } + + protected function _prepare_ip($ip_address) { + // just return the string IP address now for better compatibility + return $ip_address; + } +} diff --git a/old_code_ci3/models/IpdDischarge_M.php b/old_code_ci3/models/IpdDischarge_M.php new file mode 100644 index 0000000..5776420 --- /dev/null +++ b/old_code_ci3/models/IpdDischarge_M.php @@ -0,0 +1,416 @@ +db->insert("ipd_discharge", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_ipdDischarge($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge", $data); + } + + + public function insert_ipd_discharge_1_a($data) { + + if ($this->db->insert("ipd_discharge_1_a", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_ipd_discharge_1_a($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_1_a", $data); + } + + + public function update_insert_ipd_discharge_1_b($data,$ipd_id,$gen_exam_id) { + $sql="select id from ipd_discharge_1_b where ipd_d_id=".$ipd_id." and col_id=".$gen_exam_id; + $query = $this->db->query($sql); + $discharge_general_exam= $query->result(); + + if(count($discharge_general_exam)>0) + { + $this->db->set($data); + $this->db->where("id", $discharge_general_exam[0]->id); + $this->db->update("ipd_discharge_1_b", $data); + + return $discharge_general_exam[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_1_b", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + public function update_insert_ipd_discharge_1_d($data,$ipd_id,$gen_exam_id) { + $sql="select id from ipd_discharge_1_d where ipd_d_id=".$ipd_id." and col_id=".$gen_exam_id; + $query = $this->db->query($sql); + $discharge_general_exam= $query->result(); + + if(count($discharge_general_exam)>0) + { + $this->db->set($data); + $this->db->where("id", $discharge_general_exam[0]->id); + $this->db->update("ipd_discharge_1_d", $data); + + return $discharge_general_exam[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_1_d", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + public function update_insert_ipd_discharge_1_e($data,$ipd_id,$gen_exam_id) { + $sql="select id from ipd_discharge_1_e where ipd_d_id=".$ipd_id." and col_id=".$gen_exam_id; + $query = $this->db->query($sql); + $discharge_general_exam= $query->result(); + + if(count($discharge_general_exam)>0) + { + $this->db->set($data); + $this->db->where("id", $discharge_general_exam[0]->id); + $this->db->update("ipd_discharge_1_e", $data); + + return $discharge_general_exam[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_1_e", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + + + public function update_insert_ipd_discharge_1_b_final($data,$ipd_id,$gen_exam_id) { + $sql="select id from ipd_discharge_1_b_final where ipd_d_id=".$ipd_id." and col_id=".$gen_exam_id; + $query = $this->db->query($sql); + $discharge_general_exam= $query->result(); + + if(count($discharge_general_exam)>0) + { + $this->db->set($data); + $this->db->where("id", $discharge_general_exam[0]->id); + $this->db->update("ipd_discharge_1_b_final", $data); + + return $discharge_general_exam[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_1_b_final", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + public function update_insert_ipd_discharge_2($data,$ipd_id) { + $sql="select id from ipd_discharge_2 where ipd_d_id=".$ipd_id.""; + $query = $this->db->query($sql); + $discharge_general_exam= $query->result(); + + if(count($discharge_general_exam)>0) + { + $this->db->set($data); + $this->db->where("id", $discharge_general_exam[0]->id); + $this->db->update("ipd_discharge_2", $data); + + return $discharge_general_exam[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_2", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + //ipd_discharge_drug_food_interaction + + public function update_insert_ipd_discharge_drug_food_interaction($data,$ipd_id) { + $sql="select id from ipd_discharge_drug_food_interaction where ipd_id=".$ipd_id.""; + $query = $this->db->query($sql); + $ipd_discharge_drug_food_interaction= $query->result(); + + if(count($ipd_discharge_drug_food_interaction)>0) + { + $this->db->set($data); + $this->db->where("id", $ipd_discharge_drug_food_interaction[0]->id); + $this->db->update("ipd_discharge_drug_food_interaction", $data); + + return $ipd_discharge_drug_food_interaction[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_drug_food_interaction", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + // Surgery Table + + + public function insert_p_surgery($data) { + if ($this->db->insert("ipd_discharge_surgery", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_surgery($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_surgery", $data); + } + + public function remove_p_surgery($delid) { + $this->db->where("id", $delid); + $this->db->delete("ipd_discharge_surgery"); + } + + // Prosedure Table + + + public function insert_p_procedure($data) { + if ($this->db->insert("ipd_discharge_procedure", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_procedure($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_procedure", $data); + } + + public function remove_p_procedure($delid) { + $this->db->where("id", $delid); + $this->db->delete("ipd_discharge_procedure"); + } + + + + // Prescription Complaint + + public function insert_p_complaint($data) { + if ($this->db->insert("ipd_discharge_complaint", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_complaint($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_complaint", $data); + } + + public function remove_p_complaint($delid) { + $this->db->where("id", $delid); + $this->db->delete("ipd_discharge_complaint"); + } + + public function update_insert_ipd_discharge_complaint_remark($data,$ipd_id) { + $sql="select id from ipd_discharge_complaint_remark where ipd_id=".$ipd_id.""; + $query = $this->db->query($sql); + $data_rec= $query->result(); + + if(count($data_rec)>0) + { + $this->db->set($data); + $this->db->where("id", $data_rec[0]->id); + $this->db->update("ipd_discharge_complaint_remark", $data); + + return $data_rec[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_complaint_remark", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + + // Diagnosis + + public function insert_p_diagnosis($data) { + if ($this->db->insert("ipd_discharge_diagnosis", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_diagnosis($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_diagnosis", $data); + } + + public function remove_p_diagnosis($delid) { + $this->db->where("id", $delid); + $this->db->delete("ipd_discharge_diagnosis"); + } + + public function update_insert_ipd_discharge_diagnosis_remark($data,$ipd_id) { + $sql="select id from ipd_discharge_diagnosis_remark where ipd_id=".$ipd_id.""; + $query = $this->db->query($sql); + $data_rec= $query->result(); + + if(count($data_rec)>0) + { + $this->db->set($data); + $this->db->where("id", $data_rec[0]->id); + $this->db->update("ipd_discharge_diagnosis_remark", $data); + + return $data_rec[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_diagnosis_remark", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + //Investigtions + + public function update_insert_ipd_discharge_investigtions_inhos($data,$ipd_id) { + $sql="select id from ipd_discharge_investigtions_inhos where ipd_id=".$ipd_id.""; + $query = $this->db->query($sql); + $data_rec= $query->result(); + + if(count($data_rec)>0) + { + $this->db->set($data); + $this->db->where("id", $data_rec[0]->id); + $this->db->update("ipd_discharge_investigtions_inhos", $data); + + return $data_rec[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_investigtions_inhos", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + //Course in the hospital + + + + public function insert_p_course($data) { + if ($this->db->insert("ipd_discharge_course", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_course($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_course", $data); + } + + public function remove_p_course($delid) { + $this->db->where("id", $delid); + $this->db->delete("ipd_discharge_course"); + } + + + public function update_insert_ipd_discharge_course_remark($data,$ipd_id) { + $sql="select id from ipd_discharge_course_remark where ipd_id=".$ipd_id.""; + $query = $this->db->query($sql); + $data_rec= $query->result(); + + if(count($data_rec)>0) + { + $this->db->set($data); + $this->db->where("id", $data_rec[0]->id); + $this->db->update("ipd_discharge_course_remark", $data); + + return $data_rec[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_course_remark", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + //Discharge Instructions + + public function update_insert_ipd_discharge_instructions($data,$ipd_id) { + $sql="select id from ipd_discharge_instructions where ipd_id=".$ipd_id.""; + $query = $this->db->query($sql); + $data_rec= $query->result(); + + if(count($data_rec)>0) + { + $this->db->set($data); + $this->db->where("id", $data_rec[0]->id); + $this->db->update("ipd_discharge_instructions", $data); + + return $data_rec[0]->id; + }else{ + if ($this->db->insert("ipd_discharge_instructions", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + } + + //Discharge Drugs + + public function insert_p_drug($data) { + if ($this->db->insert("ipd_discharge_prescrption_prescribed", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_drug($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_discharge_prescrption_prescribed", $data); + } + + public function remove_p_drug($delid) { + $this->db->where("id", $delid); + $this->db->delete("ipd_discharge_prescrption_prescribed"); + } + + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Ipd_M.php b/old_code_ci3/models/Ipd_M.php new file mode 100644 index 0000000..03d0ba8 --- /dev/null +++ b/old_code_ci3/models/Ipd_M.php @@ -0,0 +1,285 @@ +db->query($sql); + $result = $query->result_array(); + //print_r($result); + return $result; + } + + public function insert($data) { + + $sql = "SELECT * FROM ipd_master where ipd_status=0 and p_id=".$data['master']['p_id']; + $query = $this->db->query($sql); + $ipd_info= $query->result(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' ['.date('d-m-Y H:i:s'); + + if(count($ipd_info)<1) + { + if ($this->db->insert("ipd_master", $data['master'])) { + $insert_id = $this->db->insert_id(); + + $sql="SELECT count(*) as xtimes from ipd_master where id<=".$insert_id." and p_id=".$data['master']['p_id']; + $query = $this->db->query($sql); + $ipd_times= $query->result(); + + $pid=str_pad(substr($insert_id,-7,7),7,0,STR_PAD_LEFT); + $pid='A'.date('ym').$pid; + $udata = array( + 'ipd_code' => $pid, + 'ipd_times' => $ipd_times[0]->xtimes, + ); + + $this->db->set($udata); + $this->db->where("id", $insert_id); + $this->db->update("ipd_master", $udata); + + foreach ($data['doc_list'] as $doc_id) + { + $doc_data=array( + 'doc_id' => $doc_id, + 'ipd_id' => $insert_id, + 'log'=>'Insert By :'.$user_name + ); + $this->db->insert("ipd_master_doc_list", $doc_data); + } + + return $insert_id; + }else + return 0; + }else{ + return $ipd_info[0]->id; + } + + } + + public function add_ipd_doc($doc_data) + { + $insert_id=0; + if($this->db->insert("ipd_master_doc_list", $doc_data)) + { + $insert_id = $this->db->insert_id(); + } + return $insert_id; + } + + + public function remove_ipd_doc($ipd_doc_id) + { + $this->db->where('id', $del_id); + $q = $this->db->get('ipd_master_doc_list'); + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $data['update_by_id']=$user_id; + $data['update_by']=$user_name.'['.date('Y-m-d H:i:s').']'; + + if ($this->db->insert("ipd_master_doc_list_delete", $data)) { + //$this->db->where("id", $del_id); + $this->db->delete("ipd_master_doc_list","id=".$del_id); + return 1; + }else{ + return 0; + } + } + + public function bedassign($data) { + if ($this->db->insert("ipd_bed_assign", $data)) { + $insert_id = $this->db->insert_id(); + + $datau = array( + 'bed_used_p_id' => 0 + ); + + $this->db->set($datau); + $this->db->where("bed_used_p_id",$data['ipd_id']); + $this->db->update("hc_bed_master", $datau); + + $datau = array( + 'bed_used_p_id' => $data['ipd_id'] + ); + + $this->db->set($datau); + $this->db->where("id", $data['bed_id']); + $this->db->update("hc_bed_master", $datau); + + return $insert_id; + }else + return 0; + } + + public function calculate_IPD($IPD_NO) + { + $this->db->query("CALL p_cal_ipd_master($IPD_NO)"); + } + + public function update($data,$old_id_no) { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from ipd_master where id=".$old_id_no; + $query = $this->db->query($sql); + $data1=$query->result_array(); + + if(count($data1)>0) + { + $update_emp_name=$user_id.'['.$user_name.']'.date('Y-m-d H:i:s'); + $Old_Update_data=($data1[0]['log']==''?' ':$data1[0]['log']).PHP_EOL; + + $change_data=compare_arrays($data1[0],$data); + if(strlen($change_data)>0) + { + $data['log']=$Old_Update_data.$change_data.'Update By :'.$update_emp_name; + } + + } + + $this->db->where("id", $old_id_no); + $this->db->update("ipd_master", $data); + } + + public function insert_ipd_item($data) { + + if ($this->db->insert("ipd_invoice_item", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_ipd_item($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from ipd_invoice_item where id=".$old_id_no; + $query = $this->db->query($sql); + $data1=$query->result_array(); + + if(count($data1)>0) + { + $update_emp_name=$user_id.'['.$user_name.']'.date('Y-m-d H:i:s'); + $Old_Update_data=($data1[0]['log']==''?' ':$data1[0]['log']).PHP_EOL; + + $change_data=compare_arrays($data1[0],$data); + if(strlen($change_data)>0) + { + $data['log']=$Old_Update_data.$change_data.'Update By :'.$update_emp_name; + } + } + + $this->db->where("id", $old_id_no); + $this->db->update("ipd_invoice_item", $data); + + } + + public function deleteIpdinvoiceitem($del_id) + { + $this->db->where('id', $del_id); + $q = $this->db->get('ipd_invoice_item'); + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $data['update_by_id']=$user_id; + $data['update_by']=$user_name; + $data['update_action']='1'; + + if ($this->db->insert("ipd_invoice_item_update", $data)) { + //$this->db->where("id", $del_id); + $this->db->delete("ipd_invoice_item","id=".$del_id); + return 1; + }else{ + return 0; + } + } + + public function insert_package($data) { + + if ($this->db->insert("ipd_package", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_package($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("ipd_package", $data); + } + + public function deletepackage($del_id) + { + $this->db->where('id', $del_id); + $q = $this->db->get('ipd_package'); + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' D:'.date('d-m-Y h:i:s'); + + $data['update_by_id']=$user_id; + $data['update_by_action']=$user_name; + $data['update_action']='1'; + + if ($this->db->insert("ipd_package_update", $data)) { + //$this->db->where("id", $del_id); + $this->db->delete("ipd_package","id=".$del_id); + return 1; + }else{ + return 0; + } + } + + + public function insert_refer_ipd($data) { + if ($this->db->insert("ipd_refer", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function remove_refer_ipd($del_id) + { + $this->db->where('id', $del_id); + $q = $this->db->get('ipd_refer'); + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.' D:'.date('d-m-Y h:i:s'); + + $data['update_by_id']=$user_id; + $data['update_by_action']=$user_name; + $data['update_action']='1'; + + if ($this->db->insert("ipd_refer_update", $data)) { + //$this->db->where("id", $del_id); + $this->db->delete("ipd_refer","id=".$del_id); + return 1; + }else{ + return 0; + } + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Item_M.php b/old_code_ci3/models/Item_M.php new file mode 100644 index 0000000..ec746a4 --- /dev/null +++ b/old_code_ci3/models/Item_M.php @@ -0,0 +1,109 @@ +db->insert("hc_items", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function insert_type($data) { + + if ($this->db->insert("hc_item_type", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_type($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("itype_id", $old_id_no); + if ($this->db->update("hc_item_type", $data)) { + return 1; + }else + return 0; + } + + public function insert_in_item($data) { + + if ($this->db->insert("hc_items_insurance", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_in_item($data,$old_id_no) { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as action_by from hc_items_insurance where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("hc_items_insurance_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("hc_items_insurance", $data)) { + return 1; + }else + return 0; + } + + public function delete_in_item($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as action_by from hc_items_insurance where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("hc_items_insurance_update", $insertdata[0]); + $this->db->delete("hc_items_insurance", "id=".$old_id_no); + } + + return 0; + } + + public function update($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,1 as action,'".$user_name."' as action_by from hc_items where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("hc_items_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("hc_items", $data)) { + return 1; + }else + return 0; + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Item_ipd_M.php b/old_code_ci3/models/Item_ipd_M.php new file mode 100644 index 0000000..baf6b7a --- /dev/null +++ b/old_code_ci3/models/Item_ipd_M.php @@ -0,0 +1,109 @@ +db->insert("ipd_items", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function insert_type($data) { + + if ($this->db->insert("ipd_item_type", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_type($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("itype_id", $old_id_no); + if ($this->db->update("ipd_item_type", $data)) { + return 1; + }else + return 0; + } + + public function insert_in_item($data) { + if ($this->db->insert("ipd_items_insurance", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_in_item($data,$old_id_no) { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as action_by from ipd_items_insurance where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("ipd_items_insurance_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("ipd_items_insurance", $data)) { + return 1; + }else + return 0; + } + + public function delete_in_item($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as action_by from ipd_items_insurance where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("ipd_items_insurance_update", $insertdata[0]); + $this->db->delete("ipd_items_insurance", "id=".$old_id_no); + } + + return 0; + } + + public function update($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,1 as action,'".$user_name."' as action_by + from ipd_items where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("ipd_items_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("ipd_items", $data)) { + return 1; + }else + return 0; + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Master_M.php b/old_code_ci3/models/Master_M.php new file mode 100644 index 0000000..5476573 --- /dev/null +++ b/old_code_ci3/models/Master_M.php @@ -0,0 +1,66 @@ +db->insert("tag_master", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_tag_master($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("tag_master", $data)) { + return 1; + }else + return 0; + } +//Location Master + public function insert_location_master($data) { + + if ($this->db->insert("location_master", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_location_master($data,$old_id_no) { + $this->db->set($data); + $this->db->where("l_id", $old_id_no); + if ($this->db->update("location_master", $data)) { + return 1; + }else + return 0; + } + + //Employee Master + public function insert_employee_master($data) { + + if ($this->db->insert("employee_master", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_employee_master($data,$old_id_no) { + $this->db->set($data); + $this->db->where("emp_id", $old_id_no); + if ($this->db->update("employee_master", $data)) { + return 1; + }else + return 0; + } +} \ No newline at end of file diff --git a/old_code_ci3/models/Medical_M.php b/old_code_ci3/models/Medical_M.php new file mode 100644 index 0000000..054b491 --- /dev/null +++ b/old_code_ci3/models/Medical_M.php @@ -0,0 +1,610 @@ +db->insert("drug_temp", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_drug($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("item_id", $old_id_no); + + if($this->db->update("drug_temp", $data)) + { + return 1; + }else{ + return 0; + } + } + + public function insert_stock_add($data) { + + if ($this->db->insert("stock_addition", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_stock_upd($data,$old_id_no) { + $this->db->set($data); + $this->db->where("ss_no", $old_id_no); + if($this->db->update("stock_addition", $data)) + { + return 1; + } else{ + return 0; + } + } + + public function add_invoice($data) + { + if ($this->db->insert("invoice_med_master", $data)) { + $insert_id = $this->db->insert_id(); + + $pid=str_pad(substr($insert_id,-7,7),7,0,STR_PAD_LEFT); + + $pid='M'.date('ym').$pid; + $data1 = array( + 'inv_med_code' => $pid + ); + + $this->db->set($data1); + $this->db->where("id", $insert_id); + $this->db->update("invoice_med_master", $data1); + + return $insert_id; + }else + return 0; + } + + public function add_invoiceitem($data) + { + if ($this->db->insert("inv_med_item", $data)) { + $insert_id = $this->db->insert_id(); + $store_stock_id=$data['store_stock_id']; + $this->db->query("CALL p_stock_update_purchase_id(".$store_stock_id.")"); + $this->db->query("CALL p_update_med_GST(".$data['inv_med_id'].")"); + return $insert_id; + }else + return 0; + } + + + public function update_invoiceitem($data,$old_id_no) + { + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("inv_med_item", $data)) + { + $store_stock_id=$data['store_stock_id']; + $this->db->query("CALL p_stock_update_purchase_id(".$store_stock_id.")"); + $this->db->query("CALL p_update_med_GST(".$data['inv_med_id'].")"); + return 1; + } else{ + return 0; + } + } + + public function delete_invoiceitem($itemid,$inv_items) + { + $this->db->delete("inv_med_item", "id=".$itemid); + + $update_emp_name=$this->session->userdata('username').'['.$this->session->userdata('agent_id').']'.date('Y-m-d H:i:s'); + + $add_data=array( + 'delete_by' => $update_emp_name, + ); + + $data=array_merge($inv_items,$add_data); + + $store_stock_id=$data['store_stock_id']; + + //echo "Purchase Id :".$store_stock_id; + + $this->db->insert("inv_med_item_delete", $data); + $this->db->query("CALL p_update_med_GST(".$data['inv_med_id'].")"); + + $this->db->query("CALL p_stock_update_purchase_id(".$store_stock_id.")"); + } + + public function update_in_upv_item($data,$old_id_no) { + $sql="select * from invoice_med_master where id=".$old_id_no; + $query = $this->db->query($sql); + $data1=$query->result_array(); + + if(count($data1)>0) + { + $update_emp_name=$this->session->userdata('username').'['.$this->session->userdata('agent_id').']'.date('Y-m-d H:i:s'); + $log=compare_arrays($data1[0],$data).PHP_EOL.'Update By :'.$update_emp_name; + $old_log=$data1[0]['log']; + if($old_log=='' || $old_log==null) + { + $old_log=''; + } + + $ulog=$old_log.PHP_EOL.$log; + + $this->db->set($data); + $this->db->set('log',$ulog,true); + $this->db->where("id", $old_id_no); + $this->db->update("invoice_med_master"); + } + } + + //Start Medical Company + + public function insert_company($data) { + if ($this->db->insert("med_company", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_company($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_company", $data); + } + + + //Start Medical Company + + public function insert_med_product_cat_master($data) { + if ($this->db->insert("med_product_cat_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_product_cat_master($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_product_cat_master", $data); + } + + + //Start Medical Payment History + + public function insert_payment($data) { + $data['amount_1']=$data['amount']; + + if ($this->db->insert("payment_history_medical", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_payment($data,$old_id_no) { + $data['amount_1']=$data['amount']; + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("payment_history_medical", $data); + } + + public function insert_payment_history_log($data) { + if ($this->db->insert("paymentmedical_history_log", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + //End Medical Histoy + + public function update_group_invoice($data,$old_id_no) { + $this->db->set($data); + $this->db->where("med_group_id", $old_id_no); + $this->db->update("inv_med_group", $data); + } + + public function update_invoice_final($inv_id) + { + $this->db->query("CALL p_update_med_GST(".$inv_id.")"); + } + + public function update_invoice_group($inv_id) + { + $this->db->query("CALL p_update_med_group(".$inv_id.")"); + } + + public function update_invoice_group_gst($ipd,$bill_type=1) + { + $this->db->query("CALL p_update_med_group_GST(".$ipd.",".$bill_type.")"); + } + + public function update_invoice_rate_final($inv_id) + { + $this->db->query("CALL med_rate_update(".$inv_id.")"); + } + + public function transfer_ssno($from_ssno,$to_ssno,$tqty) + { + $this->db->query("CALL p_sale_transfer_ssno(".$from_ssno.",".$to_ssno.",".$tqty.")"); + } + + public function merge_product($from_prod_id,$to_prod_id) + { + $this->db->query("CALL p_combine_product_master(".$from_prod_id.",".$to_prod_id.")"); + } + + public function insert_supplier($data) { + + if ($this->db->insert("med_supplier", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_supplier($data,$old_id_no) { + $this->db->set($data); + $this->db->where("sid", $old_id_no); + if($this->db->update("med_supplier", $data)) + { + return $old_id_no; + } else{ + return 0; + } + } + + public function insert_purchase($data) { + + $this->db->db_debug = false; + + if($this->db->insert("purchase_invoice", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_purchase($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if($this->db->update("purchase_invoice", $data)) + { + $this->db->query("CALL p_purchase_invoice(".$old_id_no.")"); + return 1; + } else{ + return 0; + } + } + + public function delete_purchase($inv_id) { + + $this->db->where("id", $inv_id); + $this->db->delete("purchase_invoice"); + + return 1; + } + + public function insert_purchase_item($data) { + if ($this->db->insert("purchase_invoice_item", $data)) { + $insert_id = $this->db->insert_id(); + $this->db->query("CALL f_update_purchase_invoice(".$insert_id.")"); + return $insert_id; + }else + return 0; + } + + public function update_purchase_item($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if($this->db->update("purchase_invoice_item", $data)) + { + $this->db->query("CALL f_update_purchase_invoice(".$old_id_no.")"); + return 1; + } else{ + return 0; + } + } + + public function delete_purchase_item($inv_id,$del_inv_item_id) { + + $this->db->where("id", $del_inv_item_id); + $this->db->delete("purchase_invoice_item"); + + $this->db->query("CALL p_purchase_invoice(".$inv_id.")"); + + return 1; + + /* + $sql="select count(*) as no_rec from inv_med_item where ss_no=".$del_inv_item_id; + $query = $this->db->query($sql); + $result = $query->result(); + + $sale_qty=$result[0]->no_rec; + + if($sale_qty>0) + { + return 0; + + }else{ + $this->db->where("id", $del_inv_item_id); + $this->db->delete("purchase_invoice_item"); + + $this->db->query("CALL f_update_purchase_invoice(".$inv_id.")"); + + return 1; + } + */ + } + + public function update_purchase_item_stock_adjust($data_stock_adjuct,$item_id) { + $sql="select sum(qty) as total_adjust + from purchase_item_stock_adjust + where item_id=".$item_id; + $query = $this->db->query($sql); + $result = $query->result(); + + $sql="select *,(total_unit-total_lost_unit-total_sale_unit) as Cur_unit_qty + from purchase_invoice_item where id=".$item_id; + $query = $this->db->query($sql); + $result_item_master = $query->result(); + + $total_adjust=0; + $total_lost_unit=0; + $current_qty=0; + + $insert_flag=0; + + $qty=$data_stock_adjuct['qty']; + + if(count($result_item_master)>0) + { + $total_lost_unit=$result_item_master[0]->total_lost_unit; + $current_qty=$result_item_master[0]->Cur_unit_qty ; + + } + + if(count($result)>0) + { + $total_adjust=$result[0]->total_adjust; + } + + if($qty>0) + { + if($current_qty>=$qty) + { + $insert_flag=1; + } + }elseif($qty<0){ + if($total_adjust>=$qty*-1) + { + $insert_flag=1; + } + } + + if($insert_flag==1) + { + $total_adjust=$total_adjust+$qty; + + if ($this->db->insert("purchase_item_stock_adjust", $data_stock_adjuct)) { + $insert_id = $this->db->insert_id(); + + $data = array( + 'total_lost_unit' => $total_adjust + ); + + $this->db->set($data); + $this->db->where("id", $item_id); + $this->db->update("purchase_invoice_item", $data); + + return "Done : Re-Search Again for Update Records"; + }else{ return "Not Insert in Stock Adjust"; } + + }else{ + return "Qty Not Correct: either Its greater then stock Qty or 0"; + } + + } + + public function update_remove_status_item($data_stock_adjuct,$item_id) { + + $sql="select sum(qty) as total_adjust + from purchase_item_stock_adjust where item_id=".$item_id; + $query = $this->db->query($sql); + $result = $query->result(); + + $sql="select *,(total_unit-total_lost_unit-total_sale_unit) as Cur_unit_qty + from purchase_invoice_item where item_return=0 and id=".$item_id; + $query = $this->db->query($sql); + $result_item_master = $query->result(); + + $total_adjust=0; + $total_lost_unit=0; + $current_qty=0; + + $insert_flag=0; + + if(count($result_item_master)>0) + { + $total_lost_unit=$result_item_master[0]->total_lost_unit; + $current_qty=$result_item_master[0]->Cur_unit_qty ; + } + + if(count($result)>0) + { + $total_adjust=$result[0]->total_adjust; + } + + $total_adjust=$total_adjust+$current_qty; + + $data_stock_adjuct['qty']=$current_qty; + + if ($this->db->insert("purchase_item_stock_adjust", $data_stock_adjuct)) { + $insert_id = $this->db->insert_id(); + + $data = array( + 'total_lost_unit' => $total_adjust, + 'remove_item' => '1' + ); + + $this->db->set($data); + $this->db->where("id", $item_id); + $this->db->update("purchase_invoice_item", $data); + + return "Done : Remove ".$current_qty." Qty : Re-Search for Update Records"; + }else{ return "Not Insert in Stock Adjust"; } + } + + public function add_removed_item($data_stock_adjuct,$item_id) + { + if ($this->db->insert("purchase_item_stock_adjust", $data_stock_adjuct)) { + $insert_id = $this->db->insert_id(); + + $data = array( + 'remove_item' => '0' + ); + + $this->db->set($data); + $this->db->where("id", $item_id); + $this->db->update("purchase_invoice_item", $data); + + return "Add Item in Stock "; + }else{ + return "Something Wrong "; + } + } + + + public function insert_inv_med_item_return_add($data) { + + if ($this->db->insert("inv_med_item_return", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function delete_return_item($inv_item_id) { + $this->db->where("inv_item_id", $inv_item_id); + $this->db->where("return_status", '0'); + $this->db->delete("inv_med_item_return"); + } + + public function update_return_item($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("inv_med_item_return", $data)) + { + return 1; + }else{ + return 0; + } + + } + + public function insert_med_supplier_ledger($data) { + + if($this->db->insert("med_supplier_ledger", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_supplier_ledger($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("med_supplier_ledger", $data)) + { + return 1; + }else{ + return 0; + } + + } + + //Insert Update Table purchase_return_invoice / purchase_return_invoice_item + + public function add_purchase_return_invoice($data) + { + if ($this->db->insert("purchase_return_invoice", $data)) { + $insert_id = $this->db->insert_id(); + + $pid=str_pad(substr($insert_id,-3,3),3,0,STR_PAD_LEFT); + + $pid='PR'.date('ym').$pid; + $data1 = array( + 'p_r_invoice_no' => $pid + ); + + $this->db->set($data1); + $this->db->where("id", $insert_id); + $this->db->update("purchase_return_invoice", $data1); + + return $insert_id; + }else + return 0; + } + + public function add_purchase_return_invoiceitem($data) + { + if ($this->db->insert("purchase_return_invoice_item", $data)) { + $insert_id = $this->db->insert_id(); + + $this->db->query("CALL p_stock_purchase_return(".$insert_id.",0)"); + return $insert_id; + }else + return 0; + } + + public function update_purchase_return_invoiceitem($data,$old_id_no) + { + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("purchase_return_invoice_item", $data)) + { + $store_stock_id=$data['store_stock_id']; + //$this->db->query("CALL p_stock_update_purchase_id(".$store_stock_id.")"); + return 1; + } else{ + return 0; + } + } + + public function opd_reset($inv_id) + { + //$this->db->query("CALL p_cash_opd_pre_data(".$inv_id.")"); + } + + public function delete_purchase_return_invoiceitem($itemid) + { + $this->db->query("CALL p_stock_purchase_return(".$itemid.",1)"); + + $this->db->delete("purchase_return_invoice_item", "id=".$itemid); + + $update_emp_name=$this->session->userdata('username').'['.$this->session->userdata('agent_id').']'.date('Y-m-d H:i:s'); + + $add_data=array( + 'delete_by' => $update_emp_name, + ); + + } + + + + } +?> \ No newline at end of file diff --git a/old_code_ci3/models/Medical_M_03062021.php b/old_code_ci3/models/Medical_M_03062021.php new file mode 100644 index 0000000..9c4e451 --- /dev/null +++ b/old_code_ci3/models/Medical_M_03062021.php @@ -0,0 +1,491 @@ +db->insert("drug_temp", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_drug($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("item_id", $old_id_no); + + if($this->db->update("drug_temp", $data)) + { + return 1; + }else{ + return 0; + } + + } + + public function insert_stock_add($data) { + + if ($this->db->insert("stock_addition", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_stock_upd($data,$old_id_no) { + $this->db->set($data); + $this->db->where("ss_no", $old_id_no); + if($this->db->update("stock_addition", $data)) + { + return 1; + } else{ + return 0; + } + } + + public function add_invoice($data) + { + if ($this->db->insert("invoice_med_master", $data)) { + $insert_id = $this->db->insert_id(); + + $pid=str_pad(substr($insert_id,-7,7),7,0,STR_PAD_LEFT); + + $pid='M'.date('ym').$pid; + $data1 = array( + 'inv_med_code' => $pid + ); + + $this->db->set($data1); + $this->db->where("id", $insert_id); + $this->db->update("invoice_med_master", $data1); + + return $insert_id; + }else + return 0; + } + + public function add_invoiceitem($data) + { + if ($this->db->insert("inv_med_item", $data)) { + $insert_id = $this->db->insert_id(); + + if($insert_id>0) + { + $this->db->set("total_sale_unit","total_sale_unit+".$data["qty"],false); + $this->db->where("id", $data["store_stock_id"]); + $this->db->update("purchase_invoice_item"); + } + + return $insert_id; + }else + return 0; + } + + public function update_invoiceitem($data,$old_id_no) + { + $sql="select * from inv_med_item where id=".$old_id_no; + $query = $this->db->query($sql); + $result = $query->result(); + + $old_qty=$result[0]->qty; + $diff_qty=$data["qty"]-$old_qty; + $store_stock_id=$result[0]->store_stock_id; + + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("inv_med_item", $data)) + { + $this->db->set("total_sale_unit","total_sale_unit+".$diff_qty,false); + $this->db->where("id", $store_stock_id); + $this->db->update("purchase_invoice_item"); + } + } + + public function delete_invoiceitem($itemid) + { + $sql="select * from inv_med_item where id=".$itemid; + $query = $this->db->query($sql); + $result = $query->result(); + + $old_qty=$result[0]->qty; + $store_stock_id=$result[0]->store_stock_id; + + if($this->db->delete("inv_med_item", "id=".$itemid)) + { + $this->db->set("total_sale_unit","total_sale_unit-".$old_qty,false); + $this->db->where("id", $store_stock_id); + $this->db->update("purchase_invoice_item"); + } + } + + public function update_in_upv_item($data,$old_id_no) { + $sql="select * from invoice_med_master where id=".$old_id_no; + $query = $this->db->query($sql); + $data1=$query->result_array(); + + if(count($data1)>0) + { + $update_emp_name=$this->session->userdata('username').'['.$this->session->userdata('agent_id').']'.date('Y-m-d H:i:s'); + $log=compare_arrays($data1[0],$data).PHP_EOL.'Update By :'.$update_emp_name; + $old_log=$data1[0]['log']; + if($old_log=='' || $old_log==null) + { + $old_log=''; + } + + $ulog=$old_log.PHP_EOL.$log; + + $this->db->set($data); + $this->db->set('log',$ulog,true); + $this->db->where("id", $old_id_no); + $this->db->update("invoice_med_master"); + } + } + + //Start Medical Company + + public function insert_company($data) { + if ($this->db->insert("med_company", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_company($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_company", $data); + } + + //Start Medical Payment History + + public function insert_payment($data) { + if ($this->db->insert("payment_history_medical", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_payment($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("payment_history_medical", $data); + } + + public function insert_payment_history_log($data) { + if ($this->db->insert("paymentmedical_history_log", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + //End Medical Histoy + + public function update_group_invoice($data,$old_id_no) { + $this->db->set($data); + $this->db->where("med_group_id", $old_id_no); + $this->db->update("inv_med_group", $data); + } + + public function update_invoice_final($inv_id) + { + $this->db->query("CALL p_update_med_GST(".$inv_id.")"); + } + + public function update_invoice_group($inv_id) + { + $this->db->query("CALL p_update_med_group(".$inv_id.")"); + } + + public function update_invoice_group_gst($ipd,$bill_type=1) + { + $this->db->query("CALL p_update_med_group_GST(".$ipd.",".$bill_type.")"); + } + + public function update_invoice_rate_final($inv_id) + { + $this->db->query("CALL med_rate_update(".$inv_id.")"); + } + + public function insert_supplier($data) { + + if ($this->db->insert("med_supplier", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_supplier($data,$old_id_no) { + $this->db->set($data); + $this->db->where("sid", $old_id_no); + if($this->db->update("med_supplier", $data)) + { + return 1; + } else{ + return 0; + } + } + + public function insert_purchase($data) { + + $this->db->db_debug = false; + + if($this->db->insert("purchase_invoice", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_purchase($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if($this->db->update("purchase_invoice", $data)) + { + $this->db->query("CALL p_purchase_invoice(".$old_id_no.")"); + return 1; + } else{ + return 0; + } + } + + public function delete_purchase($inv_id) { + + $this->db->where("id", $inv_id); + $this->db->delete("purchase_invoice"); + + return 1; + } + + public function insert_purchase_item($data) { + if ($this->db->insert("purchase_invoice_item", $data)) { + $insert_id = $this->db->insert_id(); + $this->db->query("CALL f_update_purchase_invoice(".$insert_id.")"); + return $insert_id; + }else + return 0; + } + + public function update_purchase_item($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if($this->db->update("purchase_invoice_item", $data)) + { + $this->db->query("CALL f_update_purchase_invoice(".$old_id_no.")"); + return 1; + } else{ + return 0; + } + } + + public function delete_purchase_item($inv_id,$del_inv_item_id) { + + $this->db->where("id", $del_inv_item_id); + $this->db->delete("purchase_invoice_item"); + + $this->db->query("CALL p_purchase_invoice(".$inv_id.")"); + + return 1; + + /* + $sql="select count(*) as no_rec from inv_med_item where ss_no=".$del_inv_item_id; + $query = $this->db->query($sql); + $result = $query->result(); + + $sale_qty=$result[0]->no_rec; + + if($sale_qty>0) + { + return 0; + + }else{ + $this->db->where("id", $del_inv_item_id); + $this->db->delete("purchase_invoice_item"); + + $this->db->query("CALL f_update_purchase_invoice(".$inv_id.")"); + + return 1; + } + */ + } + + public function update_purchase_item_stock_adjust($data_stock_adjuct,$item_id) { + $sql="select sum(qty) as total_adjust from purchase_item_stock_adjust where item_id=".$item_id; + $query = $this->db->query($sql); + $result = $query->result(); + + $sql="select *,(total_unit-total_return_unit-total_lost_unit-total_sale_unit) as Cur_unit_qty + from purchase_invoice_item where item_return=0 and id=".$item_id; + $query = $this->db->query($sql); + $result_item_master = $query->result(); + + $total_adjust=0; + $total_lost_unit=0; + $current_qty=0; + + $insert_flag=0; + + $qty=$data_stock_adjuct['qty']; + + if(count($result_item_master)>0) + { + $total_lost_unit=$result_item_master[0]->total_lost_unit; + $current_qty=$result_item_master[0]->Cur_unit_qty ; + + } + + if(count($result)>0) + { + $total_adjust=$result[0]->total_adjust; + } + + if($qty>0) + { + if($current_qty>=$qty) + { + $insert_flag=1; + } + }elseif($qty<0){ + if($total_adjust>=$qty*-1) + { + $insert_flag=1; + } + } + + if($insert_flag==1) + { + $total_adjust=$total_adjust+$qty; + + if ($this->db->insert("purchase_item_stock_adjust", $data_stock_adjuct)) { + $insert_id = $this->db->insert_id(); + + $data = array( + 'total_lost_unit' => $total_adjust + ); + + $this->db->set($data); + $this->db->where("id", $item_id); + $this->db->update("purchase_invoice_item", $data); + + return "Done : Re-Search Again for Update Records"; + }else{ return "Not Insert in Stock Adjust"; } + + }else{ + return "Qty Not Correct: either Its greater then stock Qty or 0"; + } + + } + + public function update_remove_status_item($data_stock_adjuct,$item_id) { + + $sql="select sum(qty) as total_adjust from purchase_item_stock_adjust where item_id=".$item_id; + $query = $this->db->query($sql); + $result = $query->result(); + + $sql="select *,(total_unit-total_return_unit-total_lost_unit-total_sale_unit) as Cur_unit_qty + from purchase_invoice_item where item_return=0 and id=".$item_id; + $query = $this->db->query($sql); + $result_item_master = $query->result(); + + $total_adjust=0; + $total_lost_unit=0; + $current_qty=0; + + $insert_flag=0; + + if(count($result_item_master)>0) + { + $total_lost_unit=$result_item_master[0]->total_lost_unit; + $current_qty=$result_item_master[0]->Cur_unit_qty ; + } + + if(count($result)>0) + { + $total_adjust=$result[0]->total_adjust; + } + + $total_adjust=$total_adjust+$current_qty; + + $data_stock_adjuct['qty']=$current_qty; + + if ($this->db->insert("purchase_item_stock_adjust", $data_stock_adjuct)) { + $insert_id = $this->db->insert_id(); + + $data = array( + 'total_lost_unit' => $total_adjust, + 'remove_item' => '1' + ); + + $this->db->set($data); + $this->db->where("id", $item_id); + $this->db->update("purchase_invoice_item", $data); + + return "Done : Remove ".$current_qty." Qty : Re-Search for Update Records"; + }else{ return "Not Insert in Stock Adjust"; } + } + + public function insert_inv_med_item_return_add($data) { + + if ($this->db->insert("inv_med_item_return", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function delete_return_item($inv_item_id) { + $this->db->where("inv_item_id", $inv_item_id); + $this->db->where("return_status", '0'); + $this->db->delete("inv_med_item_return"); + } + + public function update_return_item($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("inv_med_item_return", $data)) + { + return 1; + }else{ + return 0; + } + + } + + public function insert_med_supplier_ledger($data) { + + if($this->db->insert("med_supplier_ledger", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_supplier_ledger($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if($this->db->update("med_supplier_ledger", $data)) + { + return 1; + }else{ + return 0; + } + + } + + } +?> \ No newline at end of file diff --git a/old_code_ci3/models/Ocasemaster_M.php b/old_code_ci3/models/Ocasemaster_M.php new file mode 100644 index 0000000..40e151d --- /dev/null +++ b/old_code_ci3/models/Ocasemaster_M.php @@ -0,0 +1,53 @@ +db->insert("organization_case_master", $data)) { + $insert_id = $this->db->insert_id(); + + $pid=str_pad(substr($insert_id,-7,7),7, '0', STR_PAD_LEFT); + $pid='C'.date('ym').$pid; + $data1 = array( + 'case_id_code' => $pid + ); + + $this->db->set($data1); + $this->db->where("id", $insert_id); + $this->db->update("organization_case_master", $data1); + + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("organization_case_master", $data); + + + } + + + public function insert_org_pack($data) { + if ($this->db->insert("org_packing", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_org_pack($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("org_packing", $data); + return $old_id_no; + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Opd_M.php b/old_code_ci3/models/Opd_M.php new file mode 100644 index 0000000..5e02a24 --- /dev/null +++ b/old_code_ci3/models/Opd_M.php @@ -0,0 +1,279 @@ +db->query($sql); + $result = $query->result_array(); + //print_r($result); + return $result; + } + + public function insert($data) { + + $p_id=$data['p_id']; + $opd_dt=$data['apointment_date']; + $doc_id=$data['doc_id']; + + $sql="select * from opd_master + where apointment_date=curdate() and (payment_status=0 or opd_status=1 ) and p_id=$p_id and doc_id=$doc_id"; + $query = $this->db->query($sql); + $no_duplicate= $query->result(); + + $insert_id=0; + + if(count($no_duplicate)==0) + { + if($this->db->insert("opd_master", $data)) + { + $insert_id = $this->db->insert_id(); + + $sql="SELECT count(*) as xtimes from opd_master where opd_id<=".$insert_id." and p_id=".$p_id; + $query = $this->db->query($sql); + $opd_times= $query->result(); + + $sql="select count(*) as no_max from opd_master where apointment_date=curdate() and doc_id=".$doc_id; + $query = $this->db->query($sql); + $opd_no_data= $query->result(); + + $opd_no=1; + if(count($opd_no_data)>0) + { + $opd_no=$opd_no_data[0]->no_max; + } + //$opd_no=$opd_no+1; + + $pid=str_pad(substr($insert_id,-7,7),7,0,STR_PAD_LEFT); + $doc_id=str_pad(substr($insert_id,-3,3),3,0,STR_PAD_LEFT); + + $Oid='D'.date('ym').$pid; + + $running_opd=0; + $last_opd_id=0; + + if($data['opd_fee_type']==3) + { + $running_opd = 1; + + $sql="select max(opd_id) as last_opd_id from opd_master + where apointment_date between date_add(curdate(),interval -4 day) and curdate() + and running_opd=0 and doc_id=".$doc_id. " and p_id=".$p_id; + $query = $this->db->query($sql); + $opd_no_data= $query->result(); + + if(count($opd_no_data)>0) + { + if($opd_no_data[0]->last_opd_id=='' || $opd_no_data[0]->last_opd_id=='0') + { + $last_opd_id=0; + }else{ + $last_opd_id=$opd_no_data[0]->last_opd_id; + } + } + } + + $dataupadate = array( + 'opd_code' => $Oid, + 'no_visit' => $opd_times[0]->xtimes, + 'running_opd' => $running_opd, + 'running_opd_id' => $last_opd_id, + 'opd_no'=>$opd_no, + ); + + $this->db->set($dataupadate); + $this->db->where("opd_id", $insert_id); + $this->db->update("opd_master", $dataupadate); + + + } + } + + return $insert_id; + } + + + public function insert_bak($data) { + + $p_id=$data['p_id']; + $opd_dt=$data['apointment_date']; + $doc_id=$data['doc_id']; + + $insert_id=0; + + if($data['opd_fee_type']==3) + { + $sql="SELECT * from opd_master where p_id=".$p_id." and doc_id=".$doc_id." + and apointment_date > date_add(sysdate(),interval -5 day) + order by apointment_date desc "; + $query = $this->db->query($sql); + $opd_running= $query->result(); + + if(count($opd_running)>0) + { + $insert_id=$opd_running[0]->opd_id; + $revisit_opd_id=$opd_running[0]->revisit_opd_id; + + $data_visit = array( + 'revisit_opd_id' => $revisit_opd_id+1, + ); + + $this->db->set($data_visit); + $this->db->where("opd_id", $insert_id); + $this->db->update("opd_master", $data_visit); + + } + }else{ + if($this->db->insert("opd_master", $data)) + { + $insert_id = $this->db->insert_id(); + + $sql="SELECT count(*) as xtimes from opd_master where opd_id<=".$insert_id." and p_id=".$p_id; + $query = $this->db->query($sql); + $opd_times= $query->result(); + + $pid=str_pad(substr($insert_id,-7,7),7,0,STR_PAD_LEFT); + + $pid='D'.date('ym').$pid; + + $dataupadate = array( + 'opd_code' => $pid, + 'revisit' => $opd_times[0]->xtimes, + ); + + $this->db->set($dataupadate); + $this->db->where("opd_id", $insert_id); + $this->db->update("opd_master", $dataupadate); + } + } + + $sql="SELECT * from opd_visit_list where date_opd=".$opd_dt." and p_id=".$p_id; + $query = $this->db->query($sql); + $opd_visit= $query->result(); + + if(count($opd_visit)>0) + { + $data_visit = array( + 'p_name' => $data['P_name'], + 'opd_id' => $data['opd_id'], + 'opd_type' => $data['opd_fee_type'], + 'opd_status' => '1', + ); + + $this->db->set($data_visit); + $this->db->where("id", $opd_visit[0]->id); + $this->db->update("opd_visit_list", $data_visit); + + }else{ + $data_visit = array( + 'p_id' => $p_id, + 'p_name' => $data['P_name'], + 'opd_id' => $insert_id, + 'opd_type' => $data['opd_fee_type'], + 'date_opd' => $data['apointment_date'], + 'opd_no' => '0', + 'update_by' => $data['prepared_by'], + 'opd_status' => '1', + ); + + $this->db->insert("opd_visit_list", $data_visit); + } + + return $insert_id; + } + + public function update($data,$old_id_no) { + + /* Auto Que */ + $user = $this->ion_auth->user()->row(); + + if(isset($user->id)) + { + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + }else{ + $user_id = '0'; + $user_name = 'Mobile User'; + } + + + + $this->db->set($data); + $this->db->where("opd_id", $old_id_no); + $this->db->update("opd_master", $data); + + $this->db->where('opd_id', $old_id_no); + $q = $this->db->get('opd_master'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $pno=$data['p_id']; + $doc_id=$data['doc_id']; + $opd_date=$data['apointment_date']; + $opd_status=$data['opd_status']; + + $sql="select max(queue_no) as max_queue from opd_prescription + where date_opd_visit=curdate() and doc_id='".$doc_id."'"; + $query = $this->db->query($sql); + $max_queue= $query->result(); + + if(count($max_queue)>0) + { + $max_queue_no=$max_queue[0]->max_queue; + }else{ + $max_queue_no=0; + } + + $max_queue_no=$max_queue_no+1; + + $sql="select * from opd_prescription where visit_status=0 and opd_id=".$old_id_no; + $query = $this->db->query($sql); + $opd_prescription= $query->result(); + + if(count($opd_prescription)==0 ) + { + + if($opd_status==1) + { + $datainsert = array( + 'opd_id' => $old_id_no, + 'p_id' => $pno, + 'revisit'=>'0', + 'queue_no'=>$max_queue_no, + 'doc_id'=>$doc_id, + 'date_opd_visit'=>date('Y-m-d'), + 'update_by'=>$user_name + ); + + $this->load->model('Prescription_M'); + $this->Prescription_M->insert_opd_prescription($datainsert); + + $msg_send="OPD in Queue Now"; + }else{ + $msg_send="OPD Already Done, Create Revisit"; + } + + } + } + + public function update_opd_queue_no($opd_session_id,$doc_id,$date_opd_visit) { + $result = "update opd_prescription + SET current_queue_no=0 + where doc_id='".$doc_id."' and date_opd_visit='".$date_opd_visit."'"; + $qyt = $this->db->query($result); + + $result = "update opd_prescription + SET current_queue_no=1 + where id='".$opd_session_id."'"; + $qyt = $this->db->query($result); + + return 0; + } + + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Package_M.php b/old_code_ci3/models/Package_M.php new file mode 100644 index 0000000..ce61e17 --- /dev/null +++ b/old_code_ci3/models/Package_M.php @@ -0,0 +1,109 @@ +db->insert("package", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function insert_type($data) { + + if ($this->db->insert("package", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_type($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("itype_id", $old_id_no); + if ($this->db->update("package", $data)) { + return 1; + }else + return 0; + } + + public function insert_in_item($data) { + + if ($this->db->insert("package_insurance", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_in_item($data,$old_id_no) { + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as action_by from package_insurance where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("package_insurance_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("package_insurance", $data)) { + return 1; + }else + return 0; + } + + public function delete_in_item($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as action_by from package_insurance where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("package_insurance_update", $insertdata[0]); + $this->db->delete("package_insurance", "id=".$old_id_no); + } + + return 0; + } + + public function update($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,1 as action,'".$user_name."' as action_by from package where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("package_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("package", $data)) { + return 1; + }else + return 0; + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/PathLab_M.php b/old_code_ci3/models/PathLab_M.php new file mode 100644 index 0000000..680c5e7 --- /dev/null +++ b/old_code_ci3/models/PathLab_M.php @@ -0,0 +1,144 @@ +db->set($data); + $this->db->where("mstRepoKey", $old_id_no); + $this->db->update("lab_repo", $data); + } + + public function insert_report($data) + { + $this->db->insert("lab_repo", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_ultrasound_report($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("radiology_ultrasound_template", $data); + } + + public function insert_ultrasound_report($data) + { + $this->db->insert("radiology_ultrasound_template", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_item_parameter($data,$old_id_no) { + $this->db->set($data); + $this->db->where("mstTestKey", $old_id_no); + $this->db->update("lab_tests", $data); + } + + public function insert_item_parameter($data) + { + $this->db->insert("lab_tests", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_item_parameter_option($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("lab_tests_option", $data); + } + + public function insert_item_parameter_option($data) + { + $this->db->insert("lab_tests_option", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function insert_item_sortorder($data) { + $this->db->insert("lab_repotests", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_item_sortorder($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("lab_repotests", $data); + } + + public function insert_test_request($data) { + $this->db->insert("lab_request", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_test_request($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("lab_request", $data); + } + + public function insert_test_entry($data) { + $this->db->insert("lab_request_item", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_test_entry($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("lab_request_item", $data); + } + + public function delete_request_entry($delete_id_no) { + $this->db->where('id', $delete_id_no); + + $q = $this->db->get('lab_request'); + // if id is unique, we want to return just one row + $data = $q->row_array(); + + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name . '['.date("d-m-Y h:i").']'; + + $data['remove_update_by']=$user_name; + + if ($this->db->insert("lab_request_delete", $data)) { + $this->db->where("id", $delete_id_no); + $this->db->delete("lab_request"); + return 1; + }else{ + return 0; + } + } + + public function insert_invoice_report($data) { + $this->db->insert("lab_invoice_request", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_invoice_report($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("lab_invoice_request", $data); + } + + public function insert_lab_log($data) { + $this->db->insert("lab_log", $data); + $insert_id = $this->db->insert_id(); + return $insert_id ; + } + + public function update_lab_log($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("lab_log", $data); + } +} +?> diff --git a/old_code_ci3/models/Patient_M.php b/old_code_ci3/models/Patient_M.php new file mode 100644 index 0000000..0adfe7e --- /dev/null +++ b/old_code_ci3/models/Patient_M.php @@ -0,0 +1,136 @@ +db->insert("patient_master", $data)) { + $insert_id = $this->db->insert_id(); + $pid=1000000+$insert_id; + + $pid='P'.date('ym').$pid; + $data = array( + 'p_code' => $pid + ); + + $this->db->set($data); + $this->db->where("id", $insert_id); + $this->db->update("patient_master", $data); + + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name; + + $sql="select * from patient_master where id=".$old_id_no; + $query = $this->db->query($sql); + $data1=$query->result_array(); + + if(count($data1)>0) + { + $update_emp_name=$user_id.'['.$user_name.']'.date('Y-m-d H:i:s'); + $Old_Update_data=($data1[0]['log']==''?' ':$data1[0]['log']).PHP_EOL; + + $change_data=compare_arrays($data1[0],$data); + if(strlen($change_data)>0) + { + $data['log']=$Old_Update_data.$change_data.'Update By :'.$update_emp_name; + $data['last_update']=date('Y-m-d H:i:s'); + } + + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("patient_master", $data); + } + + public function update_online($data,$old_id_no) { + + $user_id = 0; + $user_name = "online OPD"; + + $sql="select * from patient_master where id=".$old_id_no; + $query = $this->db->query($sql); + $data1=$query->result_array(); + + if(count($data1)>0) + { + $update_emp_name=$user_id.'['.$user_name.']'.date('Y-m-d H:i:s'); + $Old_Update_data=($data1[0]['log']==''?' ':$data1[0]['log']).PHP_EOL; + + $change_data=compare_arrays($data1[0],$data); + if(strlen($change_data)>0) + { + $data['log']=$Old_Update_data.$change_data.'Update By :'.$update_emp_name; + $data['last_update']=date('Y-m-d H:i:s'); + } + + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("patient_master", $data); + } + + public function insert_card($data) { + + if ($this->db->insert("hc_insurance_card", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function insert_log_patient_multiple($data) { + + if ($this->db->insert("log_patient_multiple", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_card($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("hc_insurance_card", $data); + } + + function get_city($q){ + $this->db->select('*'); + $this->db->like('city', $q); + $query = $this->db->get('city_auto_u'); + if($query->num_rows() > 0){ + foreach ($query->result_array() as $row){ + $new_row['label']=htmlentities(stripslashes($row['city'])).' | '.htmlentities(stripslashes($row['district'])).' | '.htmlentities(stripslashes($row['state'])); + $new_row['value']=htmlentities(stripslashes($row['city'])); + $new_row['l_city']=htmlentities(stripslashes($row['city'])); + $new_row['l_district']=htmlentities(stripslashes($row['district'])); + $new_row['l_state']=htmlentities(stripslashes($row['state'])); + $row_set[] = $new_row; //build an array + } + echo json_encode($row_set); //format the array into json data + } + } + + + public function insert_remark($data) { + + if ($this->db->insert("patient_remark", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Patienttag_M.php b/old_code_ci3/models/Patienttag_M.php new file mode 100644 index 0000000..2401ea9 --- /dev/null +++ b/old_code_ci3/models/Patienttag_M.php @@ -0,0 +1,46 @@ +db->insert("tag_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_tag_master($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("tag_master", $data)) { + return 1; + }else + return 0; + } + + public function insert_patient_tag_assign($data) { + + if ($this->db->insert("patient_tag_assign", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_patient_tag_assign($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("cpatient_tag_assign", $data)) { + return 1; + }else + return 0; + } + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Payment_M.php b/old_code_ci3/models/Payment_M.php new file mode 100644 index 0000000..c842abc --- /dev/null +++ b/old_code_ci3/models/Payment_M.php @@ -0,0 +1,140 @@ +db->insert("payment_history", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("payment_history", $data); + } + + public function insert_payment_history_log($data) { + + if ($this->db->insert("payment_history_log", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function insert_refundorder($data) { + + if ($this->db->insert("refund_order", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + + public function update_ipd_payment_to_admin($Payment_data,$ipd_master) { + + $ipd_no=$Payment_data['ipd_id']; + $group_id=$Payment_data['Med_Group_id']; + $amount=$Payment_data['amount']; + + $sql="Select * from inv_med_group where med_group_id=$group_id"; + $query = $this->db->query($sql); + $inv_med_group= $query->result(); + + $net_amount=0; + $payment_received=0; + if($Payment_data['cr_dr']==0){ + $last_payment=$amount; + }else{ + $last_payment=$amount*-1; + } + $pay_datetime=$Payment_data['payment_date']; + $pharmacy_name="'".M_store."'"; + $admin_phone_no="'".M_Admin_PhoneNo."'"; + $recevied_user=$Payment_data['update_by']; + + + if(count($inv_med_group)>0){ + $net_amount=$inv_med_group[0]->net_amount; + $payment_received=$inv_med_group[0]->payment_received; + } + + $web_msg='Payment Received from IPD No. :'.$ipd_no.'
'; + $web_msg.='Patient Name :'.$ipd_master[0]->P_name.'
'; + $web_msg.='Total Billed amt. :'.$net_amount.'
'; + $web_msg.='Total Paid amt. :'.$payment_received.'
'; + $web_msg.='Last Paid amt. :'.$last_payment.'
'; + $web_msg.='Pay Date Time :'.$pay_datetime.'
'; + $web_msg.='Recevied By :'.$recevied_user.'
'; + $web_msg.='Pharmacy Name :'.$pharmacy_name.'
'; + + $data = array( + 'to_number'=> $admin_phone_no, + 'message'=>$web_msg, + ); + + if ($this->db->insert("sms_outbox", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_refundorder($data,$rid) { + $this->db->set($data); + $this->db->where("id", $rid); + $this->db->update("refund_order", $data); + } + + public function insert_org_payment($data) { + + if ($this->db->insert("org_payment_request", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update_org_payment($data,$rid) { + + $this->db->set($data); + $this->db->where("id", $rid); + $this->db->update("org_payment_request", $data); + } + + public function cancel_in_payment_history($old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,2 as action,'".$user_name."' as cancel_by,,'".$user_id."' as cancel_by_id + from payment_history where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("payment_history_cancel", $insertdata[0]); + $this->db->delete("payment_history", "id=".$old_id_no); + } + + return 0; + } + + + +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Prescription_M.php b/old_code_ci3/models/Prescription_M.php new file mode 100644 index 0000000..c6471ce --- /dev/null +++ b/old_code_ci3/models/Prescription_M.php @@ -0,0 +1,240 @@ +db->insert("opd_prescription", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_opd_prescription($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("opd_prescription", $data); + } + + + + public function insert_p_investigation($data) { + if ($this->db->insert("opd_prescription_investigation", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function remove_p_investigation($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescription_investigation"); + } + + + // Prescription Surgery + + public function insert_p_surgery($data) { + if ($this->db->insert("opd_prescription_procedures", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_surgery($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("opd_prescription_procedures", $data); + } + + public function remove_p_surgery($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescription_procedures"); + } + + // Prescription Complaint + + public function insert_p_complaint($data) { + if ($this->db->insert("opd_prescription_complaint", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_complaint($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("opd_prescription_complaint", $data); + } + + public function remove_p_complaint($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescription_complaint"); + } + + + // Prescription Diagnosis + + public function insert_p_diagnosis($data) { + if ($this->db->insert("opd_prescription_diagnosis", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_diagnosis($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("opd_prescription_diagnosis", $data); + } + + public function remove_p_diagnosis($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescription_diagnosis"); + } + + // Prescription Medical + + public function insert_p_medical($data) { + if ($this->db->insert("opd_prescrption_prescribed", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_p_medical($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("opd_prescrption_prescribed", $data); + } + + public function remove_p_medical($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescrption_prescribed"); + } + + //OPD Med Master + + public function insert_med_master($data) { + if ($this->db->insert("opd_med_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_master($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("opd_med_master", $data)) { + return 1; + }else + return 0; + } + + public function remove_med_master($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_med_master"); + } + + // opd advice + + public function insert_opd_patient_advice($data) { + if ($this->db->insert("opd_prescription_advice", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_opd_patient_advice($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("opd_prescription_advice", $data); + } + + public function remove_opd_patient_advice($delid) { + $this->db->where("id", $delid); + $this->db->delete("opd_prescription_advice"); + } + + public function insert_patient_glucose_chart($data) { + if ($this->db->insert("patient_glucose_chart", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_patient_glucose_chart($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("patient_glucose_chart", $data); + } + + public function remove_patient_glucose_chart($delid) { + $this->db->where("id", $delid); + $this->db->delete("patient_glucose_chart"); + } + + + public function insert_patient_investigation($data) { + if ($this->db->insert("patient_investigation", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_patient_investigation($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("patient_investigation", $data); + } + + public function remove_patient_investigation($delid) { + $this->db->where("id", $delid); + $this->db->delete("patient_investigation"); + } + + // Update + public function update_patient_morbidities($p_id,$morbidities,$remove=0) { + $sql="SELECT * FROM patient_morbidities WHERE p_id = $p_id and morbidities = $morbidities"; + $query = $this->db->query($sql); + $result = $query->result(); + + $count = count($result); + + $m_id=0; + + if($count>0){ + $m_id=$result[0]->id; + } + + $data=array( + 'p_id' => $p_id, + 'morbidities'=> $morbidities, + 'update_date'=> date('Y-m-d h:m:i'), + ); + + if($remove==0){ + if ($m_id==0) { + $m_id=$this->db->insert('patient_morbidities', $data); + } + }elseif($remove==1){ + $this->db->where("id", $m_id); + $this->db->delete("patient_morbidities"); + } + + return $m_id; + + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Product_master_M.php b/old_code_ci3/models/Product_master_M.php new file mode 100644 index 0000000..1895737 --- /dev/null +++ b/old_code_ci3/models/Product_master_M.php @@ -0,0 +1,205 @@ +db->insert("med_product_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + + + public function update($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,'".$user_id."' as update_by_id,'".$user_name."' as update_by + from med_product_master where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("med_product_master_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("med_product_master", $data)) { + return 1; + }else + return 0; + } + + public function delete_master($old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,'".$user_id."' as update_by_id,'".$user_name."' as update_by + from med_product_master where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("med_product_master_update", $insertdata[0]); + $this->db->where("id", $old_id_no); + if ($this->db->delete("med_product_master")) { + return 1; + }else + return 0; + }else{ + return 0; + } + + } + + + public function insert_update_product_cat_assign($data,$med_id) { + + $sql="select m.id,m.med_cat_desc,a.med_cat_id AS a_id,t.id AS t_id , if(a.id=t.id,0,if(a.id IS NULL AND t.id=m.id,1,if(a.med_cat_id=m.id AND t.id IS NULL,2,0))) AS ins_del_action,a.id AS rec_id + FROM (med_product_cat_master m Left join med_product_cat_assign a on m.id=a.med_cat_id and a.med_product_id=$med_id ) + LEFT JOIN med_product_cat_master t ON m.id=t.id and t.id in ($data)"; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + + + foreach($insertdata as $row) + { + if ($row->ins_del_action==1) { + $data_ins['med_product_id']=$med_id; + $data_ins['med_cat_id']=$row->id; + + $this->db->insert("med_product_cat_assign", $data_ins); + }elseif($row->ins_del_action==2){ + $this->db->where("id", $row->rec_id); + $this->db->delete("med_product_cat_assign"); + } + } + + return 1; + } + + + public function insert_med_indent_request($data) { + if ($this->db->insert("med_indent_request", $data)) { + $insert_id = $this->db->insert_id(); + + $Ind_code=str_pad(substr($insert_id,-5,5),5,0,STR_PAD_LEFT); + + $Ind_code='R'.date('ymd').$Ind_code; + + $data = array( + 'indent_code' => $Ind_code, + ); + + $this->db->set($data); + $this->db->where("indent_id", $insert_id); + $this->db->update("med_indent_request", $data); + + return $insert_id; + }else + return 0; + } + + public function update_med_indent_request($data,$old_id_no) { + $this->db->set($data); + $this->db->where("indent_id", $old_id_no); + $this->db->update("med_indent_request", $data); + + } + + public function insert_med_indent_request_items($data) { + if ($this->db->insert("med_indent_request_items", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_indent_request_items($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_indent_request_items", $data); + } + + public function delete_med_indent_request_item($indent_id,$del_indent_item_id) { + + $this->db->where("id", $del_indent_item_id); + $this->db->delete("med_indent_request_items"); + + $this->db->where("indent_item_id", $del_indent_item_id); + $this->db->delete("med_indent_process_items"); + + return 1; + } + + //For Med_indent_process + public function insert_med_indent_process($data) { + if ($this->db->insert("med_indent_process", $data)) { + return 1; + }else + return 0; + } + + public function update_med_indent_process($data,$old_id_no) { + $this->db->set($data); + $this->db->where("indent_id", $old_id_no); + $this->db->update("med_indent_process", $data); + } + + // Med_indent_process Items + + public function insert_med_indent_process_items($data) { + if ($this->db->insert("med_indent_process_items", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_indent_process_items($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_indent_process_items", $data); + } + + public function delete_med_indent_process_item($indent_id,$del_indent_item_id) { + $this->db->where("id", $del_indent_item_id); + $this->db->delete("med_indent_process_items"); + return 1; + + } + + // Med_indent_accept Items Table : store_stock + + public function insert_store_stock_items($data) { + if ($this->db->insert("store_stock", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_store_stock_items($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("store_stock", $data); + } + + public function delete_store_stock_item($id) { + $this->db->where("id", $id); + $this->db->delete("store_stock"); + return 1; + + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Product_stock_master_M.php b/old_code_ci3/models/Product_stock_master_M.php new file mode 100644 index 0000000..656d9a6 --- /dev/null +++ b/old_code_ci3/models/Product_stock_master_M.php @@ -0,0 +1,175 @@ +db->insert("med_store_product_master", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,'".$user_id."' as update_by_id,'".$user_name."' as update_by + from med_store_product_master where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("med_store_product_master_update", $insertdata[0]); + } + + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("med_store_product_master", $data)) { + return 1; + }else + return 0; + } + + public function delete_master($old_id_no) { + $user = $this->ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'['.$user_id.']'; + + $sql="select *,'".$user_id."' as update_by_id,'".$user_name."' as update_by + from med_store_product_master where id=".$old_id_no; + $query = $this->db->query($sql); + $insertdata= $query->result(); + + if(count($insertdata)>0){ + $this->db->insert("med_store_product_master_update", $insertdata[0]); + $this->db->where("id", $old_id_no); + if ($this->db->delete("med_store_product_master")) { + return 1; + }else + return 0; + }else{ + return 0; + } + + } + + public function insert_med_indent_request($data) { + if ($this->db->insert("med_indent_request", $data)) { + $insert_id = $this->db->insert_id(); + + $Ind_code=str_pad(substr($insert_id,-5,5),5,0,STR_PAD_LEFT); + + $Ind_code='R'.date('ymd').$Ind_code; + + $data = array( + 'indent_code' => $Ind_code, + ); + + $this->db->set($data); + $this->db->where("indent_id", $insert_id); + $this->db->update("med_indent_request", $data); + + return $insert_id; + }else + return 0; + } + + public function update_med_indent_request($data,$old_id_no) { + $this->db->set($data); + $this->db->where("indent_id", $old_id_no); + $this->db->update("med_indent_request", $data); + + } + + public function insert_med_indent_request_items($data) { + if ($this->db->insert("med_indent_request_items", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_indent_request_items($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_indent_request_items", $data); + } + + public function delete_med_indent_request_item($indent_id,$del_indent_item_id) { + + $this->db->where("id", $del_indent_item_id); + $this->db->delete("med_indent_request_items"); + + $this->db->where("indent_item_id", $del_indent_item_id); + $this->db->delete("med_indent_process_items"); + + return 1; + } + + //For Med_indent_process + public function insert_med_indent_process($data) { + if ($this->db->insert("med_indent_process", $data)) { + return 1; + }else + return 0; + } + + public function update_med_indent_process($data,$old_id_no) { + $this->db->set($data); + $this->db->where("indent_id", $old_id_no); + $this->db->update("med_indent_process", $data); + } + + // Med_indent_process Items + + public function insert_med_indent_process_items($data) { + if ($this->db->insert("med_indent_process_items", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_med_indent_process_items($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("med_indent_process_items", $data); + } + + public function delete_med_indent_process_item($indent_id,$del_indent_item_id) { + $this->db->where("id", $del_indent_item_id); + $this->db->delete("med_indent_process_items"); + return 1; + + } + + // Med_indent_accept Items Table : store_stock + + public function insert_store_stock_items($data) { + if ($this->db->insert("store_stock", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_store_stock_items($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + $this->db->update("store_stock", $data); + } + + public function delete_store_stock_item($id) { + $this->db->where("id", $id); + $this->db->delete("store_stock"); + return 1; + + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Reffer_M.php b/old_code_ci3/models/Reffer_M.php new file mode 100644 index 0000000..2c699dd --- /dev/null +++ b/old_code_ci3/models/Reffer_M.php @@ -0,0 +1,27 @@ +db->insert("refer_master", $data)) { + $insert_id = $this->db->insert_id(); + + return $insert_id; + }else + return 0; + } + + public function update($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("refer_master", $data)) { + return 1; + }else + return 0; + } +} \ No newline at end of file diff --git a/old_code_ci3/models/SMS_M.php b/old_code_ci3/models/SMS_M.php new file mode 100644 index 0000000..de7792c --- /dev/null +++ b/old_code_ci3/models/SMS_M.php @@ -0,0 +1,45 @@ +db->insert("sms_inbox", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_sms_inbox($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("sms_inbox", $data)) { + return 1; + }else + return 0; + } + + public function insert_sms_outbox($data) { + if ($this->db->insert("sms_outbox", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + }else + return 0; + } + + public function update_sms_outbox($data,$old_id_no) { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("sms_outbox", $data)) { + return 1; + }else + return 0; + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/models/Stock_M.php b/old_code_ci3/models/Stock_M.php new file mode 100644 index 0000000..9274e75 --- /dev/null +++ b/old_code_ci3/models/Stock_M.php @@ -0,0 +1,204 @@ +db->insert("invoice_stock_master", $data)) { + $insert_id = $this->db->insert_id(); + $pid = str_pad(substr($insert_id, -7, 7), 7, 0, STR_PAD_LEFT); + + $pid = 'S' . date('ym') . $pid; + + $data1 = array( + 'indent_code' => $pid + ); + + $this->db->set($data1); + $this->db->where("id", $insert_id); + $this->db->update("invoice_stock_master", $data1); + return $insert_id; + } else + return 0; + } + + + public function add_indentitem($data) + { + if ($this->db->insert("inv_stock_item", $data)) { + $insert_id = $this->db->insert_id(); + $store_stock_id = $data['store_stock_id']; + $this->db->query("CALL p_stock_update_purchase_id_store(" . $store_stock_id . ")"); + $this->db->query("CALL p_update_med_GST_store(" . $data['indent_id'] . ")"); + return $insert_id; + } else + return 0; + } + + public function update_indentitem($data, $old_id_no) + { + $this->db->set($data); + $this->db->where("id", $old_id_no); + + if ($this->db->update("inv_stock_item", $data)) { + $store_stock_id = $data['store_stock_id']; + $this->db->query("CALL p_stock_update_purchase_id_store(" . $store_stock_id . ")"); + $this->db->query("CALL p_update_med_GST_store(" . $data['indent_id'] . ")"); + return 1; + } else { + return 0; + } + } + + public function delete_indentitem($itemid, $inv_items) + { + $this->db->delete("inv_stock_item", "id=" . $itemid); + + $update_emp_name = $this->session->userdata('username') . '[' . $this->session->userdata('agent_id') . ']' . date('Y-m-d H:i:s'); + + $add_data = array( + 'delete_by' => $update_emp_name, + ); + + $data = array_merge($inv_items, $add_data); + + $store_stock_id = $data['store_stock_id']; + + //echo "Purchase Id :".$store_stock_id; + + $this->db->insert("inv_stock_item_delete", $data); + $this->db->query("CALL p_update_med_GST_store(" . $data['indent_id'] . ")"); + + $this->db->query("CALL p_stock_update_purchase_id_store(" . $store_stock_id . ")"); + } + + public function update_invoice_final($inv_id) + { + $this->db->query("CALL p_update_med_GST_store(" . $inv_id . ")"); + } + + + + //Purchase Table + public function insert_purchase($data) + { + + $this->db->db_debug = false; + + if ($this->db->insert("purchase_invoice_stock", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + } else + return 0; + } + + public function update_purchase($data, $old_id_no) + { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("purchase_invoice_stock", $data)) { + //$this->db->query("CALL p_purchase_invoice(".$old_id_no.")"); + return 1; + } else { + return 0; + } + } + + public function delete_purchase($inv_id) + { + + $this->db->where("id", $inv_id); + $this->db->delete("purchase_invoice_stock"); + + return 1; + } + + //Purchase Item + + public function insert_purchase_item($data) + { + if ($this->db->insert("purchase_invoice_item_stock", $data)) { + $insert_id = $this->db->insert_id(); + $this->db->query("CALL f_update_purchase_invoice_stock(" . $insert_id . ")"); + return $insert_id; + } else + return 0; + } + + public function update_purchase_item($data, $old_id_no) + { + $this->db->set($data); + $this->db->where("id", $old_id_no); + if ($this->db->update("purchase_invoice_item_stock", $data)) { + $this->db->query("CALL f_update_purchase_invoice_stock(" . $old_id_no . ")"); + return 1; + } else { + return 0; + } + } + + public function delete_purchase_item($inv_id, $del_inv_item_id) + { + + $this->db->where("id", $del_inv_item_id); + if ($this->db->delete("purchase_invoice_item_stock")) { + + $this->db->query("CALL p_purchase_invoice_stock(" . $inv_id . ")"); + + return 1; + } else { + return 0; + } + } + + public function insert_drug_add($data) + { + if ($this->db->insert("drug_temp", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + } else + return 0; + } + + public function update_drug($data, $old_id_no) + { + + $this->db->set($data); + $this->db->where("item_id", $old_id_no); + + if ($this->db->update("drug_temp", $data)) { + return 1; + } else { + return 0; + } + } + + // Store Supplier + + public function insert_supplier($data) + { + + if ($this->db->insert("stock_supplier", $data)) { + $insert_id = $this->db->insert_id(); + return $insert_id; + } else + return 0; + } + + public function update_supplier($data, $old_id_no) + { + $this->db->set($data); + $this->db->where("sid", $old_id_no); + if ($this->db->update("stock_supplier", $data)) { + return $old_id_no; + } else { + return 0; + } + } +} diff --git a/old_code_ci3/models/Store_M.php b/old_code_ci3/models/Store_M.php new file mode 100644 index 0000000..ac688e0 --- /dev/null +++ b/old_code_ci3/models/Store_M.php @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/views/AdminMain.php b/old_code_ci3/views/AdminMain.php new file mode 100644 index 0000000..e856e6b --- /dev/null +++ b/old_code_ci3/views/AdminMain.php @@ -0,0 +1,8 @@ + +
+
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/ControlSide.php b/old_code_ci3/views/ControlSide.php new file mode 100644 index 0000000..1ec7264 --- /dev/null +++ b/old_code_ci3/views/ControlSide.php @@ -0,0 +1,193 @@ + + + + +
diff --git a/old_code_ci3/views/DocAdmin/doc_input_list.php b/old_code_ci3/views/DocAdmin/doc_input_list.php new file mode 100644 index 0000000..4c3435a --- /dev/null +++ b/old_code_ci3/views/DocAdmin/doc_input_list.php @@ -0,0 +1,103 @@ +'form','class'=>'form1')); ?> +
+
+

Input List

+
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Input NameInput CodeAction
input_name ?>input_code ?> +
+ + + item_id; + $sort_current=$doc_Item_List[$i]->short_order; + + if($i+1 < count($doc_Item_List)) + { + $option_next=$doc_Item_List[$i+1]->item_id; + $sort_next=$doc_Item_List[$i+1]->short_order; + + echo ''; + } + if($i>0) + { + $option_prev=$doc_Item_List[$i-1]->item_id; + $sort_prev=$doc_Item_List[$i-1]->short_order; + + echo ''; + + } + ?> +
+
#Input NameInput CodeAction
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/DocAdmin/doc_item_edit.php b/old_code_ci3/views/DocAdmin/doc_item_edit.php new file mode 100644 index 0000000..764724f --- /dev/null +++ b/old_code_ci3/views/DocAdmin/doc_item_edit.php @@ -0,0 +1,139 @@ +0) + { + $input_id=$input_parameter[0]->id; + $input_name=$input_parameter[0]->input_name; + $input_code=$input_parameter[0]->input_code; + $input_type=$input_parameter[0]->input_type; + $input_default_value=$input_parameter[0]->input_default_value; + } +?> +'form','class'=>'form1')); ?> +
+
+

Input Parameter

+
+ +
+
+
+
+ + + + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+ +
+ + diff --git a/old_code_ci3/views/DocAdmin/doc_letterhead_print.php b/old_code_ci3/views/DocAdmin/doc_letterhead_print.php new file mode 100644 index 0000000..a09044f --- /dev/null +++ b/old_code_ci3/views/DocAdmin/doc_letterhead_print.php @@ -0,0 +1,51 @@ + + + + + + + + + + +
+ + +

+

, Uttarakhand
+ +

+ +
+ +
+ + + + + + +
Page : {PAGENO}/{nbpg}
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/DocAdmin/doc_list.php b/old_code_ci3/views/DocAdmin/doc_list.php new file mode 100644 index 0000000..5be4200 --- /dev/null +++ b/old_code_ci3/views/DocAdmin/doc_list.php @@ -0,0 +1,59 @@ +
+

+ Document Template List +

+
+
+
+
+
+
+ +

Template List

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
TitleDescriptionAction
doc_name ?>doc_desc ?> + + +
Report TitleGroupAction
+ +
+ +
+
+
+ +
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/DocAdmin/doc_master_edit.php b/old_code_ci3/views/DocAdmin/doc_master_edit.php new file mode 100644 index 0000000..7abd366 --- /dev/null +++ b/old_code_ci3/views/DocAdmin/doc_master_edit.php @@ -0,0 +1,157 @@ +'form','class'=>'form1')); ?> +
+
+

Report Edit

+
+ +
+
+ +
+
+
+
+ + 0) + { + $doc_name=$doc_master[0]->doc_name; + $df_id=$doc_master[0]->df_id; + $doc_desc=$doc_master[0]->doc_desc; + $HTMLData=$doc_master[0]->doc_raw_format; + } + ?> + + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+

Document Parameter

+
+ +
+
+ +
+
+
+ Pre-Define +
+
+
+
+ id)%50]->code_code_2.';">'.$doc_pre_input[$i]->input_name.'['.$doc_pre_input[$i]->input_code.']
'; + } + ?> +
+
+
+
+
+
+
+ Custom Define Input Parameter +
+
+
+
+ item_id)%50]->code_code_2.';">'.$doc_Item_List[$i]->input_name.'['.$doc_Item_List[$i]->input_code.']
'; + } + ?> +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/Doctor_Profile/Doctor_Search_V.php b/old_code_ci3/views/Doctor_Profile/Doctor_Search_V.php new file mode 100644 index 0000000..813527b --- /dev/null +++ b/old_code_ci3/views/Doctor_Profile/Doctor_Search_V.php @@ -0,0 +1,59 @@ +
+

+ Doctor + List +

+ +
+
+
+
+
+ +
+
+ +
+
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
NamePhone NumberEMailAction
p_title ?> p_fname ?>mphone1 ?>email1 ?>
NamePhone NumberEMailAction
+
+ +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/Doctor_Profile/Doctor_V.php b/old_code_ci3/views/Doctor_Profile/Doctor_V.php new file mode 100644 index 0000000..bb23567 --- /dev/null +++ b/old_code_ci3/views/Doctor_Profile/Doctor_V.php @@ -0,0 +1,105 @@ +
+

+ Doctor + Add New +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+ + +
+ + + +
+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Doctor_Profile/Doctor_profile_V.php b/old_code_ci3/views/Doctor_Profile/Doctor_profile_V.php new file mode 100644 index 0000000..a93029d --- /dev/null +++ b/old_code_ci3/views/Doctor_Profile/Doctor_profile_V.php @@ -0,0 +1,300 @@ +
+

+ Doctor + Dr. p_fname; ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+ '; + echo ' '; + echo ' '; + echo ' '; + echo '
'; + } + ?> +
+
+
+ + + + + +
+
+
+
+
+
+
+
+
+
+
+ ''); + $this->table->set_template($table_property); + $this->table->set_heading('Fee Type', 'Description', 'Amount'); + foreach($doc_fee_list as $row) + { + if($row->id=='') + { + $button_code=' Not Define'; + }else{ + $button_code='Remove'; + } + + $this->table->add_row($row->fee_type, $row->doc_fee_desc, $row->amount,$button_code); + } + echo $this->table->generate(); + + ?> + + + + +
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/Doctor_Search_V.php b/old_code_ci3/views/Doctor_Search_V.php new file mode 100644 index 0000000..fc59066 --- /dev/null +++ b/old_code_ci3/views/Doctor_Search_V.php @@ -0,0 +1,59 @@ +
+

+ Doctor + List +

+ +
+
+
+
+
+ +
+
+ +
+
+
+
+

Result

+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
NamePhone NumberEMailAction
p_title ?> p_fname ?>mphone1 ?>email1 ?>
NamePhone NumberEMailAction
+
+ +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/Doctor_V.php b/old_code_ci3/views/Doctor_V.php new file mode 100644 index 0000000..d2e9ed5 --- /dev/null +++ b/old_code_ci3/views/Doctor_V.php @@ -0,0 +1,108 @@ +
+

+ Doctor + Add New +

+ +
+ +
+
+
+
+ 'myform','role'=>'form','class'=>'form1'); + echo form_open('Doctor/AddNew',$attributes); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+ + +
+ + + +
+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Doctor_profile_V.php b/old_code_ci3/views/Doctor_profile_V.php new file mode 100644 index 0000000..2b5463b --- /dev/null +++ b/old_code_ci3/views/Doctor_profile_V.php @@ -0,0 +1,313 @@ +
+

+ Doctor + Dr. p_fname; ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+ '; + echo ' '; + echo ' '; + echo ' '; + echo '
'; + } + ?> +
+
+
+ + + + + +
+
+
+
+
+
+
+
+
+
+
+ ''); + $this->table->set_template($table_property); + $this->table->set_heading('Fee Type', 'Description', 'Amount'); + foreach($doc_fee_list as $row) + { + if($row->id=='') + { + $button_code=' Not Define'; + }else{ + $button_code='Remove'; + } + + $this->table->add_row($row->fee_type, $row->doc_fee_desc, $row->amount,$button_code); + } + echo $this->table->generate(); + + ?> + + + + +
+ + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/DocumentPatient/Doc_update_pre_value.php b/old_code_ci3/views/DocumentPatient/Doc_update_pre_value.php new file mode 100644 index 0000000..f35ff54 --- /dev/null +++ b/old_code_ci3/views/DocumentPatient/Doc_update_pre_value.php @@ -0,0 +1,134 @@ +
+

+ Document Data + +

+ +
+
+ 'form','class'=>'form1')); ?> + +
+
+

Patient Name :p_fname ?>

+ / +
+ +
+ 0) { + for ($i = 0; $i < count($doc_format_sub); ++$i) { ?> +
+
+ +
+
+ +
+ input_type ==1) + { + echo ' +
+
+ + +
+
"; + }elseif($doc_format_sub[$i]->input_type ==2){ + echo ' +
+
+ +
+
+ +
+ +
+
+
'; + }elseif($doc_format_sub[$i]->input_type ==3){ + echo ' +
+
+ + +
+
'; + }else{ + echo ' +
+
+ + +
+
'; + } + ?> +
+ +
+
+ +
+
+ + +
+
+
+ +
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/DocumentPatient/Patient_Doc_Edit.php b/old_code_ci3/views/DocumentPatient/Patient_Doc_Edit.php new file mode 100644 index 0000000..9d3ccd9 --- /dev/null +++ b/old_code_ci3/views/DocumentPatient/Patient_Doc_Edit.php @@ -0,0 +1,104 @@ +
+

+ Document Data + +

+ +
+
+'form','class'=>'form1')); ?> +
+
+
+

Name :p_fname?> {p_rname ?>} + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> +

+ + +
+
+
+
+
+
+ + +
+
+
+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/DocumentPatient/Patient_Doc_master.php b/old_code_ci3/views/DocumentPatient/Patient_Doc_master.php new file mode 100644 index 0000000..7504c07 --- /dev/null +++ b/old_code_ci3/views/DocumentPatient/Patient_Doc_master.php @@ -0,0 +1,139 @@ +
+

+ Document Data + +

+ +
+
+'form','class'=>'form1')); ?> +
+
+
+

Name :p_fname?> {p_rname ?>} + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> +

+ +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + + + + '; + echo ''; + echo ''; + echo ''; + if($row->update_pre_value==0) + { + echo ''; + + }else{ + echo ''; + } + + echo ''; + $srno=$srno+1; + } + ?> + +
#Issue DateDocument Name
'.$srno.''.$row->str_date_issue.''.$row->doc_name.' + +
+
+
+
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Footer.php b/old_code_ci3/views/Footer.php new file mode 100644 index 0000000..88fa063 --- /dev/null +++ b/old_code_ci3/views/Footer.php @@ -0,0 +1,345 @@ + +
+ + Copyright © 2014- DevSoft Tech. All + rights + reserved. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/Header.php b/old_code_ci3/views/Header.php new file mode 100644 index 0000000..1cc6509 --- /dev/null +++ b/old_code_ci3/views/Header.php @@ -0,0 +1,219 @@ + + + + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/Bed_panel.php b/old_code_ci3/views/IPD/Bed_panel.php new file mode 100644 index 0000000..0c8ed1c --- /dev/null +++ b/old_code_ci3/views/IPD/Bed_panel.php @@ -0,0 +1,127 @@ +
+
+

Room & Bed Assign List

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoomBEDUHID IDPatient NameTPA
room_name?>bed_no?>ipd_code?>
p_code?>
p_fname?>
p_relative?>
p_rname?>
admit_type?>
RoomBEDUHID/IPD IDPatient NameTPA
+ +
+ + + + + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/IPDList_V.php b/old_code_ci3/views/IPD/IPDList_V.php new file mode 100644 index 0000000..b28e2ec --- /dev/null +++ b/old_code_ci3/views/IPD/IPDList_V.php @@ -0,0 +1,63 @@ +
+

+ IPD List + +

+ +
+
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodeName/Patient CodeBed No.[Type]Register DateNo. of DaysDr. NameAdmit TypeAmount
ipd_code ?>[p_code ?>] p_fname ?>
p_rname ?>
Bed_Desc ?>str_register_date ?>no_days ?>doc_name ?>admit_type ?>
Org_Status ?>
C:charge_amount ?>/M:med_amount ?>/P:paid_amount?>/B:balance?>
IPD CodeName/Patient CodeRegister DateAdmit TypeAmount
+ +
+ +
+
\ No newline at end of file diff --git a/old_code_ci3/views/IPD/IPD_Medical_Invoice_Panel.php b/old_code_ci3/views/IPD/IPD_Medical_Invoice_Panel.php new file mode 100644 index 0000000..f559124 --- /dev/null +++ b/old_code_ci3/views/IPD/IPD_Medical_Invoice_Panel.php @@ -0,0 +1,87 @@ +
+
+ +
+
+
+
+
+
+

IPD Credit [Include in Bill]

+ Print IPD Credit +
+
+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $check=''; + if ($row->ipd_credit_type>0) + { + $check='Checked'; + } + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + +
#Invoice ID.PatientInv.DateAmountInc.Invoice
'.$srno.''.$row->inv_med_code.''.$row->inv_name.''.$row->inv_date.''.$row->net_amount.'
#
+ +
+
+
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/IPD_View.php b/old_code_ci3/views/IPD/IPD_View.php new file mode 100644 index 0000000..ff7c7c2 --- /dev/null +++ b/old_code_ci3/views/IPD/IPD_View.php @@ -0,0 +1,271 @@ + +
+
+
+
+

General Information : IPD No. ipd_code?>

+
+ +
+ Name + +

+ p_fname?> +
+ Phone Number : mphone1?> +

+
+ + Relative Name + +

+ contact_person_Name?>
+ Phone Number : P_mobile1?> , P_mobile2?> +

+ +
+ Address + +

+ add1?>,
+ add2?>,
+ city?>,
+ state?>,
+

+ +
+ + Admit Date +

+ Admit Date : register_date) ?> Time : reg_time ?> +

+ ipd_status>0) { ?> +

+ Discharge Date : discharge_date) ?> discharge_time ?>
+

+ +
+ Associated Doctors +

+ p_fname.' '; + if ($this->ion_auth->in_group('IPDAdmit')) { + echo ' Remove'; + } + echo '
'; + $srno=$srno+1; + } + ?> +

+
+ Notes +

+ remark?> +

+
+ +
+
+
+
+
+

Update Information

+
+ +
+
+

Charges Bill :

+

Medical Bill :

+

Credit IPD :

+

Cash : /

+

Paid Amount :

+

Discount Amount :

+

Charge Amount :

+

Balance Amount :

+

+ Print Bill +

+
+
+
+
+
+

Medical IPD Credit

+
+
+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $check='Package'; + if ($row->ipd_credit_type>0) + { + $check='Cash'; + } + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + +
#Invoice ID.PatientInv.DateAmountInc.Invoice
'.$srno.''.$row->inv_med_code.''.$row->inv_name.''.$row->inv_date.''.$row->net_amount.''.$check.' Print +
#
+
+
+
+ ion_auth->in_group('IPDPayment')) { ?> +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + +
#ID.Payment DateAmountMode
'.$srno.''.$row->id.''; + echo ''.$row->pay_date.''.$row->amount.''.$row->pay_mode.'
#
+ +
+
+ +
+ + +
+
+ + + + + + diff --git a/old_code_ci3/views/IPD/Ipd_Registration_V.php b/old_code_ci3/views/IPD/Ipd_Registration_V.php new file mode 100644 index 0000000..675a98e --- /dev/null +++ b/old_code_ci3/views/IPD/Ipd_Registration_V.php @@ -0,0 +1,244 @@ +
+

+ IPD + Registration +

+ +
+'form','class'=>'form1')); ?> +
+
+
+

+ Name :p_fname?> + p_relative?> p_rname?> + + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> +

+ + +
+
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+ +
+
+
+ +
+
+ +
+ /> +
+
+
+
+
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+ + +
+
+
+
+ 0) { ?> +
+
+
+
+ + +
+
+
+
+ '; + } ?> + +
+
+
+ +
+ '; + echo ' '; + echo $row->p_fname.' ['.$row->SpecName.']'; + echo '
'; + } + ?> +
+
+
+
+
+
+
+ + +
+
+ +
+
+
+
+
+ + +
+
+
+
+
+
+
+

Remarks + Write some about the problem +

+ +
+ + +
+ +
+ +
+ + + +
+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/Ipd_invoice_V.php b/old_code_ci3/views/IPD/Ipd_invoice_V.php new file mode 100644 index 0000000..6800590 --- /dev/null +++ b/old_code_ci3/views/IPD/Ipd_invoice_V.php @@ -0,0 +1,206 @@ +
+

+ IPD Invoice + IPD ID: ipd_code?> +

+
+
+'form','class'=>'form1')); ?> +
+
+
+

+ Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + case_id>0) { ?> + / Ins. Comp. :ins_company_name?> + +

+ + case_id>0) { ?> + + +
+
+
+ + + + + + + + + + Charge_type) + { + echo ''; + echo ''; + echo ''; + echo ''; + $headdesc=$showinvoice[$i]->Charge_type; + $headTotal=0.00; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + $headTotal += $showinvoice[$i]->amount; + echo ''; + + if($headdesc!=@$showinvoice[$i+1]->Charge_type) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + + if(count($inv_med_list)>0) + { + echo ''; + echo ''; + echo ''; + echo ''; + + $med_total=0.00; + + foreach($inv_med_list as $row) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + $med_total +=$row->net_amount; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + Discount>0) { ?> + + + + + + + + + + Discount2>0) { ?> + + + + + + + + + + Discount3>0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#DescriptionOrg.CodeUnitRateAmount
'.$showinvoice[$i]->Charge_type.'
'.$srno.''.$showinvoice[$i]->idesc.''.$showinvoice[$i]->orgcode.''.$showinvoice[$i]->no_qty.''.$showinvoice[$i]->item_rate.''.$showinvoice[$i]->amount.'
Sub Total'.number_format($headTotal,2).'
Medicine
'.$srno.''.$row->inv_med_code.''.$row->net_amount.'
Med. Total '.number_format($med_total,2).'
#Gross Total
#Remark :
Discount_Remark ?>
Deduction Discount ?>
#Remark :
Discount_Remark2 ?>
Deduction Discount2 ?>
#Remark :
Discount_Remark3 ?>
Deduction Discount3 ?>
#Net Amount
# + Payment Recd.
+ id.':'.$row->pay_mode.':'.$row->pay_date_str.':'.$row->amount.'] /'; + if($i%3==0) + { + echo '
'; + } + } + ?> +
t_ipd_pay?>
#Balance
+
+ +
+ + + +
+ diff --git a/old_code_ci3/views/IPD/Ipd_invoice_print_V.php b/old_code_ci3/views/IPD/Ipd_invoice_print_V.php new file mode 100644 index 0000000..26a29c8 --- /dev/null +++ b/old_code_ci3/views/IPD/Ipd_invoice_print_V.php @@ -0,0 +1,280 @@ + + + + + + <?=H_Name?> | Invoice + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

+ +

+
,
+ Phone: / Email:
+ +
+
+
+ +
+
+

+ ipd_status>0) { ?> + Bill No. : id ?>
+ Provisional Bill
'; } ?> +

+
+ +
+ +
+
+ case_id>0) { ?> + Organisation Invoice #case_id_code?>
+ Organisation :ins_company_name?>
+ Insurance Company Name :Org_insurance_comp?>
+ Card No : insurance_no ?>
+ insurance_id==2) + { + echo ' Service No. :'.$orgcase[0]->insurance_no_2.'
'; + } + ?> + Claim ID/No : insurance_no_1 ?>
+ + +
+
+ IPD ID : ipd_code ?>
+ Admit Date : str_register_date ?> reg_time ?>
+ Discharge Date : str_discharge_date ?> discharge_time ?>
+ No. of Days : no_days==0) {echo '1';} else {echo $ipd_list[0]->no_days; } ?>
+ 0){ ?> + Bed No : bed_no ?> room_name ?>
+ + Doctor Name : doc_name ?>
+
+
+
+ Patient Name : p_fname ?>
+ p_relative ?> : p_rname ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ Patient ID : p_code ?>
+ Address :add1 ?> , add2 ?>
+ city ?> ,district ?> , state ?> - zip ?> +
+ +
+
+ + + +
+
+ + + + + + + + + + Charge_type) + { + echo ''; + echo ''; + echo ''; + echo ''; + $headdesc=$showinvoice[$i]->Charge_type; + $headTotal=0.00; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + $headTotal += $showinvoice[$i]->amount; + + echo ''; + + } + + if(count($inv_med_list)>0) + { + echo ''; + echo ''; + echo ''; + echo ''; + $med_total=0.00; + foreach($inv_med_list as $row) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + $med_total +=$row->net_amount; + echo ''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + chargeamount1>0) { ?> + + + + + + + + + chargeamount2>0) { ?> + + + + + + + + + Discount>0) { ?> + + + + + + + + + Discount2>0) { ?> + + + + + + + + + Discount3>0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#DescriptionOrg.CodeUnitRateAmount
'.$showinvoice[$i]->Charge_type.'
'.$srno.''.$showinvoice[$i]->idesc.''.$showinvoice[$i]->orgcode.''.$showinvoice[$i]->no_qty.''.$showinvoice[$i]->item_rate.''.$showinvoice[$i]->amount.'
Medicine
'.$srno.''.$row->inv_med_code.''.$row->net_amount.'
Med. Total '.number_format($med_total,2).'
#Gross Total
#Charge:
charge1 ?>
( + ) chargeamount1 ?>
#Charge:
charge2 ?>
( + ) chargeamount2 ?>
#Deduction:
Discount_Remark ?>
( - ) Discount ?>
#Deduction:
Discount_Remark2 ?>
( - ) Discount2 ?>
#Deduction:
Discount_Remark3 ?>
( - ) Discount3 ?>
#Net Amount
# + Payment Recd.
+ pay_id.':'.$row->pay_mode.':'.$row->pay_date_str.':'.$row->amount.'] /'; + if($i%3==0) + { + echo '
'; + } + } + ?> +
t_ipd_pay?>
#Balance



Patient / Relative Signature



Authorized Signatory
+
+
+
+
+ + + + diff --git a/old_code_ci3/views/IPD/Ipd_invoice_short_all.php b/old_code_ci3/views/IPD/Ipd_invoice_short_all.php new file mode 100644 index 0000000..cae2f39 --- /dev/null +++ b/old_code_ci3/views/IPD/Ipd_invoice_short_all.php @@ -0,0 +1,77 @@ +
+

+ IPD Invoice + IPD ID: ipd_code?> +

+ +
+
+'form','class'=>'form1')); ?> +
+
+
+

+ Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + case_id>0) { ?> + / Ins. Comp. :ins_company_name?> + +

+ + case_id>0) { ?> + + +
+
+
+ + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + ?> + + + + + + + + + + +
#DateCharges TypeDescriptionOrg. CodeSub Invoice CodeAmount
'.$srno.''.$row->str_date.''.$row->Charge_type.''.$row->Description.''.$row->orgcode.''.$row->Code.''.$row->Amount.'
#Gross TotalGTotal?>
+
+ +
+ + + +
+ diff --git a/old_code_ci3/views/IPD/Ipdpanel_V.php b/old_code_ci3/views/IPD/Ipdpanel_V.php new file mode 100644 index 0000000..424c2c7 --- /dev/null +++ b/old_code_ci3/views/IPD/Ipdpanel_V.php @@ -0,0 +1,233 @@ +
+

+ IPD + +

+ +
+ +
+
+
+

Name :p_fname?> {p_rname?>} + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + / IPD Code :ipd_code?> + / No of Days :no_days?> +

+

Admit Date :str_register_date?> + / Discharge Date :str_discharge_date?> +

+ + + +
+
+
+
+
+

Charges Bill

+

Rs.

+
+
+
+
+

Medical Bill

+

Credit IPD : Rs.

+

Cash : Rs. /

+
+
+
+
+

Paid Amount

+

Rs.

+ +
+
+
+
+

Discount Amount

+

Rs.

+

Charge Amount

+

Rs.

+
+
+
+
+

Balance Amount

+

Rs.

+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+ + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_account_panel.php b/old_code_ci3/views/IPD/ipd_account_panel.php new file mode 100644 index 0000000..47746cc --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_account_panel.php @@ -0,0 +1,48 @@ +
+
+

Charges Bill

+

Rs.

+
+
+
+
+

Medical Bill

+

Credit IPD : Rs.

+

Cash : Rs. /

+
+
+
+
+

Paid Amount

+

Rs.

+ +
+
+
+
+

Discount Amount

+

Rs.

+

Extra Charge Amount

+

Rs.

+
+
+
+
+

Balance Amount

+

Rs.

+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_all_list.php b/old_code_ci3/views/IPD/ipd_all_list.php new file mode 100644 index 0000000..ebe3389 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_all_list.php @@ -0,0 +1,173 @@ +
+

IPD List

+
+
+
+
+
+
+ + + +
+   + +
+
+
+
+ +
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient CodeNamePhone NumberDoctorStatusRegistrationDischarge
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_bed_assign.php b/old_code_ci3/views/IPD/ipd_bed_assign.php new file mode 100644 index 0000000..5fd554e --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_bed_assign.php @@ -0,0 +1,103 @@ +
+
+ + + + + + + + + + + + + + + + + + + +
Bed No.DescriptionDateVacant Date
bed_no ?>room_name ?>Fdate ?>TDate ?>
+
+ +
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_bed_status.php b/old_code_ci3/views/IPD/ipd_bed_status.php new file mode 100644 index 0000000..145f84a --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_bed_status.php @@ -0,0 +1,58 @@ +
+

+ Bed Status + +

+ +
+
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + Total_Bed; + $total_free_bed=$total_free_bed+$roomdata[$i]->FreeBed; + } ?> + + + + + + + + + + + +
#DescNo. of BedFree BedRoom Rent
room_name ?>Total_Bed ?>FreeBed ?>room_rent ?>
#Total
+
+ +
+
\ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_dashboard.php b/old_code_ci3/views/IPD/ipd_dashboard.php new file mode 100644 index 0000000..2e154e8 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_dashboard.php @@ -0,0 +1,38 @@ +
+

+ IPD + Inpatient Department +

+
+ +
+ +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_discharge.php b/old_code_ci3/views/IPD/ipd_discharge.php new file mode 100644 index 0000000..217dd3e --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_discharge.php @@ -0,0 +1,306 @@ +
+
+

Discharge Process

+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+ +
+ /> +
+
+
+
+
+ +
+ +
+ +
+
+ +
+
+
+
+ + +
+
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + + ion_auth->in_group('IPDDischarge')){ + if($ipd_info[0]->lock_medical==0) { ?> + + + Discharge Button Not Enable due to medical bill pending. Please contact Medical Store + +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_discharged_status.php b/old_code_ci3/views/IPD/ipd_discharged_status.php new file mode 100644 index 0000000..87ba3ec --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_discharged_status.php @@ -0,0 +1,90 @@ +
+
+

Discharge Process

+
+
+ +
+
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+
+
+

Remarks + +

+
+ +
+ discharge_remark ?> +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+ ion_auth->in_group('IPDReAdmit')) { ?> +
+
+ + + + +
+
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_invoice_error_v.php b/old_code_ci3/views/IPD/ipd_invoice_error_v.php new file mode 100644 index 0000000..59fb4c7 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_invoice_error_v.php @@ -0,0 +1,3 @@ +

+Discount Should not be greater then 10%

+

Please Contact Admin Department

\ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_invoice_items.php b/old_code_ci3/views/IPD/ipd_invoice_items.php new file mode 100644 index 0000000..a427b62 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_invoice_items.php @@ -0,0 +1,696 @@ +
+

+ IPD Charges + +

+
+
+'form','class'=>'form1')); ?> +
+
+
+ IPD Charges +
+
+
+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_invoice_print_wo_payment.php b/old_code_ci3/views/IPD/ipd_invoice_print_wo_payment.php new file mode 100644 index 0000000..9c6b314 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_invoice_print_wo_payment.php @@ -0,0 +1,260 @@ + + + + + + <?=H_Name?> | Invoice + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

+ +

+
,
+ Phone: / Email: +
+
+
+ +
+
+

+ ipd_status>0) { ?> + Bill No. : id ?>
+ Provisional Bill
'; } ?> +

+
+ +
+ +
+
+ case_id>0) { ?> + Organisation Invoice #case_id_code?>
+ Organisation :ins_company_name?>
+ Insurance Company Name :Org_insurance_comp?>
+ Card No : insurance_no ?>
+ insurance_id==2) + { + echo ' Service No. :'.$orgcase[0]->insurance_no_2.'
'; + } + ?> + Claim ID/No : insurance_no_1 ?>
+ + +
+
+ IPD ID : ipd_code ?>
+ Admit Date : str_register_date ?> reg_time ?>
+ Discharge Date : str_discharge_date ?> discharge_time ?>
+ No. of Days : no_days==0) {echo '1';} else {echo $ipd_list[0]->no_days; } ?>
+ 0){ ?> + Bed No : bed_no ?> room_name ?>
+ + Doctor Name : doc_name ?>
+
+
+
+ Patient Name : p_fname ?>
+ p_relative ?> : p_rname ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ Patient ID : p_code ?>
+ Address :add1 ?> , add2 ?>
+ city ?> ,district ?> , state ?> - zip ?> +
+ +
+
+ + + +
+
+ + + + + + + + + + Charge_type) + { + echo ''; + echo ''; + echo ''; + echo ''; + $headdesc=$showinvoice[$i]->Charge_type; + $headTotal=0.00; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + $headTotal += $showinvoice[$i]->amount; + + echo ''; + + + + } + + if(count($inv_med_list)>0) + { + echo ''; + echo ''; + echo ''; + echo ''; + $med_total=0.00; + foreach($inv_med_list as $row) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + $med_total +=$row->net_amount; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + + + } + ?> + + + + + + + + + chargeamount1>0) { ?> + + + + + + + + + chargeamount2>0) { ?> + + + + + + + + + Discount>0) { ?> + + + + + + + + + Discount2>0) { ?> + + + + + + + + + Discount3>0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#DescriptionOrg.CodeUnitRateAmount
'.$showinvoice[$i]->Charge_type.'
'.$srno.''.$showinvoice[$i]->idesc.''.$showinvoice[$i]->orgcode.''.$showinvoice[$i]->no_qty.''.$showinvoice[$i]->item_rate.''.$showinvoice[$i]->amount.'
Medicine
'.$srno.''.$row->inv_med_code.''.$row->net_amount.'
Med. Total '.number_format($med_total,2).'
#Gross Total
#Charge:
charge1 ?>
( + ) chargeamount1 ?>
#Charge:
charge2 ?>
( + ) chargeamount2 ?>
#Deduction:
Discount_Remark ?>
( - ) Discount ?>
#Deduction:
Discount_Remark2 ?>
( - ) Discount2 ?>
#Deduction:
Discount_Remark3 ?>
( - ) Discount3 ?>
#Net Amount



Patient / Relative Signature



Authorized Signatory
+
+
+
+
+ + + + diff --git a/old_code_ci3/views/IPD/ipd_main_panel.php b/old_code_ci3/views/IPD/ipd_main_panel.php new file mode 100644 index 0000000..dd82811 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_main_panel.php @@ -0,0 +1,407 @@ +
+
+
+
+

General Information

+
+ +
+ Name + +

+ p_fname?> +
+ Phone Number : mphone1?> +

+
+ + Relative Name + +

+ contact_person_Name?>
+ Phone Number : P_mobile1?> , P_mobile2?> +

+ +
+ Address + +

+ add1?>,
+ add2?>,
+ city?>,
+ state?>,
+

+ +
+ + Admit Date +

+ +

+

+ ion_auth->in_group('IPDAdmit')) { ?> +

+
+
+ +
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+ +
+
+ +
+
+
+
+
+ +
+
+
+ + + + + Admit Date : register_date) ?> Time : reg_time ?> + +

+
+ Associated Doctors +

+ p_fname.' '; + if ($this->ion_auth->in_group('IPDAdmit')) { + echo ' Remove'; + } + echo '
'; + $srno=$srno+1; + } + ?> +

+ + ion_auth->in_group('IPDAdmit')) { ?> +
+
+ +
+ +
+ +
+ Notes +

+ remark?> +

+
+ +
+
+
+
+
+

Update Information

+
+ +
+ + 0) { ?> +
+
+
+ + + + + +
+
+
+ case_id<1) { ?> + + +
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + + +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + + +
+
+
+
+
+ +
+ + + + +
+
+
+
+ + + + +
+
+
+ +
+
+
+ +
+ +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_medical_invoice_short.php b/old_code_ci3/views/IPD/ipd_medical_invoice_short.php new file mode 100644 index 0000000..46d1d57 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_medical_invoice_short.php @@ -0,0 +1,43 @@ +
+
+

Invoice ID : inv_med_code ?>

+ Print + + +
+
+ + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + +
#Item NameQty.PriceAmount
'.$srno.''.$row->item_Name.'['.$row->formulation.']'.$row->qty.''.$row->price.''.$row->tamount.'
#Totalnet_amount ?>
+ +
+
\ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_model_payment_box.php b/old_code_ci3/views/IPD/ipd_model_payment_box.php new file mode 100644 index 0000000..20b5090 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_model_payment_box.php @@ -0,0 +1,307 @@ +
+
+
+
+

Name :p_fname?> {p_rname?>} + / Age :str_age?> + / Gender :xgender?> + / P Code :p_code?> + / IPD Code :ipd_code?> + / No of Days :no_days?> +

+
+
+
+
+
+
+
+

Amount :

+
+
+
+
+ +
+
+
+ +
+ /> +
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+

+ + Cash +

+
+
+
+
+
+ + +
+
+ +
+
+
+
+ +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_package.php b/old_code_ci3/views/IPD/ipd_package.php new file mode 100644 index 0000000..40e9619 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_package.php @@ -0,0 +1,194 @@ +
+

+ IPD Billing Panel + +

+
+
+'form','class'=>'form1')); ?> +
+
+
+
+
+ IPD Package +
+
+
+ +
+ +
+
+
+ +
+
+
+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_panel_deduction_payment.php b/old_code_ci3/views/IPD/ipd_panel_deduction_payment.php new file mode 100644 index 0000000..f40bbd4 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_panel_deduction_payment.php @@ -0,0 +1,174 @@ +
+
+
+

Amount :

+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+

+ + Cash +

+
+
+
+
+
+ + +
+
+ +
+
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_panel_refund.php b/old_code_ci3/views/IPD/ipd_panel_refund.php new file mode 100644 index 0000000..dc3094c --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_panel_refund.php @@ -0,0 +1,131 @@ +
+
+
+

Amount :

+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+

+ + Cash +

+
+
+
+
+
+ + +
+
+ +
+
+
+
+ +
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_payment.php b/old_code_ci3/views/IPD/ipd_payment.php new file mode 100644 index 0000000..0e2bdb6 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_payment.php @@ -0,0 +1,169 @@ +
+
+ +
+
+
+
+
+
+

Charges

+
+
+ + + + + + + + + + + '; + echo ''; + $check=''; + if ($row->ipd_include>0) + { + $check='Checked'; + } + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if ($this->ion_auth->in_group('admin')) { + echo ''; + }else{ + echo ''; + } + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + +
#Invoice ID.Ref.Inv.DateCharge TypeAmount
'.$srno.''.$row->invoice_code.''.$row->refer_by_other.''.$row->str_date.''.$row->charge_list.''.$row->amount.' IPD Invoice Edit
# +
+
+
+
+
+
+
+
+
+

Payments Details

+
+
+ + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + +
#ID.Payment DateAmountMode
'.$srno.''.$row->id.''; + echo ''.$row->pay_date.''.$row->amount.''.$row->pay_mode.'
#
+
+
+
+
+
+
+

Medicine

+
+
+
+ + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + +
#Invoice ID.Inv.DateAmount
'.$srno.''.$row->inv_med_code.''.$row->inv_date.''.$row->net_amount.'
#
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/ipd_payment_receipt_print.php b/old_code_ci3/views/IPD/ipd_payment_receipt_print.php new file mode 100644 index 0000000..4d3abc7 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_payment_receipt_print.php @@ -0,0 +1,109 @@ + + + + + + <?=H_Name?> | Invoice + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ +
+
+ + +
+
+
+ From +
+
+
+
+
+
+ +
+ To +
+ p_fname ?>
+ Patient Code : p_code ?>
+ Phone No : P_mobile1 ?>
+ Payment Receipt No #payment_id ?>
+ Date : pay_date ?>
+ IPD Code : ipd_code ?>
+
+
+ + +
+
+
+ + Payment Receipt No #payment_id ?>
+

+ Mode of Payment : payment_mode_desc ?> +

+

+ IPD Payment Amount : amount ?> (In Words : amount) ?> ) +

+

+ Remark : +

+ remark ?> +
+
+
+ Prepared By : prepared_by ?> +
+
+ +
+
+ Signature +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ + +
+ +
+ + diff --git a/old_code_ci3/views/IPD/ipd_room.php b/old_code_ci3/views/IPD/ipd_room.php new file mode 100644 index 0000000..1202503 --- /dev/null +++ b/old_code_ci3/views/IPD/ipd_room.php @@ -0,0 +1,5 @@ +
+
+

Room

+
+
\ No newline at end of file diff --git a/old_code_ci3/views/IPD/print_ipd_form1.php b/old_code_ci3/views/IPD/print_ipd_form1.php new file mode 100644 index 0000000..d3e7ac0 --- /dev/null +++ b/old_code_ci3/views/IPD/print_ipd_form1.php @@ -0,0 +1,138 @@ + + + + + + + + +
+

+

,

+ +

+

+ Patient Info :
+ Patient Name : p_fname?>
+ p_relative?> p_rname?>
+ Age : age ?>
+ Gender : xgender ?>
+

+
+

Face Sheet

+
+ + + '; + $Insurance=''; + if(count($case_master)>0){ + $Insurance= '
Insurance : '.$case_master[0]->insurance_company_name; + } + + echo ''; + + echo ''; + + $srno=1; + $ipd_doc_list_show='';; + foreach($ipd_doc_list as $row) + { + $ipd_doc_list_show.= ' Dr. '.$row->p_fname.' / '; + $srno=$srno+1; + } + + + echo ''; + + echo ''; + ?> +
Patient Information :
+ Patient Name :'.$person_info[0]->p_fname.'
+ '.$person_info[0]->p_relative.''.$person_info[0]->p_rname.'
+ Age : '.$person_info[0]->age .'
+ Gender : '.$person_info[0]->xgender.'
+ UHID/Patient Code : '.$person_info[0]->p_code.'
+ IPD Code : '.$ipd_info[0]->ipd_code.'
+ Phone No : '.$person_info[0]->mphone1.$Insurance.' +
+ Contact Person Name : '.$ipd_info[0]->contact_person_Name.'
+ Relation : '.$ipd_info[0]->relation.'
+ Relative Phone No : '.$ipd_info[0]->P_mobile1.'
+ Patient Address
+ '.$person_info[0]->add1.'
, + '.$person_info[0]->add2.'
, + '.$person_info[0]->city.'
, + '.$person_info[0]->state.' +
+ Date of Admission : '.$ipd_info[0]->str_register_date.'
+ Admission Time : '.$ipd_info[0]->reg_time.'
+ Date of Discharge : '.$ipd_info[0]->discharge_date.'
+ Time of Discharge : '.$ipd_info[0]->discharge_time.'
+ Case Type : '.$ipd_info[0]->case_type_s.'
+ Doctors : : '.$ipd_doc_list_show.' +
+

सहमति पत्र

+

+ मैं ईलाज कराने का/की इक्छुक हूँ | मैं () के चिकित्सक और उनके सहायको को अपना उपचार , परीक्षण, परामर्श, जाँच, औषधि देने , चिकित्सा दवा लगवाने की स्वीकृति देता हूँ | + मुझे मेरी /मेरे मरीज की बीमारी के बारे मे उसके खतरों से जटिलताओं (complications ) से अवगत करा दिया गया है | मुझे ईलाज मे होने वाले खर्च की जानकारी दे दी गई है | मैंने अपनी सभी शंकाओं का निवारण कर लिया है । इस स्वीक्रति पत्र को मैंने ठीक प्रकार से पड़कर स्वयं समझकर हस्ताक्षर के द्वारा अपनी सहमति प्रदान करता / करती हूँ । +

+

+

+

+

+

+

+ + + + + + + + +
+
Prepared By : first_name.' '.$user->last_name.'['.$user->id.']' ?> +
+ + हस्ताक्षर / अंगूठा निशान +
+
+
+ नाम : _______________________________________________ +
+
+
+ मरीज / मरीज से संबंध : _____________________________ +
+
+
+ पता : _______________________________________________ +
+
+
+
+ फ़ोन नंबर : _________________________________________ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/print_payment_receipt_ipd.php b/old_code_ci3/views/IPD/print_payment_receipt_ipd.php new file mode 100644 index 0000000..ed31ce6 --- /dev/null +++ b/old_code_ci3/views/IPD/print_payment_receipt_ipd.php @@ -0,0 +1,73 @@ +
+ +
+
+ +
+ +
+ +
+
+ + +
+ + +
+
+ From +
+
+
+
+ +
+
+ +
+ To +
+ p_fname ?>
+ Phone No : P_mobile1 ?>
+ Payment Reciept No #payment_id ?>
+ Date : pay_date ?>
+ IPD Code : ipd_code ?>
+
+
+ + +
+
+ IPD Credit Amount : amount ?> +
+ Remark : +
+ remark ?> +
+
+ + Mode of Payment : payment_mode_desc ?> +
+
+
+ Prepared By : prepared_by ?> +
+
+ Print +
+
+ Signature +
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+ + +
+ \ No newline at end of file diff --git a/old_code_ci3/views/IPD/test.php b/old_code_ci3/views/IPD/test.php new file mode 100644 index 0000000..a6c75a3 --- /dev/null +++ b/old_code_ci3/views/IPD/test.php @@ -0,0 +1,173 @@ +@extends('app') + +@section('content') +{!! header('Access-Control-Allow-Origin: *'); !!} +{!! header("content-type: Access-Control-Allow-Methods: GET");!!} +
+
+
+
+ Project - {!! $project_title !!} +
+
+
Enter Flat/Room Booking Details
+
+ {!! Form::open(array('route' => 'client.store', 'method' => 'post', 'files' => 'true')) !!} + {!! Form::hidden('user_id', Auth::user()->id) !!} + {!! Form::hidden('flat_id', $flat_id )!!} + {!! Form::hidden('booking_status', $booking_status )!!} +
Fields with * asteric sign are required
+
+
+ {!! $errors->first('cust_type',':message') !!} +
+ + {!! Form::radio('cust_type', 'new', Input::old('cust_type'), array('id'=>'cust_new' )) !!} +
+
+ + {!! Form::radio('cust_type', 'old', Input::old('cust_type'), array('id'=>'cust_old')) !!} +
+ +
+
+ +
+
+ + {!! Form::text('franchise', Auth::user()->name, array('id'=>'franchise','class' => 'form-control', 'readonly'=>'true', 'placeholder'=> Auth::user()->name ,'value'=>Auth::user()->name)) !!} +
+
+
+ + {!! Form::text('agent', Input::old('agent'), array('id'=>'agent','class' => 'form-control')) !!} + +
+ + +
+
+ + {!! Form::text('project_name', $project_title, array('id'=>'project_name','class' => 'form-control', 'placeholder' => $project_title, 'readonly'=>'true', )) !!} +
+
+
+
+ + {!! Form::text('area', Input::old('area'), array('id'=>'area','class' => 'form-control', 'placeholder' => 'Enter Area')) !!} + {!! $errors->first('area',':message') !!} +
+
+ +
+
+ + {!! Form::text('estimated_date', Input::old('estimated_date'), array('id'=>'estimated_date','class' => 'form-control', 'placeholder' => 'Select Date')) !!} + +
+
+ +
+
+
+ + {!! Form::text('cust_code', Input::old('cust_code'), array('id'=>'cust_code','class' => 'form-control', 'placeholder' => 'Enter Customer Code')) !!} + +
+
+
+ + {!! Form::text('cust_status', Input::old('cust_status'), array('id'=>'cust_status','class' => 'form-control', 'readonly')) !!} + +
+
+
+ +
+ + {!! Form::text('customers_name', Input::old('customers_name'), array('id'=>'customers_name','class' => 'form-control', 'placeholder' => 'Enter Customer Name')) !!} + {!! $errors->first('customers_name',':message') !!} +
+ + +
+ +
+
+ + {!! Form::text('phone', Input::old('phone'), array('id'=>'phone','class' => 'form-control', 'placeholder' => 'Enter Phone Number')) !!} + {!! $errors->first('phone',':message') !!} +
+
+
+
+ + {!! Form::text('email', Input::old('email'), array('id'=>'email','class' => 'form-control', 'placeholder' => 'Enter Email Address')) !!} + {!! $errors->first('email',':message') !!} +
+
+
+
+ + {!! Form::textarea('address', Input::old('address'),array('id'=>'address','class' => 'form-control','rows'=>'5','placeholder'=>'Address')) !!} + {!! $errors->first('address',':message') !!} + +
+
+ + +
+
+ + {!! Form::textarea('description', Input::old('description'),array('class' => 'form-control','rows'=>'5')) !!} + +
+
+
+
+ + {!! $errors->first('terms_conditions',':message') !!} +
+
+
+ + Cancel +
+ {!! Form::close() !!} +
+
+
+
+
+ + + +@endsection \ No newline at end of file diff --git a/old_code_ci3/views/IPD2/IPDList_V.php b/old_code_ci3/views/IPD2/IPDList_V.php new file mode 100644 index 0000000..7b3a0b4 --- /dev/null +++ b/old_code_ci3/views/IPD2/IPDList_V.php @@ -0,0 +1,63 @@ +
+

+ IPD List + +

+ +
+
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodeName/Patient CodeBed No.[Type]Register DateNo. of DaysDr. NameAdmit TypeAmount
ipd_code ?>[p_code ?>] p_fname ?>
p_rname ?>
Bed_Desc ?>str_register_date ?>no_days ?>doc_name ?>admit_type ?>
Org_Status ?>
insurance_no_1 ?>
C:charge_amount ?>/M:med_amount ?>/P:paid_amount?>/B:balance?>
IPD CodeName/Patient CodeRegister DateAdmit TypeAmount
+ +
+ +
+
\ No newline at end of file diff --git a/old_code_ci3/views/IPD2/IPD_Medical_Invoice_Panel.php b/old_code_ci3/views/IPD2/IPD_Medical_Invoice_Panel.php new file mode 100644 index 0000000..8ac6875 --- /dev/null +++ b/old_code_ci3/views/IPD2/IPD_Medical_Invoice_Panel.php @@ -0,0 +1,90 @@ +
+
+ +
+
+
+
+
+
+

IPD Credit [Include in Bill]

+ Print All IPD Credit Bill + Print Medicine List +
+
+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $check=''; + if ($row->ipd_credit_type>0) + { + $check='Checked'; + } + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + +
#Invoice ID.PatientInv.DateAmountInc.Invoice
'.$srno.''.$row->inv_med_code.''.$row->inv_name.''.$row->inv_date.''.$row->net_amount.'
#
+ +
+
+
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/IPD2/IPD_View.php b/old_code_ci3/views/IPD2/IPD_View.php new file mode 100644 index 0000000..b6461bd --- /dev/null +++ b/old_code_ci3/views/IPD2/IPD_View.php @@ -0,0 +1,197 @@ + +
+
+
+
+

General Information : IPD No. ipd_code?>

+
+ +
+ Name +

+ p_fname?> +
+ Phone Number : mphone1?> +

+ Relative Name + +

+ contact_person_Name?>
+ Phone Number : P_mobile1?> , P_mobile2?> +

+ Address + +

+ add1?>,
+ add2?>,
+ city?>,
+ state?>,
+

+ Admit Date +

+ Admit Date : register_date) ?> Time : reg_time ?> +

+ + ipd_status>0) { ?> +

+ Discharge Date : discharge_date) ?> discharge_time ?>
+

+ + Associated Doctors +

+ p_fname.' '; + if ($this->ion_auth->in_group('IPDAdmit')) { + echo ' Remove'; + } + echo '
'; + $srno=$srno+1; + } + ?> +

+ Notes + +
+ +
+
+
+
+
+
+

Update Information

+
+
+ Charges :charge_amount?>
+ Pharmacy Cr. IPD :med_amount?>
+ Net Amount :net_amount?>
+ Total Paid :total_paid_amount?>
+ Balance :balance_amount?>
+ Pharmacy Bill :cash_med_amount?>
+ Paid Amount :med_paid?> +

+ Print Bill +

+
+
+
+ + ion_auth->in_group('IPDPayment')) { ?> +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + +
#ID.Payment DateAmountMode
'.$srno.''.$row->id.''; + echo ''.$row->pay_date_str.''.$row->amount.''.$row->pay_mode.'
#
+
+
+ +
+
+ +
+ +
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Medical_Invoice_Return_print.php b/old_code_ci3/views/Medical/Medical_Invoice_Return_print.php new file mode 100644 index 0000000..74fea91 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_Invoice_Return_print.php @@ -0,0 +1,142 @@ + + + + + + <?=M_store?> | Invoice + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

+ +

+


+ +
GST: / L.No: DEMO LIC

+
+ +
+
+

Return Medicine List

+
+
+
+ To +
+ p_fname ?>
+ Patient ID : p_code ?>
+ Refer By : doc_name ?>
+
+ +
+
+
+ IPD Code : ipd_code ?>
+ +
+
+
+ +
+
+ + + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $tAmount=$tAmount+$row->amount; + } + + echo ' + + + + + + + + + + + + '; + ?> + + +
Sr.No.Return DateInv.Code.Item NameBatch No.ExpiryRateOld Qty.Return Qty.AmountUpdate By
'.$srno.''.$row->return_date_time.''.$row->inv_med_code.''.$row->item_Name.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->r_qty.''.$row->amount.''.$row->update_remark.'
Total'.$tAmount.'
+
+
+ +
+
+ +
+
+
+
+ For Krishna Pharmacy +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ + +
+ + + + diff --git a/old_code_ci3/views/Medical/Medical_Invoice_V copy.php b/old_code_ci3/views/Medical/Medical_Invoice_V copy.php new file mode 100644 index 0000000..b7bfd32 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_Invoice_V copy.php @@ -0,0 +1,567 @@ +
+

+ Medical Invoice No. inv_med_code?> + + Edit + +

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+ + + + patient_id==0) { ?> + + + + + + + + + + +
Patient Name : Doctor Name : + + Other Doctor: + +
+ +
+

Name : + inv_name?> + / P Code :patient_code?> + / Invoice No. :inv_med_code?> + / Date : inv_date)?> + ipd_id > 0) { + $ipd_no_title="/IPD:".$invoiceMaster[0]->ipd_id; + ?> + + IPD Code : + + ipd_code?> + + Admit Date : str_register_date ?> + reg_time ?> + / Doctor :doc_name?> + / TPA-Org. :admit_type?> + / Bill Type + :ipd_credit)?'Credit To Hospital':'CASH/Direct'?> + case_id > 0){ ?> + / Org. Case ID : + case_id_code ?> + + + + + + + + + + +
Doctor Name : + + Other Doctor: + +
+ + + +

+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+ + +

+ + + + + + + + +

+
+
+
+
+
+ + +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+

Sale Medicine

+
+ +
+
+ + +
+ +
+ + + +
+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Medical_Invoice_V.php b/old_code_ci3/views/Medical/Medical_Invoice_V.php new file mode 100644 index 0000000..f690f50 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_Invoice_V.php @@ -0,0 +1,627 @@ +
+

+ Medical Invoice No. inv_med_code?> + + Edit + +

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+ + + + patient_id==0) { ?> + + + + + + + + + + +
Patient Name : Phone No : Doctor Name : + + Other Doctor: + +
+ +
+

Name : + inv_name?> + / P Code :patient_code?> + / Invoice No. :inv_med_code?> + / Date : inv_date)?> + ipd_id > 0) { + $ipd_no_title="/IPD:".$invoiceMaster[0]->ipd_id; + ?> + + IPD Code : + + ipd_code?> + + Admit Date : str_register_date ?> + reg_time ?> + / Doctor :doc_name?> + / TPA-Org. :admit_type?> + / Bill Type + :ipd_credit)?'Credit To Hospital':'CASH/Direct'?> + case_id > 0){ ?> + / Org. Case ID : + case_id_code ?> + + + + + + + + + + +
Doctor Name : + + Other Doctor: + +
+ + + +

+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+ + + + +

+ + + + + + + + +

+
+
+
+
+
+ + +
+
+
+
+ + + +
+
+
+
+ + ipd_id > 0){ + $readonly="Readonly"; + }else{ + $readonly="Readonly"; + } + ?> + /> +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+ ipd_id == 0){ ?> +
+
+ +

Sale Medicine

+
+ + +
+ +
+ + +
+ +
+ + + +
+ + +
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Medical_invoice_list.php b/old_code_ci3/views/Medical/Medical_invoice_list.php new file mode 100644 index 0000000..67541b5 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_invoice_list.php @@ -0,0 +1,353 @@ +
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+
+

Name :p_fname?> {p_rname?>} + / Age :age?> + / Gender :xgender?> + / P Code :p_code?>
+

+ + + +
+
+ ipd_status==0) + { + ?> + + + lock_medical==0) + { + ?> + + + + + 0){ ?> + bill_final==0){ ?> + + + + + +
+
+
+
+
+ IPD Code : + + ipd_code?> + + Admit Date : str_register_date ?> reg_time ?> / + Discharge Date : str_discharge_date ?> discharge_time ?> / + No. of Days : no_days==0) {echo '1';} else {echo $ipd_list[0]->no_days; } ?> / + 0){ ?> + Bed No : bed_no ?> room_name ?> + + / Doctor :doc_name?> + / Status :Disstatus?> + +
+
+ case_id>0) { ?> +
+
+ Organisation Code #case_id_code?> / + Organisation :ins_company_name?> +
+
+ +
+
+
+ + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + +
#Invoice ID.Inv.DateInv.DescCredit/CashPackageAmount
'.$srno.''.$row->inv_med_code.''.$row->inv_date.''.$row->remark_ipd.''.$row->credit.''.$row->Package.''.$row->net_amount.''; + if($ipd_master[0]->ipd_status==0 || $this->ion_auth->in_group('admin')) + { + echo ''; + if($row->group_invoice_id==0 && $row->ipd_credit==0 ) + { + echo ''; + } + } + + echo ' Print'; + + echo '
#Invoice ID.Inv.DateInv.DescCredit/CashPackageAmount
+
+
+
+
+ + + + + + + + + + + + + +
+ Total Cash : cash_netAmount ?> + + + + Total Credit : IPDCrAmount ?> + + + + Total Package : PackageCrAmount ?> + + + + Total Amount : t_net_amount ?> + + + + Total Balance : t_payment_balance ?> + + +
+
+
+
+
+ + ipd_status==0 or $ipd_master[0]->insurance_id<2){ + ?> + + + + + + + + 0) { ?> + + + + + +
+ + + + +
+ + + + discount_group_2>0) { + ?> + + + +
+ + + + +
+
+ + + + + + + + + + + +
+ Print Cash + + Print Cash With Return + + Print IPD Credit + + Print IPD Package + + Print Consolidated Medicine List + + Print Medicine List Datewise + + Print Page Wise + + Print Return List +
+
+
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Medical_invoice_print.php b/old_code_ci3/views/Medical/Medical_invoice_print.php new file mode 100644 index 0000000..3d089c9 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_invoice_print.php @@ -0,0 +1,174 @@ + + + + + + <?=M_store?> | Invoice + + + + + + + + + + + + + + + +
+
+ +
+
+

+ +

+


+ +
GST: / L.No: DEMO 1/USN/JAN/2008

+

CASH / Credit Memo

+

+ +
+
+
+

+
+ +
+ +
+
+ +
+
+ To +
+ inv_name ?>
+ Date : inv_date ?>
+ Patient ID : patient_code ?>
+
+ +
+
+
+ Refer By : doc_name ?>
+ ipd_id>0) { ?> + IPD Code : ipd_code ?>
+ + case_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + +
#Item NameBatch NoExp.RateQty.PriceDisc.HSNCODE/GSTGSTAmount
'.$srno.''.$row->item_Name.' ['.$row->formulation.']'.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->disc_amount.''.$row->HSNCODE.'/'.$row->gst_per.''.$row->gst.''.$row->tamount.'
#Gross TotalGtotal ?>t_dis_amt?>TGST?>tamt?>
+
+
+
+ + + + + + + + + + +
#Deduction :[discount_remark ?>] discount_amount?>CGST : TCGST?>SGST : TSGST?>Net Amount : net_amount?>Amount received : payment_received?>Balance Amount : payment_balance?>
+
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+
+
+ Prepared By : prepared_by ?> +
+
+
+
+ Signature +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ +
+ + + diff --git a/old_code_ci3/views/Medical/Medical_invoice_print_1.php b/old_code_ci3/views/Medical/Medical_invoice_print_1.php new file mode 100644 index 0000000..7724788 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_invoice_print_1.php @@ -0,0 +1,176 @@ + + + + + + <?=M_store?> | Invoice + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+ From
+
+
+ +
+ Invoice ID #inv_med_code ?>
+ GST :
+
+ +
+ To +
+ inv_name ?>
+ Date : inv_date ?>
+ Patient ID : patient_code ?>
+ Refer By : doc_name ?>
+ ipd_id>0) { ?> + IPD Code : ipd_code ?>
+ + case_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Item NameFormulationBatch NoExp.RateQty.PriceDisc.HSNCODE/C-SGSTCGSTSGSTAmount
'.$srno.''.$row->item_Name.''.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->disc_amount.''.$row->HSNCODE.'/'.$row->CGST_per.'/'.$row->SGST_per.''.$row->CGST.''.$row->SGST.''.$row->tamount.'
#Gross TotalGtotal ?>t_dis_amt?>TCGST?>TSGST?>tamt?>
#Deductiondiscount_remark ?>discount_amount ?>
#Amount received : payment_received?>Balance Amount : payment_balance?>Net Amount : net_amount?>
+
+
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+
+
+ Prepared By : prepared_by ?> +
+
+
+
+ Signature +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ +
+ + + diff --git a/old_code_ci3/views/Medical/Medical_invoice_print_2.php b/old_code_ci3/views/Medical/Medical_invoice_print_2.php new file mode 100644 index 0000000..034fc02 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_invoice_print_2.php @@ -0,0 +1,172 @@ + + + + + + <?=M_store?> | Invoice + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

+ +

+


+ +
GST: / L.No: DEMO 1/USN/JUNE/2008

+
+ +
+
+

CASH / Credit Memo

+
+
+
+ To +
+ inv_name ?>
+ Patient ID : patient_code ?>
+ Refer By : doc_name ?>
+
+ +
+
+
+ Medical Invoice : inv_med_code ?>
+ Invoice Date : inv_date) ?>
+ +
+
+
+
+ ipd_id>0) { ?> + IPD Code : ipd_code ?>
+ + case_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + +
#Item NameBatch NoExp.RateQty.PriceDisc.HSNCODE/GSTGSTAmount
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->d_amt.''.$row->HSNCODE.'/'.$row->gst_per.''.$row->gst.''.$row->twdisc_amount.'
#Gross Totalgross_amount ?>inv_disc_total?>TGST?>net_amount?>
+
+
+
+ + + + + + + + + + + +
#Deduction :[discount_remark ?>] inv_disc_total?>CGST : CGST_Tamount?>SGST : SGST_Tamount?>Taxable Amount : TaxableAmount?>Net Amount : net_amount?>Amount received : payment_received?>Balance Amount : payment_balance?>
+
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+
+
+ Prepared By : prepared_by ?> +
+
+
+
+ Signature +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ +
+ + + + diff --git a/old_code_ci3/views/Medical/Medical_invoice_print_all.php b/old_code_ci3/views/Medical/Medical_invoice_print_all.php new file mode 100644 index 0000000..46a1b60 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_invoice_print_all.php @@ -0,0 +1,191 @@ + + + + + + <?=M_store?> | Invoice + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

+ +

+


+ +
GST: / L.No: DEMO 1/USN/JUNE/2008

+
+ +
+
+ +

CASH / Credit Memo

+
+
+
+ To +
+ p_fname ?>
+ Patient ID : p_code ?>
+ Refer By : doc_name ?>
+
+ +
+
+
+ IPD Code : ipd_code ?>
+ org_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +
+
+
+ +
+
+ + id=='' && $row->inv_med_id != '') + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $head_start=0; + } + elseif($row->id=='' && $row->inv_med_id == ''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + }else{ + + if($head_start==0) + { + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + $head_start=$head_start+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + ?> + + +
#Invoice Total :'.$row->inv_med_code.''.$row->amount.''.$row->d_amt.''.$row->gst.''.$row->twdisc_amount.'

#Grand Total'.$row->amount.''.$row->d_amt.''.$row->gst.''.$row->twdisc_amount.'

Invoice ID : '.$row->inv_med_code.' [Dated : '.$row->str_inv_date.']
#Item NameBatch NoExp.RateQty.PriceDisc.HSNCODE/GSTGSTAmount
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->d_amt.''.$row->HSNCODE.'/'.$row->gst_per.''.$row->gst.''.$row->twdisc_amount.'
+
+
+ 0) { ?> +
+ + + + + + + + + + + +
#Deduction : discount_group?>CGST : CGST_Tamount?>SGST : SGST_Tamount?>Taxable Amount : TaxableAmount?>Net Amount : net_amount?>Amount received : payment_received?>Balance Amount : payment_balance?>
+
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+
+
+ +
+
+
+
+ For Krishna Pharmacy +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ + +
+ + + + diff --git a/old_code_ci3/views/Medical/Medical_invoice_print_all_provisional.php b/old_code_ci3/views/Medical/Medical_invoice_print_all_provisional.php new file mode 100644 index 0000000..507dc10 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_invoice_print_all_provisional.php @@ -0,0 +1,173 @@ + + + + + + <?=M_store?> | Provisional Invoice + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

+ +

+


+ +
GST: / L.No: OBR 1/NTL/AUG/2004 / BR 1/NTL/AUG/2004

+
+ +
+
+ +

Provisional CASH / Credit Memo

+
+
+
+ To +
+ p_fname ?>
+ Patient ID : p_code ?>
+ Refer By : doc_name ?>
+
+ +
+
+
+ IPD Code : ipd_code ?>
+ org_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +
+
+
+ +
+
+ + id=='' && $row->inv_med_id != '') + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $head_start=0; + } + elseif($row->id=='' && $row->inv_med_id == ''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + }else{ + + if($head_start==0) + { + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + $head_start=$head_start+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + ?> + + +
#Invoice Total :'.$row->inv_med_code.''.$row->amount.'

#Grand Total'.$row->amount.'

[Dated : '.$row->str_inv_date.']
#Item NameBatch NoExp.RateQty.Price
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.'
+
+
+ 0) { ?> +
+ + + + + + + + + +
#Gross Amount : gross_amount?>Deduction : discount_group?>Net Amount : net_amount?>Amount received : payment_received?>Balance Amount : payment_balance?>
+
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+
+
+ +
+
+
+
+ For Krishna Pharmacy +
+
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+
+ + +
+ + + + diff --git a/old_code_ci3/views/Medical/Medical_ipd_org_list.php b/old_code_ci3/views/Medical/Medical_ipd_org_list.php new file mode 100644 index 0000000..65d0f8a --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_ipd_org_list.php @@ -0,0 +1,65 @@ +
+
+
+

IPD List

+ + 0) + { + echo 'High Balance '; + } + ?> + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodeName/Patient CodeBed No.[Type]Register DateNo. of DaysDr. NameAdmit TypeAmount
+ + ipd_code ?> + + [p_code ?>] p_fname ?>
p_rname ?>
Bed_Desc ?>str_register_date ?>no_days ?>doc_name ?>admit_type ?>
Org_Status ?>
M:med_amount ?>
IPD CodeName/Patient CodeRegister DateAdmit TypeAmount
+ +
+ +
+
+ + diff --git a/old_code_ci3/views/Medical/Medical_org_invoicelist.php b/old_code_ci3/views/Medical/Medical_org_invoicelist.php new file mode 100644 index 0000000..2832d44 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_org_invoicelist.php @@ -0,0 +1,97 @@ +
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+
+

Name :p_fname?> {p_rname?>} + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + / Organisation Invoice #case_id_code?> + /Organisation :insurance_company_name?> +

+ + + +
+
+ +
+
+
+
+
+ + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + +
#Invoice ID.PatientInv.DateInv.DescCredit/CashAmountBalance
'.$srno.''.$row->inv_med_code.''.$row->inv_name.''.$row->inv_date.''.$row->remark_ipd.''.$row->credit.''.$row->net_amount.''.$row->payment_balance.' + + Print +
#
+
+
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Medical_org_list.php b/old_code_ci3/views/Medical/Medical_org_list.php new file mode 100644 index 0000000..22059a3 --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_org_list.php @@ -0,0 +1,49 @@ +
+
+
+

ORG List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ORG CodeName/Patient CodeRegister DateInsurance Company
+ + case_id_code ?> + + [p_code ?>] p_fname ?>
p_rname ?>
str_register_date ?>insurance_company_name ?>
ORG CodeName/Patient CodeRegister DateInsurance Company
+ +
+ +
+
+ + diff --git a/old_code_ci3/views/Medical/Medical_stock_drug.php b/old_code_ci3/views/Medical/Medical_stock_drug.php new file mode 100644 index 0000000..3c8afae --- /dev/null +++ b/old_code_ci3/views/Medical/Medical_stock_drug.php @@ -0,0 +1,116 @@ +
+
+
+

Drug Details

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SS No.Item CodeItem NameFormulationRack No.Shelf No.Batch No.QtyExpiryMRPSaled Qty
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Patient_Search_Result.php b/old_code_ci3/views/Medical/Patient_Search_Result.php new file mode 100644 index 0000000..e4617e2 --- /dev/null +++ b/old_code_ci3/views/Medical/Patient_Search_Result.php @@ -0,0 +1,48 @@ +

+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sr.No.Patient/UHID CodeName {Relative Name}AgeLast VisitPhone No.InsuranceAction
p_code ?>p_fname ?> {p_rname ?>}age ?>Last_Visit ?>mphone1 ?>insurance_id==0 ? 'Self': 'Insuranced'); ?> +
Patient CodeNamePhone NumberEMailAction
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Print/Medical_return_medicine.php b/old_code_ci3/views/Medical/Print/Medical_return_medicine.php new file mode 100644 index 0000000..59f8404 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/Medical_return_medicine.php @@ -0,0 +1,128 @@ + + + + + + + + +
+

+


+ +

+

+ p_fname ?>
+ Patient ID : p_code ?>
+ +

+
+

Return Medicine

+
+ + + + $row->str_ret_date) + { + if($date_str<>"") + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $dAmount=0; + + echo ' + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $tAmount=$tAmount+$row->amount; + $dAmount=$dAmount+$row->amount; + $date_str=$row->str_ret_date; + + if($total_rec==$srno) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + ?> +
#Day Total : '.$date_str.''.number_format(round($dAmount),2).'#


Return Date : '.$row->str_ret_date.'
Sr.No.Invoice DateInv.Code.Item NameRateOld Qty.Return Qty.AmountUpdate By
'.$srno.''.$row->str_inv_date.''.$row->inv_med_code.''.$row->item_Name.''.$row->price.''.$row->qty.''.$row->r_qty.''.$row->amount.''.$row->update_remark.'
#Day Total'.number_format(round($dAmount),2).'#


#Grand Total'.number_format(round($tAmount),2).'#
+ diff --git a/old_code_ci3/views/Medical/Print/Medicine_List.php b/old_code_ci3/views/Medical/Print/Medicine_List.php new file mode 100644 index 0000000..89c52d0 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/Medicine_List.php @@ -0,0 +1,84 @@ + + + + + + + + + + + +
Page : {PAGENO}/{nbpg}IPD-ID:ipd_code ?> / UHID:p_code ?> /Name : p_fname ?>
+
+ + + + + + + + +
+

Medicine Prescription

+

Rx

+ Patient Info.
+ p_fname ?>
+ UHID ID : p_code ?>
+ IPD Code : ipd_code ?>
+

+
+ + + str_inv_date<>$inv_date){ + if(($srno % 2)==0 && $srno<>1){ + echo ''; + } + $srno=1; + echo ' + + '; + echo ''; + } + + if(($srno % 2)==1) + { + echo ''; + } + + echo ''; + + if(($srno % 2)==0){ + echo ''; + } + + $inv_date=$row->str_inv_date; + } + + + + ?> +
..

Dated : '.$row->str_inv_date.'

'.$srno.' : ' + . $row->formulation . ' ' . $row->item_Name . '
(' . $row->genericname . ') /Qty :' + .$row->tot_qty.'
+

+ +

diff --git a/old_code_ci3/views/Medical/Print/Medicine_consolidated_List.php b/old_code_ci3/views/Medical/Print/Medicine_consolidated_List.php new file mode 100644 index 0000000..7970ccf --- /dev/null +++ b/old_code_ci3/views/Medical/Print/Medicine_consolidated_List.php @@ -0,0 +1,101 @@ + + + + + + + + + + + +
Page : {PAGENO}/{nbpg}IPD-ID:ipd_code ?> / UHID:p_code ?> /Name : p_fname ?>
+
+ +

Consolidated Summary of Medicine, Disposal & Sundries Used

+
+ + + + + + + + + +
+ Patient Info. + + Treating Consultant / Authorized Team Doctor +
+ p_fname ?>
UHID ID : p_code ?>
IPD Code : ipd_code ?> +
+ +
+ +
+

Medicine Name

+ + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + +
Sr.No.Medicine NameQty
' . $srno . '' . $row->formulation . ' ' . $row->item_Name . '
(' . $row->genericname . ')
', $row->i_qty_total, '
+
+

Disposal & Sundries

+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + +
Sr.No.Disposal & SundriesQty
' . $srno . '' . $row->formulation . ' ' . $row->item_Name . '', $row->i_qty_total, '
+ + diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_a5.php b/old_code_ci3/views/Medical/Print/medical_bill_print_a5.php new file mode 100644 index 0000000..c0fcbef --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_a5.php @@ -0,0 +1,220 @@ + + + + + + + + + + + +
+

+


+ +

+

+ Invoice To : + inv_name ?>
+ customer_type == 0) { ?> + Phone No. : inv_phone_number ?>
+ doc_name != '') { ?> + Refer By : doc_name ?>
+ + + customer_type == 1 && count($patient_master) > 0) { ?> + Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ + ipd_id > 0) { ?> + IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ case_id > 0 && $ipd_master[0]->case_id <> '') { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ + case_credit == 1 && $invoice_med_master[0]->case_id > 0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+
+
+ +
+ + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:inv_med_code ?> / Name : inv_name ?>
+
+ + + + + + + + +
+ GST: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo '
L.No: ' . M_LIC; + } + ?> +
+ Invoice ID : inv_med_code ?>
+ Date : str_inv_date ?> +
+ + Bill of Supply + + Invoice +
+ (composition taxable person, not eligible to collect tax on supplies) +
+ + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno = $srno + 1; + $head_start = $head_start + 1; + + if($row->sale_return==1){ + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + for($i=0;$i<$no_of_rec;$i++) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + if (count($invoice_med_master) > 0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> +
#Item NamePackBatch NoExp.Qty.RateGross Amt
Sale Return
' . $srno . '' . $row->item_Name . '' . $row->formulation . '' . $row->batch_no . '' . $row->expiry . '' . $row->qty . '' . $row->price . '' . number_format(round($row->amount),2) . '
.
#Total'.$invoice_med_master[0]->gross_amount.'
+ + 0) { ?> + + + + + + + payment_balance >= 0) { ?> + + + + + + + + + + payment_balance >= 0) { ?> + + + + +
#GrossDiscountNet AmountAmount receivedBalance Amount
#gross_amount),2) ?>discount_amount + $invoice_med_master[0]->item_discount_amount),2) ?>net_amount), 2) ?>payment_received ?>payment_balance ?>
+
+ + + + + + + + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount:Date]: + id . ':' . $row->Payment_type_str . ':' . $row->amount . ':' . $row->payment_date . ']/'; + } + ?> + +
+

+
+ For +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_a5_discount.php b/old_code_ci3/views/Medical/Print/medical_bill_print_a5_discount.php new file mode 100644 index 0000000..c966395 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_a5_discount.php @@ -0,0 +1,228 @@ + + + + + + + + + + + +
+

+


+ +

+

+ Invoice To : + inv_name ?>
+ customer_type == 0) { ?> + Phone No. : inv_phone_number ?>
+ doc_name != '') { ?> + Refer By : doc_name ?>
+ + + customer_type == 1 && count($patient_master) > 0) { ?> + Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ + ipd_id > 0) { ?> + IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ case_id > 0 && $ipd_master[0]->case_id <> '') { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ + case_credit == 1 && $invoice_med_master[0]->case_id > 0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+
+
+ +
+ + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:inv_med_code ?> / Name : inv_name ?>
+
+ + + + + + + + +
+ GST: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo '
L.No: ' . M_LIC; + } + ?> +
+ Invoice ID : inv_med_code ?>
+ Date : str_inv_date ?> +
+ + Bill of Supply + + Invoice +
+ (composition taxable person, not eligible to collect tax on supplies) +
+ + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno = $srno + 1; + $head_start = $head_start + 1; + + if($row->sale_return==1){ + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + for($i=0;$i<$no_of_rec;$i++) + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + if (count($invoice_med_master) > 0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> +
#Item NamePackBatch NoExp.Qty.RateGross AmtDisc.Net Amt
Sale Return
' . $srno . '' . $row->item_Name . '' . $row->formulation . '' . $row->batch_no . '' . $row->expiry . '' . $row->qty . '' . $row->price . '' . number_format(round($row->amount),2) . '' . number_format(round($row->d_amt),2) . '' . number_format(round($row->twdisc_amount),2) . '
.
#Total'.number_format(round($invoice_med_master[0]->gross_amount),2).''.number_format(round($invoice_med_master[0]->inv_disc_total),2).''.number_format(round($invoice_med_master[0]->net_amount),2).'
+ + 0) { ?> + + + + + + + payment_balance >= 0) { ?> + + + + + + + + + + payment_balance >= 0) { ?> + + + + +
#GrossDiscountNet AmountAmount receivedBalance Amount
#gross_amount),2) ?>discount_amount + $invoice_med_master[0]->item_discount_amount),2) ?>net_amount), 2) ?>payment_received ?>payment_balance ?>
+
+ + + + + + + + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount:Date]: + id . ':' . $row->Payment_type_str . ':' . $row->amount . ':' . $row->payment_date . ']/'; + } + ?> + +
+

+
+ For +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_a5_old.php b/old_code_ci3/views/Medical/Print/medical_bill_print_a5_old.php new file mode 100644 index 0000000..c0a0c7d --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_a5_old.php @@ -0,0 +1,209 @@ + + + + + + + + + + + +
+

+


+ +

+

+ Invoice To : + inv_name ?>
+ customer_type == 0) { ?> + Phone No. : inv_phone_number ?>
+ doc_name != '') { ?> + Refer By : doc_name ?>
+ + + customer_type == 1 && count($patient_master) > 0) { ?> + Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ + ipd_id > 0) { ?> + IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ case_id > 0 && $ipd_master[0]->case_id <> '') { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ + case_credit == 1 && $invoice_med_master[0]->case_id > 0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+
+
+ +
+ + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:inv_med_code ?> / Name : inv_name ?>
+
+ + + + + + + + +
+ GST Invoice +
+ GST: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo '
L.No: ' . M_LIC; + } + ?> +
+ Invoice ID : inv_med_code ?>
+ Date : str_inv_date ?> +
+ + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if (H_Med_GST != '') { + echo ''; + echo ''; + } + echo ''; + echo ''; + } + + $srno = $srno + 1; + $head_start = $head_start + 1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if (H_Med_GST != '') { + echo ''; + echo ''; + } + echo ''; + echo ''; + } + + if (count($invoice_med_master) > 0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if (H_Med_GST != '') { + echo ''; + echo ''; + } + echo ''; + echo ''; + } + ?> +
#Item NamePackBatch NoExp.RateQty.Gross AmtDisc.HSNCODE/GSTGSTAmt
' . $srno . '' . $row->item_Name . '' . $row->formulation . '' . $row->batch_no . '' . $row->expiry . '' . $row->price . '' . $row->qty . '' . $row->amount . ''.$row->d_amt.''.$row->HSNCODE.'/'.$row->gst_per.''.$row->gst.''.$row->twdisc_amount.'
#Total'.$invoice_med_master[0]->gross_amount.''.$invoice_med_master[0]->inv_disc_total.''.$invoice_med_master[0]->TGST.''.number_format(round($invoice_med_master[0]->net_amount),2).'
+ + 0) { ?> + + + + + + + payment_balance >= 0) { ?> + + + + + + + + + + payment_balance >= 0) { ?> + + + + +
#GrossDiscountNet AmountAmount receivedBalance Amount
#gross_amount ?>discount_amount + $invoice_med_master[0]->item_discount_amount) ?>net_amount), 2) ?>payment_received ?>payment_balance ?>
+
+ + + + + + + + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount:Date]: + id . ':' . $row->Payment_type_str . ':' . $row->amount . ':' . $row->payment_date . ']/'; + } + ?> + +
+

+
+ For +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_a6.php b/old_code_ci3/views/Medical/Print/medical_bill_print_a6.php new file mode 100644 index 0000000..aa83b74 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_a6.php @@ -0,0 +1,211 @@ + + + + + + + + + + + +

+


+ '; + + if(H_Med_GST!='') + { + echo 'GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo ' L.No: '.M_LIC; + } + ?> +

+

+ Invoice To : + inv_name?>
+ customer_type==0) { ?> + Phone No. : inv_phone_number?>
+ Refer By :
+ + customer_type==1 && count($patient_master)>0) { ?> + Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ Refer By :
+ + ipd_id>0) { ?> + IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ case_id>0 && $ipd_master[0]->case_id<>'') { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ + case_credit==1 && $invoice_med_master[0]->case_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+

+ + GST Invoice + + Invoice + +

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:inv_med_code ?> / Name : inv_name ?>
+
+ + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + $head_start=$head_start+1; + + if($row->sale_return==1){ + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if($row->sale_return==0){ + echo ''; + }else{ + echo ''; + } + + + echo ''; + } + + if(count($invoice_med_master)>0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> +
Invoice ID : '.$row->inv_med_code.' [ Dated : '.$row->str_inv_date.' ]
#Item NameBatch NoExp.RateQty.Gross AmtDisc.Net Amt
Sale Return
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->d_amt.''.$row->twdisc_amount.'(-'.$row->twdisc_amount.')
#Total '.$invoice_med_master[0]->gross_amount.' '.$invoice_med_master[0]->inv_disc_total.' '.round($invoice_med_master[0]->net_amount).'
+ +0) { ?> +
+ + + + + + + + + + payment_balance>=0 ){ ?> + + + + + + + + + + + + + payment_balance>=0 ){ ?> + + + + +
#CGSTSGSTTaxable AmountNet AmountAmount receivedBalance Amount
#CGST_Tamount?>SGST_Tamount?>TaxableAmount?>net_amount),2)?>payment_received?>payment_balance?>
+
+ + + + + + + + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount:Date]: + id.':'.$row->Payment_type_str.':'.$row->amount.':'.$row->payment_date.']/'; + } + ?> + +
+

+
+ For +
diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_format.php b/old_code_ci3/views/Medical/Print/medical_bill_print_format.php new file mode 100644 index 0000000..1ff9114 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_format.php @@ -0,0 +1,206 @@ + + + + + + + + +
+

+


+ '; + + if (H_Med_GST != '') { + echo 'GST No.: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo '
DL.No: ' . M_LIC; + } + ?> +

+

+ Invoice To : + p_fname ?>
p_relative ?> p_rname ?>
+ Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ org_id > 0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+

TAX Invoice

+
+ + + + + + +
Page : {PAGENO}/{nbpg}IPD-ID:ipd_code ?> / UHID:p_code ?> /Name : p_fname ?>
+
+ + id == '' && $row->inv_med_id != '') { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $head_start = 0; + } elseif ($row->id == '' && $row->inv_med_id == '') { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } else { + + if ($head_start == 0) { + echo ' + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno = $srno + 1; + $head_start = $head_start + 1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + ?> +
#Invoice Total :' . $row->inv_med_code . '' . $row->amount . '' . $row->d_amt . '' . $row->gst . '' . $row->twdisc_amount . '

#Grand Total' . $row->amount . '' . $row->d_amt . '' . $row->gst . '' . $row->twdisc_amount . '


Invoice ID : ' . $row->inv_med_code . ' [Dated : ' . $row->str_inv_date . ' ]
#Item NameBatch NoExp.RateQty.PriceDisc.HSNCODE/GSTGSTAmount
' . $srno . '' . $row->item_Name . ' ' . $row->formulation . '' . $row->batch_no . '' . $row->expiry . '' . $row->price . '' . $row->qty . '' . $row->amount . '' . $row->d_amt . '' . $row->HSNCODE . '/' . $row->gst_per . '' . $row->gst . '' . $row->twdisc_amount . '
+ + 0) { ?> +
+ + + + + + + + + payment_balance >= 0) { ?> + + + + + + + + + + + + payment_balance>=0 ){ + ?> + + + + +
#Deduction CGSTSGSTTaxable AmountNet AmountAmount receivedBalance Amount
#discount_group+$inv_med_group[0]->item_discount_amount ?>CGST_Tamount ?>SGST_Tamount ?>TaxableAmount ?>net_amount), 2) ?>payment_received ?>payment_balance ?>
+
+ +

+ + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id . ':' . $row->Payment_type_str . ':' . $row->amount . ']/'; + } + ?> + + + For +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_format_newpage.php b/old_code_ci3/views/Medical/Print/medical_bill_print_format_newpage.php new file mode 100644 index 0000000..5f8b7e9 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_format_newpage.php @@ -0,0 +1,150 @@ + + + + + + + + +
+

+


+ '; + + if(H_Med_GST!='') + { + echo 'GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo ' L.No: '.M_LIC; + } + ?> +

+ Invoice To : + p_fname ?>
+

+ Patient Info. as per KHRC Records
+ UHID ID : p_code ?>
+ IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ org_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+

CASH / Credit Memo

+
+ + + + + + +
IPD-ID:ipd_code ?> / UHID:p_code ?> /Name : p_fname ?>
+
+ + id=='' && $row->inv_med_id != '') + { + echo ''; + echo '#'; + echo 'Invoice Total :'.$row->inv_med_code.''; + echo ''.$row->amount.''; + echo ''.$row->d_amt.''; + echo ''; + echo ''.$row->gst.''; + echo ''.$row->twdisc_amount.''; + echo ''; + echo ''; + + echo '


'; + echo '

For '.M_store.'

'; + echo ''; + + $srno=0; + + $head_start=0; + } + elseif($row->id=='' && $row->inv_med_id == ''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo '

#Grand Total'.$row->amount.''.$row->d_amt.''.$row->gst.''.$row->twdisc_amount.'
'; + }else{ + + if($head_start==0) + { + echo '

Invoice No : '.$row->inv_med_code.' / Date : '.$row->str_inv_date.'

'; + echo ''; + //echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + $head_start=$head_start+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + } + ?> +

diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_format_single.php b/old_code_ci3/views/Medical/Print/medical_bill_print_format_single.php new file mode 100644 index 0000000..d557e39 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_format_single.php @@ -0,0 +1,208 @@ + + + +

Invoice ID : '.$row->inv_med_code.' [Dated : '.$row->str_inv_date.']

#Item NameBatch NoExp.RateQty.PriceDisc.HSNCODE/GSTGSTAmount
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->d_amt.''.$row->HSNCODE.'/'.$row->gst_per.''.$row->gst.''.$row->twdisc_amount.'
+ + + + +
+

+


+ GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo '
L.No: '.M_LIC; + } + ?> +

+

+ Invoice To : + inv_name?>
+ customer_type==0) { ?> + Phone No. : inv_phone_number?>
+ Refer By :
+ + customer_type==1 && count($patient_master)>0) { ?> + Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ + customer_type==1 && $invoice_med_master[0]->ipd_id==0 ) { ?> + Refer By :
+ + ipd_id>0) { ?> + IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ case_id>0 && $ipd_master[0]->case_id<>'') { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ + case_credit==1 && $invoice_med_master[0]->case_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+

+ + GST Invoice + + Invoice + +

+ + + + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:inv_med_code ?> / Name : inv_name ?>
+
+ + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if(H_Med_GST!=''){ + echo ''; + echo ''; + echo ''; + } + echo ''; + echo ''; + } + + $srno=$srno+1; + $head_start=$head_start+1; + + if($row->sale_return==1){ + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if(H_Med_GST!=''){ + echo ''; + echo ''; + echo ''; + } + echo ''; + echo ''; + } + + if(count($invoice_med_master)>0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if(H_Med_GST!=''){ + echo ''; + echo ''; + echo ''; + } + echo ''; + echo ''; + } + ?> +
Invoice ID : '.$row->inv_med_code.' [Dated : '.$row->str_inv_date.']
#Item NameBatch NoExp.RateQty.Gross AmtDisc.TaxableAmtHSNCODE/GSTGSTNet Amt
Sale Return
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->d_amt.''.$row->TaxableAmount.''.$row->HSNCODE.'/'.$row->gst_per.''.$row->gst.''.$row->twdisc_amount.'
#Total'.$invoice_med_master[0]->gross_amount.''.$invoice_med_master[0]->inv_disc_total.''.$invoice_med_master[0]->TaxableAmount.''.$invoice_med_master[0]->TGST.''.number_format(round($invoice_med_master[0]->net_amount),2).'
+ +0) { ?> +
+ + + + if(H_Med_GST!=''){ + + + + } + + payment_balance>=0 ){ ?> + + + + + + + if(H_Med_GST!=''){ + + + + } + + payment_balance>=0 ){ ?> + + + + +
#CGSTSGSTTaxable AmountNet AmountAmount receivedBalance Amount
#CGST_Tamount?>SGST_Tamount?>TaxableAmount?>net_amount),2)?>payment_received?>payment_balance?>
+
+ +

+ + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount:Date]: + id.':'.$row->Payment_type_str.':'.$row->amount.':'.$row->payment_date.']/'; + } + ?> + + + For +
diff --git a/old_code_ci3/views/Medical/Print/medical_bill_print_format_with_return.php b/old_code_ci3/views/Medical/Print/medical_bill_print_format_with_return.php new file mode 100644 index 0000000..7076657 --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_bill_print_format_with_return.php @@ -0,0 +1,280 @@ + + + + + + + + +
+

+


+ '; + + if(H_Med_GST!='') + { + echo 'GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo ' L.No: '.M_LIC; + } + ?> +

+

+ Invoice To : + p_fname ?>
+ Patient Info. as per Hospital Records
+ UHID ID : p_code ?>
+ IPD Code : ipd_code ?>
+ Refer By : doc_name ?>
+ org_id>0) { ?> + Org. Code : case_id_code ?>
+ Org. Name : insurance_company_name ?>
+ +

+
+

TAX Invoice

+
+ + + + + + +
Page : {PAGENO}/{nbpg}IPD-ID:ipd_code ?> / UHID:p_code ?> /Name : p_fname ?>
+
+ + + + + id=='' && $row->inv_med_id != '') + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $head_start=0; + } + elseif($row->id=='' && $row->inv_med_id == ''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + }else{ + + if($head_start==0) + { + echo ' + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $invoice_total=0; + } + + $srno=$srno+1; + $head_start=$head_start+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $Grand_sale_total+=$row->amount; + $invoice_total+=$row->amount; + + } + } + ?> +
#Invoice Total :'.$row->inv_med_code.''.$invoice_total.'

#Grand Sale Total'.$Grand_sale_total.'


Invoice ID : '.$row->inv_med_code.' [Dated : '.$row->str_inv_date.' ]
#Item NameBatch NoExp.RateQty.Amount
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.'
+ +

Return Items

+ + id=='' && $row->inv_med_id != '') + { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $head_start=0; + } + elseif($row->id=='' && $row->inv_med_id == ''){ + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + + }else{ + + if($head_start==0) + { + echo ' + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $invoice_total=0; + } + + $srno=$srno+1; + $head_start=$head_start+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $Grand_return_total+=$row->amount; + $invoice_total+=$row->amount; + + } + } + ?> +
#Invoice Total :'.$row->inv_med_code.''.$invoice_total.'

#Grand Return Total'.$Grand_return_total.'


Invoice ID : '.$row->inv_med_code.' [Dated : '.$row->str_inv_date.' ]
#Item NameBatch NoExp.RateQty.Amount
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.'
+ +0) { + $Gross_amt=$Grand_sale_total-$Grand_return_total; + + + ?> +
+ + + + + + + + + payment_balance>=0 ){ ?> + + + + + + + + + + + + payment_balance>=0 ){ ?> + + + + +
#Sale [A]Sale Return [B]Gross Amt. [G] =([A] - [B])Discount [D]Net Amount [N] =([G]-[D])Amount receivedBalance Amount
#discount_group?>net_amount),2)?>payment_received?>payment_balance?>
+
+ +

+ + + + +
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> + + + For +
diff --git a/old_code_ci3/views/Medical/Print/medical_cash_received_bill.php b/old_code_ci3/views/Medical/Print/medical_cash_received_bill.php new file mode 100644 index 0000000..c381d9b --- /dev/null +++ b/old_code_ci3/views/Medical/Print/medical_cash_received_bill.php @@ -0,0 +1,84 @@ + + + + + + + + +
+

+


+ '; + + if (H_Med_GST != '') { + echo 'GST: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo ' L.No: ' . M_LIC; + } + ?> +

+ amount . ':PT' . date('dmYhis'); + ?> + +
+

Payment Amount_str ?> Receipt No.:

+
+ + + + + + +
Page : {PAGENO}/{nbpg}IPD No.:ipd_code ?> / UHID:p_code ?> /Name : p_fname) ?>
+
+ + + + + +
Patient Info.
+ UHID : p_code ?>
+ Name : title ?> p_fname) ?>
+ p_relative ?> p_rname) ?>
+ Sex : xgender ?> age ?> P.No. :mphone1 ?> +
+ IPD No. : ipd_code ?>
+ Date : payment_date_str ?> +
+
+

+ Amount : Rs. amount ?>
+ Amount in Words : Rs.amount) ?> +

+

+ Prepared By :update_by ?>
+ +

+

+ Signature +

\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/company_Edit.php b/old_code_ci3/views/Medical/Purchase/company_Edit.php new file mode 100644 index 0000000..89cdbf2 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/company_Edit.php @@ -0,0 +1,76 @@ +
+
+

Supplier

+
+
+ 'form','class'=>'form1')); ?> + 0) + { + $cid=$med_company[0]->id; + $company_name=$med_company[0]->company_name; + $contact_person_name=$med_company[0]->contact_person_name; + $contact_phone_no=$med_company[0]->contact_phone_no; + } + + ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/company_list.php b/old_code_ci3/views/Medical/Purchase/company_list.php new file mode 100644 index 0000000..877d442 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/company_list.php @@ -0,0 +1,60 @@ +
+

+ Company +

+
+
+
+
+
+
+ +

Company List

+
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Company NamePerson/PhoneAction
company_name ?>contact_person_name ?>/contact_phone_no ?> + +
Company NamePerson/PhoneAction
+ +
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/company_list_sub.php b/old_code_ci3/views/Medical/Purchase/company_list_sub.php new file mode 100644 index 0000000..1deb7e1 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/company_list_sub.php @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
Company NamePerson/PhoneAction
company_name ?>contact_person_name ?>/contact_phone_no ?> + +
NameGSTAction
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/drug_master_list.php b/old_code_ci3/views/Medical/Purchase/drug_master_list.php new file mode 100644 index 0000000..f5c2c85 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/drug_master_list.php @@ -0,0 +1,30 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/indent_req_list.php b/old_code_ci3/views/Medical/Purchase/indent_req_list.php new file mode 100644 index 0000000..5fefe5e --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/indent_req_list.php @@ -0,0 +1,30 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/indent_req_list_search.php b/old_code_ci3/views/Medical/Purchase/indent_req_list_search.php new file mode 100644 index 0000000..e970c0a --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/indent_req_list_search.php @@ -0,0 +1,57 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Indent IDReq. TypeDateProduct ListStatus
indent_code ?>indent_request_type_str ?>created_date ?>product_list ?>request_status_str?> + request_status==0) { ?> + + request_status==1) { ?> + + request_status==4) { ?> + + + + +
Indent IDStoreDateStatus
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/indent_request_edit.php b/old_code_ci3/views/Medical/Purchase/indent_request_edit.php new file mode 100644 index 0000000..0f64ee9 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/indent_request_edit.php @@ -0,0 +1,203 @@ +
+
+
+
+
+

Indent Request Information

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> + Indent Current Status : request_status] ?> + request_status==0){ ?> + + request_status==1){ ?> + + + +
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/indent_request_item_list.php b/old_code_ci3/views/Medical/Purchase/indent_request_item_list.php new file mode 100644 index 0000000..4ee64b2 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/indent_request_item_list.php @@ -0,0 +1,43 @@ + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + +
#Product CodeItem NameFormulationGeneric NameQty.Min Qty
'.$srno.''.$row->item_name.''.$row->formulation.''.$row->genericname.''.$row->request_qty.''.$row->min_requirement.' + +
#Product CodeItem NameFormulationGeneric NameQty.Min Qty
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/indent_request_view.php b/old_code_ci3/views/Medical/Purchase/indent_request_view.php new file mode 100644 index 0000000..291e9b3 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/indent_request_view.php @@ -0,0 +1,60 @@ +
+
+
+
+
+

Indent Request Information

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> + Indent Current Status : request_status] ?> + request_status==0){ ?> + + request_status==1){ ?> + + + +
+
+ + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + +
#Item NameFormulationGeneric NameQty.Min Qty
'.$srno.''.$row->item_name.''.$row->formulation.''.$row->genericname.''.$row->request_qty.''.$row->min_requirement.'
#Item NameFormulationGeneric NameQty.Min Qty
+
+ +
+
+
diff --git a/old_code_ci3/views/Medical/Purchase/ledger_add_entry.php b/old_code_ci3/views/Medical/Purchase/ledger_add_entry.php new file mode 100644 index 0000000..8e3efe7 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/ledger_add_entry.php @@ -0,0 +1,85 @@ +
+
+
+
+

Add Entry

+
+ +
+
+ 'myform_add_entry'); + echo form_open('Medical_backpanel/add_entry/'.$s_id,$attributes); ?> + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/ledger_data.php b/old_code_ci3/views/Medical/Purchase/ledger_data.php new file mode 100644 index 0000000..3121dd4 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/ledger_data.php @@ -0,0 +1,61 @@ +
+
+
+
+

Statement Details + Opening Balance : / Total Cr. : / Total Dr. : + / Closing Balance : + +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IDDate TranDescriptionCreditDebitActions
tran_date); ?>mode_desc.' '.$c->tran_desc; ?>credit_debit==0?$c->amount:''); ?>credit_debit==1?$c->amount:''); ?> + +
IDDate TranDescriptionCreditDebitActions
+ +
+
+
+
diff --git a/old_code_ci3/views/Medical/Purchase/ledger_data_print.php b/old_code_ci3/views/Medical/Purchase/ledger_data_print.php new file mode 100644 index 0000000..8bc8d22 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/ledger_data_print.php @@ -0,0 +1,114 @@ + + + + + + + + +
+

+

, Uttarakhand
+ '; + + if (H_Med_GST != '') { + echo 'GST: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo ' L.No: ' . M_LIC; + } + ?> +

+

+ Statement of Supplier : + name_supplier ?>
+

+
+

Statement between

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Supplier:name_supplier ?>
+
+

Opening Balance : / Total Cr. : / Total Dr. : + / Closing Balance :

+ + + + + + + + + + + + + + + + + + + + + + credit_debit == 0 ? $c->amount : $c->amount * -1; + $balance += $amt; + ?> + + + + + + + + + + + + + + + + + + + + +
Sr.NoDate TranDescriptionCreditDebitBalance
Opening Balance : Last Date of Tran
tran_date); ?>mode_desc . ' ' . $c->tran_desc; ?>credit_debit == 0 ? $c->amount : ''); ?>credit_debit == 1 ? $c->amount : ''); ?>
#
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/ledger_edit_entry.php b/old_code_ci3/views/Medical/Purchase/ledger_edit_entry.php new file mode 100644 index 0000000..98bd68b --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/ledger_edit_entry.php @@ -0,0 +1,87 @@ +
+
+
+
+

Edit Entry

+
+ +
+
+ 'myform_add_entry'); + echo form_open('Medical_backpanel/edit_entry/'.$tran_id,$attributes); ?> + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/ledger_payment_data_print.php b/old_code_ci3/views/Medical/Purchase/ledger_payment_data_print.php new file mode 100644 index 0000000..74de1a8 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/ledger_payment_data_print.php @@ -0,0 +1,103 @@ + + + +

+

, Uttarakhand
+ '; + + if (H_Med_GST != '') { + echo 'GST: ' . H_Med_GST . ''; + } + + if (M_LIC != '') { + echo ' L.No: ' . M_LIC; + } + ?> +

Statement between

+
+ + Page : {PAGENO}/{nbpg} + +

Opening Balance : / Total Cr. : / Total Dr. : + / Closing Balance :

+ + + + + + + + + + + + + + + + + + + + + + credit_debit == 0 ? $c->amount : $c->amount * -1; + $balance += $amt; + ?> + + + + + + + + + + + + + + + + + + + + +
Sr.NoDate TranDescriptionCreditDebitBalance
Opening Balance
tran_date); ?>name_supplier.' / '.$c->mode_desc . ' ' . $c->tran_desc; ?>credit_debit == 0 ? $c->amount : ''); ?>credit_debit == 1 ? $c->amount : ''); ?>
#
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/ledger_payment_data_show.php b/old_code_ci3/views/Medical/Purchase/ledger_payment_data_show.php new file mode 100644 index 0000000..31d5837 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/ledger_payment_data_show.php @@ -0,0 +1,57 @@ +

Opening Balance : / Total Cr. : / Total Dr. : + / Closing Balance : + Print Statement

+ + + + + + + + + + + + + + + + + + + + + + credit_debit == 0 ? $c->amount : $c->amount * -1; + $balance += $amt; + ?> + + + + + + + + + + + + + + + + + + + + +
Sr.NoDate TranDescriptionCreditDebitBalance
Opening Balance
tran_date); ?>mode_desc . ' ' . $c->tran_desc; ?>credit_debit == 0 ? $c->amount : ''); ?>credit_debit == 1 ? $c->amount : ''); ?>
#
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/med_product_cat_list.php b/old_code_ci3/views/Medical/Purchase/med_product_cat_list.php new file mode 100644 index 0000000..10f6c4f --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/med_product_cat_list.php @@ -0,0 +1,57 @@ +
+

+ Medicine Category +

+
+
+
+
+
+
+ +

Medicine Category List

+
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Category NameAction
med_cat_desc ?> + +
Company NameAction
+ +
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/medicine_category_Sub.php b/old_code_ci3/views/Medical/Purchase/medicine_category_Sub.php new file mode 100644 index 0000000..51263e7 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/medicine_category_Sub.php @@ -0,0 +1,25 @@ +
+ + + + + + + + + + + + + + + + + + + + + +
Category NameAction
med_cat_desc ?> + +
Company NameAction
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/medicine_category_edit.php b/old_code_ci3/views/Medical/Purchase/medicine_category_edit.php new file mode 100644 index 0000000..a51f2e7 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/medicine_category_edit.php @@ -0,0 +1,59 @@ +
+
+

Supplier

+
+
+ 'form','class'=>'form1')); ?> + 0) + { + $cid=$med_product_cat_master[0]->id; + $med_cat_desc=$med_product_cat_master[0]->med_cat_desc; + } + + ?> + +
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/new_indent_request.php b/old_code_ci3/views/Medical/Purchase/new_indent_request.php new file mode 100644 index 0000000..e75aff1 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/new_indent_request.php @@ -0,0 +1,56 @@ +
+
+
+
+
+
+

New Purchase Invoice

+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+ +
+
+ +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/new_purchase_invoice.php b/old_code_ci3/views/Medical/Purchase/new_purchase_invoice.php new file mode 100644 index 0000000..6bf9567 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/new_purchase_invoice.php @@ -0,0 +1,78 @@ +
+
+
+
+
+
+

New Purchase Invoice

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/product_edit.php b/old_code_ci3/views/Medical/Purchase/product_edit.php new file mode 100644 index 0000000..5e0dc6b --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/product_edit.php @@ -0,0 +1,388 @@ +
+
+
+ 'form','class'=>'form1')); ?> +
+
+

Product

+ item_name?> +
+
+ + +
+
+
+
+ + ion_auth->in_group('MedicalStoreAdmin'))?'':'readonly'; ?>> +
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+ ban_flag_id; + if($chk_ban_flag_id==1) + { + $chk_ban_flag_id_checkbox_checked="checked"; + }else{ + $chk_ban_flag_id_checkbox_checked=""; + } + + $chk_is_continue=$product_data[0]->is_continue; + if($chk_is_continue==1) + { + $chk_is_continue_checkbox_checked="checked"; + }else{ + $chk_is_continue_checkbox_checked=""; + } + + $chk_batch_applicable=$product_data[0]->batch_applicable; + if($chk_batch_applicable==1) + { + $chk_batch_applicable_checkbox_checked="checked"; + }else{ + $chk_batch_applicable_checkbox_checked=""; + } + + $chk_exp_date_applicable=$product_data[0]->exp_date_applicable; + if($chk_exp_date_applicable==1) + { + $chk_exp_date_applicable="checked"; + }else{ + $chk_exp_date_applicable=""; + } + + $chk_schedule_h=$product_data[0]->schedule_h; + if($chk_schedule_h==1) + { + $chk_schedule_h_checkbox_checked="checked"; + }else{ + $chk_schedule_h_checkbox_checked=""; + } + + $chk_schedule_h1=$product_data[0]->schedule_h1; + if($chk_schedule_h1==1) + { + $chk_schedule_h1_checkbox_checked="checked"; + }else{ + $chk_schedule_h1_checkbox_checked=""; + } + + $chk_narcotic=$product_data[0]->narcotic; + if($chk_narcotic==1) + { + $chk_narcotic_checkbox_checked="checked"; + }else{ + $chk_narcotic_checkbox_checked=""; + } + + $chk_schedule_x=$product_data[0]->schedule_x; + if($chk_schedule_x==1) + { + $chk_schedule_x_checkbox_checked="checked"; + }else{ + $chk_schedule_x_checkbox_checked=""; + } + + + $chk_schedule_g=$product_data[0]->schedule_g; + if($chk_schedule_g==1) + { + $chk_schedule_g_checkbox_checked="checked"; + }else{ + $chk_schedule_g_checkbox_checked=""; + } + + $chk_high_risk=$product_data[0]->high_risk; + if($chk_high_risk==1) + { + $chk_high_risk_checkbox_checked="checked"; + }else{ + $chk_high_risk_checkbox_checked=""; + } + + ?> +
+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/product_new.php b/old_code_ci3/views/Medical/Purchase/product_new.php new file mode 100644 index 0000000..5f42aff --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/product_new.php @@ -0,0 +1,247 @@ +
+
+
+ 'form','class'=>'form1')); ?> +
+
+

Product

+ New Product +
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+ +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/product_search_result.php b/old_code_ci3/views/Medical/Purchase/product_search_result.php new file mode 100644 index 0000000..9612094 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/product_search_result.php @@ -0,0 +1,51 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Prod. IDNameFormulationGeneric NamePacking Type
id ?>item_name ?>formulation ?>genericname ?>packing ?> + + +
Prod. IDNameFormulationGeneric NamePacking Type
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_challan_list.php b/old_code_ci3/views/Medical/Purchase/purchase_challan_list.php new file mode 100644 index 0000000..41b09dd --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_challan_list.php @@ -0,0 +1,37 @@ +
+
+ + $row->id) + { + echo ''; + echo ' '; + echo ''; + + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; + } + + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; + + $purchase_id=$row->id; + + } + ?> +
Challan No :'.$row->Invoice_no.' / Date : '.$row->str_date_of_invoice.' /Net Amount :'.$row->tamount.'
Item NameQty + FreeMRPAdd
'.$row->Item_name.''.$row->qty.' + '.$row->qty_free.''.$row->mrp.'Add
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_file_show.php b/old_code_ci3/views/Medical/Purchase/purchase_file_show.php new file mode 100644 index 0000000..317cfd5 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_file_show.php @@ -0,0 +1,70 @@ +
+
+ +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_invoice_edit.php b/old_code_ci3/views/Medical/Purchase/purchase_invoice_edit.php new file mode 100644 index 0000000..056dbec --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_invoice_edit.php @@ -0,0 +1,533 @@ +
+
+
+
+
+

Purchase Invoice Information

+ Supplier: | name_supplier ?> + ischallan == 1) { ?> + | Challan No.: Invoice_no ?> + + Invoice No.: Invoice_no ?> + + Invoice Date : str_date_of_invoice ?> + + + +
+
+ 'form', 'class' => 'form2')); ?> +
+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_invoice_item.php b/old_code_ci3/views/Medical/Purchase/purchase_invoice_item.php new file mode 100644 index 0000000..11f4f55 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_invoice_item.php @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + item_return==1) + { + $style='style="color:Red;"'; + }else{ + $style=''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + + + +
#RecNoItem NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
'.$srno.''.$row->id.''.$row->Item_name.''.$row->batch_no.''.$row->exp_date_str.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->amount.''.$row->discount.''.$row->taxable_amount.''.$row->CGST_per.''.$row->SGST_per.''.$row->net_amount.''; + if($purchase_invoice[0]->inv_status==0) + { + echo ' + '; + if($row->old_purchase_id>0) + { + echo ''; + } + } + echo '
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_invoice_master_edit.php b/old_code_ci3/views/Medical/Purchase/purchase_invoice_master_edit.php new file mode 100644 index 0000000..bcc3768 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_invoice_master_edit.php @@ -0,0 +1,286 @@ +
+
+
+
+
+
+ 'form', 'class' => 'form1')); ?> + + inv_status == 0) { ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+ + + + + +
+
+ +
+
+ +
name_supplier ?>
+
+
+
+
+ +
Invoice_no ?>
+
+
+
+ +
date_of_invoice) ?>
+
+ + +
+
+ + + + + + + + + + + + + + + + + item_return == 1) { + $style = 'style="color:Red;"'; + } else { + $style = ''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
' . $srno . '' . $row->Item_name . '' . $row->batch_no . '' . $row->expiry_date . '' . $row->mrp . '' . floatval($row->qty) . '+' . floatval($row->qty_free) . '' . $row->purchase_price . '' . $row->amount . '' . $row->discount . '' . $row->taxable_amount . '' . $row->CGST_per . '' . $row->SGST_per . '' . $row->net_amount . '
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_invoice_scan.php b/old_code_ci3/views/Medical/Purchase/purchase_invoice_scan.php new file mode 100644 index 0000000..b855675 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_invoice_scan.php @@ -0,0 +1,112 @@ +
+
+

Inv ID :id?> + / Inv Code :Invoice_no?> + +

+
+
+
+
+
+ + +
+
+
+
+
+
+
+

Loading state

+
+
+
+ + +
+ + +
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_item_old.php b/old_code_ci3/views/Medical/Purchase/purchase_item_old.php new file mode 100644 index 0000000..b95162a --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_item_old.php @@ -0,0 +1,37 @@ +0){ + $item_name=$purchase_item_old[0]->Item_name; + } +?> +

Item : Last 5 Purchase Orders

+ + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + +
DateMRPQtyRateSCH/DiscP.U.RateSupplier/Invoice
'.$row->date_of_invoice_str.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->sch_disc_per.' / '.$row->discount.''.$row->purchase_unit_rate.''.$row->name_supplier.'/'.$row->Invoice_no.'
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/purchase_supp_list.php b/old_code_ci3/views/Medical/Purchase/purchase_supp_list.php new file mode 100644 index 0000000..35130ec --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/purchase_supp_list.php @@ -0,0 +1,74 @@ +
+
+
+
+ + + + + + + + + + + + ischallan==0){ + echo ''; + }else{ + echo ''; + } + ?> + + + + + + + + + + + + + + + + + + + + +
Invoice IDSupplierDateAmount
Invoice_no ?>name_supplier ?>date_of_invoice ?>tamount ?> + + Print + tamount==0){ ?> + + + +
Invoice IDSupplierDateAmount
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/scan_purchase_list.php b/old_code_ci3/views/Medical/Purchase/scan_purchase_list.php new file mode 100644 index 0000000..1c71cb9 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/scan_purchase_list.php @@ -0,0 +1,31 @@ + +
'; + $pos=strpos($purchase_invoice_scan_file[$i]->full_path,'/medical_uploads/purchase_invoice',1) ; + $file_path=substr($purchase_invoice_scan_file[$i]->full_path,$pos); + + + + //echo $file_path; + //$pos=strpos($file_path,'/uploads/',1) ; + //$file_path=str_replace('Hospital_DR_B_C_JOSHI/uploads','uploads',$purchase_invoice_scan_file[$i]->full_path); + + if($purchase_invoice_scan_file[$i]->file_ext=='.pdf') + { + echo ''; + }else + { + echo ''; + echo ' '; + echo '
+

'.$purchase_invoice_scan_file[$i]->file_name.'/'.$purchase_invoice_scan_file[$i]->insert_time.' +

+
'; + echo '
+
'; + + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_Edit.php b/old_code_ci3/views/Medical/Purchase/supplier_Edit.php new file mode 100644 index 0000000..0bf2290 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_Edit.php @@ -0,0 +1,139 @@ + + +
+
+

Supplier

+
+
+ 'form','class'=>'form1')); ?> + 0) + { + $sid=$supplier_data[0]->sid; + $name_supplier=$supplier_data[0]->name_supplier; + $short_name=$supplier_data[0]->short_name; + $contact_no=$supplier_data[0]->contact_no; + $gst_no=$supplier_data[0]->gst_no; + $city=$supplier_data[0]->city; + $state=$supplier_data[0]->state; + $active=$supplier_data[0]->active; + } + + ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_account.php b/old_code_ci3/views/Medical/Purchase/supplier_account.php new file mode 100644 index 0000000..86cc95a --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_account.php @@ -0,0 +1,61 @@ +
+

+ Supplier +

+
+
+
+
+
+
+

Supplier List

+
+ Ledger +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameBalanceLast Inv. DateLast Payment Date
name_supplier ?>Tot_Balance ?>Last_InvDate ?>Last_Payment ?> + +
NameBalanceLast Inv. DateLast Payment Date
+ +
+ +
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_account_detail.php b/old_code_ci3/views/Medical/Purchase/supplier_account_detail.php new file mode 100644 index 0000000..6363639 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_account_detail.php @@ -0,0 +1,91 @@ +
+
+
+
+

Ledger Account : name_supplier?> + Balance : Tot_Balance?>

+ +
+
+ 'form_search'); + echo form_open('/Medical_backpanel/search_result_tran/'.$supplier_data[0]->sid,$attributes); ?> +
+
+ +
+   + +
+ +
+
+ +
+ +
+
+ +
+ +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_account_payment.php b/old_code_ci3/views/Medical/Purchase/supplier_account_payment.php new file mode 100644 index 0000000..3ed8baa --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_account_payment.php @@ -0,0 +1,89 @@ +
+
+
+
+

Supplier Payments +

+ +
+
+ 'form_search'); + echo form_open('/Medical_backpanel/payment_supplier_data',$attributes); ?> +
+
+ +
+   + +
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_list.php b/old_code_ci3/views/Medical/Purchase/supplier_list.php new file mode 100644 index 0000000..2928a8d --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_list.php @@ -0,0 +1,32 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_master.php b/old_code_ci3/views/Medical/Purchase/supplier_master.php new file mode 100644 index 0000000..0816194 --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_master.php @@ -0,0 +1,60 @@ +
+

+ Supplier +

+
+
+
+
+
+
+ +

Supplier List

+
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?>gst_no ?> + +
NameGSTAction
+ +
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase/supplier_master_sub.php b/old_code_ci3/views/Medical/Purchase/supplier_master_sub.php new file mode 100644 index 0000000..a5551df --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase/supplier_master_sub.php @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?>name_supplier ?> + +
NameGSTAction
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Purchase_Invoice_Edit.php b/old_code_ci3/views/Medical/Purchase_Invoice_Edit.php new file mode 100644 index 0000000..5928ebd --- /dev/null +++ b/old_code_ci3/views/Medical/Purchase_Invoice_Edit.php @@ -0,0 +1,386 @@ +
+
+
+
+
+

Purchase Invoice Information

+ Supplier: | name_supplier ?> + |Invoice No.: Invoice_no ?> | + Invoice Date : str_date_of_invoice ?> + +
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/IPD_Discharge_Report.php b/old_code_ci3/views/Medical/Report/IPD_Discharge_Report.php new file mode 100644 index 0000000..35134dc --- /dev/null +++ b/old_code_ci3/views/Medical/Report/IPD_Discharge_Report.php @@ -0,0 +1,79 @@ +
+

+ IPD Discharge Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Payment_Recevie.php b/old_code_ci3/views/Medical/Report/Med_Payment_Recevie.php new file mode 100644 index 0000000..af60099 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Payment_Recevie.php @@ -0,0 +1,105 @@ +
+

+ Daily Payment Report +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_1.php b/old_code_ci3/views/Medical/Report/Med_Report_1.php new file mode 100644 index 0000000..5445f11 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_1.php @@ -0,0 +1,80 @@ +
+

+ Daily Sale Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_2.php b/old_code_ci3/views/Medical/Report/Med_Report_2.php new file mode 100644 index 0000000..3eae13d --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_2.php @@ -0,0 +1,77 @@ +
+

+ Day Cash Payment Report + Panel +

+
+
+
+
+ + +
+
+ + +
+
+ +
+ + + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_2_Pending.php b/old_code_ci3/views/Medical/Report/Med_Report_2_Pending.php new file mode 100644 index 0000000..c4bb772 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_2_Pending.php @@ -0,0 +1,86 @@ +
+

+ Day OPD / Cash Invoice Pending Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_2_Pending_paid.php b/old_code_ci3/views/Medical/Report/Med_Report_2_Pending_paid.php new file mode 100644 index 0000000..7573e2c --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_2_Pending_paid.php @@ -0,0 +1,51 @@ +
+

+ Old Invoice Payment Report + Panel +

+
+
+
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_3.php b/old_code_ci3/views/Medical/Report/Med_Report_3.php new file mode 100644 index 0000000..25763de --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_3.php @@ -0,0 +1,79 @@ +
+

+ Sale GST Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_4.php b/old_code_ci3/views/Medical/Report/Med_Report_4.php new file mode 100644 index 0000000..91fb7b4 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_4.php @@ -0,0 +1,80 @@ +
+

+ IPD Invoice + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_5.php b/old_code_ci3/views/Medical/Report/Med_Report_5.php new file mode 100644 index 0000000..651079c --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_5.php @@ -0,0 +1,101 @@ +
+

+ GST Invoice List + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+ +
+ + +
+
+ +
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_7.php b/old_code_ci3/views/Medical/Report/Med_Report_7.php new file mode 100644 index 0000000..bfc62a1 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_7.php @@ -0,0 +1,106 @@ +
+

+ GST Invoice List + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_Doc_med_sale.php b/old_code_ci3/views/Medical/Report/Med_Report_Doc_med_sale.php new file mode 100644 index 0000000..8b13562 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_Doc_med_sale.php @@ -0,0 +1,100 @@ +
+

+ Company Wise Medicine Sale / Purchase Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_IPD_Credit.php b/old_code_ci3/views/Medical/Report/Med_Report_IPD_Credit.php new file mode 100644 index 0000000..9e9e5ea --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_IPD_Credit.php @@ -0,0 +1,91 @@ +
+

+ IPD Invoice + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_company_med_sale.php b/old_code_ci3/views/Medical/Report/Med_Report_company_med_sale.php new file mode 100644 index 0000000..e5ef06d --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_company_med_sale.php @@ -0,0 +1,119 @@ +
+

+ Company Wise Medicine Sale / Purchase Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_daily_med_doc_sale.php b/old_code_ci3/views/Medical/Report/Med_Report_daily_med_doc_sale.php new file mode 100644 index 0000000..551c897 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_daily_med_doc_sale.php @@ -0,0 +1,110 @@ +
+

+ Daily Medicine Sale Report +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_Report_daily_med_sale.php b/old_code_ci3/views/Medical/Report/Med_Report_daily_med_sale.php new file mode 100644 index 0000000..d6b9cb6 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_Report_daily_med_sale.php @@ -0,0 +1,79 @@ +
+

+ Daily Medicine Sale Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Med_high_pending.php b/old_code_ci3/views/Medical/Report/Med_high_pending.php new file mode 100644 index 0000000..4c8fa82 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Med_high_pending.php @@ -0,0 +1,69 @@ +
+

+ IPD High Pending Balance Patient +

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Sr. + + IPD No. + + UHID No. + + Patient Name + + Phone No. + + Total Bill + + Paid Amount + + Balance +
+ + + ipd_code?> + + p_code?> + + p_fname?> + + mphone1?> + + net_amount?> + + payment_received?> + + payment_balance?> +
+
+
+
diff --git a/old_code_ci3/views/Medical/Report/Purchase_Invoice.php b/old_code_ci3/views/Medical/Report/Purchase_Invoice.php new file mode 100644 index 0000000..8aff4c0 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Purchase_Invoice.php @@ -0,0 +1,120 @@ +
+

+ Report Purchase Invoice + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Report_Med_patient.php b/old_code_ci3/views/Medical/Report/Report_Med_patient.php new file mode 100644 index 0000000..cecbbc0 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Report_Med_patient.php @@ -0,0 +1,127 @@ +
+

+ Report Drug Sale to Patient + Panel +

+
+
+'form','class'=>'form2')); ?> +
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Report_Med_patient_result.php b/old_code_ci3/views/Medical/Report/Report_Med_patient_result.php new file mode 100644 index 0000000..30ebf36 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Report_Med_patient_result.php @@ -0,0 +1,67 @@ +
+
+ + + + + + + + + + + + + + + + + + + + + +
Item NameSale Drug Report Customer Wise
+

item_Name ?>

+
+ p_list); + echo ' + + + + + + + + + '; + foreach ($data_array as $value) { + $value_array=explode(";",$value); + + if(count($value_array)<9) + { + echo ''; + echo ' '; + echo ''; + }else{ + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; + } + + } + echo '
Inv.No.Inv.DateIPD No.P Code/NameExp. DateBatchQty
Too many Records, Select min Date Range
'.$value_array[0].''.$value_array[1].''.$value_array[7].''.$value_array[4].' / '.$value_array[5].''.$value_array[2].''.$value_array[8].''.$value_array[9].'
'; + ?> +
Item NameStock Batch Invoice Status
+ +
+
diff --git a/old_code_ci3/views/Medical/Report/Report_gst_1.php b/old_code_ci3/views/Medical/Report/Report_gst_1.php new file mode 100644 index 0000000..03b7e43 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Report_gst_1.php @@ -0,0 +1,79 @@ +
+

+ Purchase GST Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Report/Report_org_invoice_list.php b/old_code_ci3/views/Medical/Report/Report_org_invoice_list.php new file mode 100644 index 0000000..c2ec7d6 --- /dev/null +++ b/old_code_ci3/views/Medical/Report/Report_org_invoice_list.php @@ -0,0 +1,96 @@ +
+

+ Org. Invoice + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Search_Patient.php b/old_code_ci3/views/Medical/Search_Patient.php new file mode 100644 index 0000000..8538815 --- /dev/null +++ b/old_code_ci3/views/Medical/Search_Patient.php @@ -0,0 +1,22 @@ +
+ 'form','class'=>'form2')); ?> +
+ + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/Lost_medicine.php b/old_code_ci3/views/Medical/Stock/Lost_medicine.php new file mode 100644 index 0000000..706d40a --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/Lost_medicine.php @@ -0,0 +1,80 @@ +
+

+ Medicine Lost Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/Short_medicine.php b/old_code_ci3/views/Medical/Stock/Short_medicine.php new file mode 100644 index 0000000..26fdf29 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/Short_medicine.php @@ -0,0 +1,106 @@ +
+

+ Medicine Short Report +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/Stock_search_qty_result.php b/old_code_ci3/views/Medical/Stock/Stock_search_qty_result.php new file mode 100644 index 0000000..3a3cbea --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/Stock_search_qty_result.php @@ -0,0 +1,96 @@ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NameSupplierSale Unit QtyCurrent Unit QtyRe-Order QtyAlert Qty
+

Item_name ?>

+
+

supplier_names ?>

+
+

sal_qty ?>

+
T_unit - $row->sal_qty; + echo $C_Qty; + ?> + + +

re_order_qty ?>

+
+ re_order_qty) + { + echo '

Qty Low

'; + } + + ?> + +
Item NameSupplierSale Unit QtyCurrent Unit QtyRe-Order QtyAlert Qty
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/Stock_search_result.php b/old_code_ci3/views/Medical/Stock/Stock_search_result.php new file mode 100644 index 0000000..24ace19 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/Stock_search_result.php @@ -0,0 +1,120 @@ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + +
Item NameStock Batch Invoice Status
+

Item_name ?>

+

Supplier :name_supplier ?>

+

Current Total Stock : Current_Stock ?>

+
+ Qty_BatchWise); + echo ' + + + + + + + + + + + + + + '; + foreach ($data_array as $value) { + $value_array=explode(";",$value); + + if($value_array[8]==1) + { + $style='style="color:Red;"'; + }else{ + $style=''; + } + + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; + echo ''; + } + echo '
Inv.No.Bat.No.Exp.Dt.MRP/Purchase Price/DateQtyT.Unit Qty.Cur.Unit Qty.Sale UnitReturn UnitLost UnitUpdate New Lost UnitsRemove Unit
'.$value_array[1].''.$value_array[2].''.$value_array[3].''.$value_array[4].'/'.$value_array[12].'/'.$value_array[13].''.$value_array[5].''.$value_array[11].'
'.$value_array[6].'
'.$value_array[7].''.$value_array[9].''.$value_array[10].'
+ + + + +
+
'; + ?> +
Item NameStock Batch Invoice Status
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/expiry_stock_list.php b/old_code_ci3/views/Medical/Stock/expiry_stock_list.php new file mode 100644 index 0000000..b2ab83d --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/expiry_stock_list.php @@ -0,0 +1,51 @@ +
+

Nearest Expiry / or Expired Medicine Stock

+
+
+ + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=0; + + echo ''; + foreach($purchase_list as $row) + { + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + + $inv_id=$row->pur_id; + } + echo ''; + ?> +
#ItemSupplierPur.DateBat.Exp.DtRateQtyC.Qty
'.$srno.''.$row->Item_name.''.$row->name_supplier.''.$row->str_date_of_invoice.''.$row->batch_no.''.$row->exp_date.''.$row->mrp.''.$row->tqty .''.$row->cur_qty.'
+
+ diff --git a/old_code_ci3/views/Medical/Stock/indent_accept_items_list.php b/old_code_ci3/views/Medical/Stock/indent_accept_items_list.php new file mode 100644 index 0000000..3ade01a --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_accept_items_list.php @@ -0,0 +1,86 @@ + +
+
+
+
+
+

Indent Request Information

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_counter_edit.php b/old_code_ci3/views/Medical/Stock/indent_counter_edit.php new file mode 100644 index 0000000..43a4ab4 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_counter_edit.php @@ -0,0 +1,213 @@ +
+
+
+
+
+

Indent : store_name ?>

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> + Indent Current Status : request_status] ?> + request_status==3) { ?> + + + request_status==0){ ?> + + request_status==4){ ?> + + + +
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_counter_item_list.php b/old_code_ci3/views/Medical/Stock/indent_counter_item_list.php new file mode 100644 index 0000000..ce4a324 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_counter_item_list.php @@ -0,0 +1,36 @@ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + +
#Item NameFormulationGeneric NameQty.
'.$srno.''.$row->item_name.''.$row->formulation.''.$row->genericname.''.$row->request_qty.' +
#Item NameFormulationGeneric NameQty.
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_counter_list.php b/old_code_ci3/views/Medical/Stock/indent_counter_list.php new file mode 100644 index 0000000..3487b50 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_counter_list.php @@ -0,0 +1,41 @@ +
+'form','class'=>'form2')); ?> +
+ + + + + + + +
+ + +
+ +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_counter_search_result.php b/old_code_ci3/views/Medical/Stock/indent_counter_search_result.php new file mode 100644 index 0000000..ae59701 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_counter_search_result.php @@ -0,0 +1,58 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Indent IDStore/TypeDateProduct ListStatus
indent_code ?>store_name.'/'.$indent_req_list[$i]->indent_request_type_str ?>created_date ?>product_list ?>request_status_str ?> + request_status==0 ) { ?> + + request_status==1 ) { ?> + + request_status==2){ ?> + + request_status==3){ ?> + + + +
Indent IDStoreDateStatus
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_issue.php b/old_code_ci3/views/Medical/Stock/indent_issue.php new file mode 100644 index 0000000..e69de29 diff --git a/old_code_ci3/views/Medical/Stock/indent_issue_item_view.php b/old_code_ci3/views/Medical/Stock/indent_issue_item_view.php new file mode 100644 index 0000000..9978455 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_issue_item_view.php @@ -0,0 +1,38 @@ + +
+
+
+
+
+

Indent Request Information

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> + Indent Current Status : request_status] ?> + request_status==3) { ?> + + + request_status==4){ ?> + + + +
+
+
+
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_issue_items.php b/old_code_ci3/views/Medical/Stock/indent_issue_items.php new file mode 100644 index 0000000..937dae0 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_issue_items.php @@ -0,0 +1,78 @@ + +
+
+
+
+
+

Indent Request Information

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> + Indent Current Status : request_status] ?> + request_status==2) { ?> + + request_status==3){ ?> + + + +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_req_view_with_store.php b/old_code_ci3/views/Medical/Stock/indent_req_view_with_store.php new file mode 100644 index 0000000..5e83dd4 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_req_view_with_store.php @@ -0,0 +1,65 @@ +
+
+
+
+
+

Indent Request Information

+ Indent No.: indent_code ?> | + Indent Date & Time : created_date ?> + Indent Current Status : request_status] ?> + +
+
+ + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + +
#Item NameFormulationGeneric NameQty.Min Qty
'.$srno.''.$row->item_name.''.$row->formulation.''.$row->genericname.''.$row->request_qty.''.$row->min_requirement.'
#Item NameFormulationGeneric NameQty.Min Qty
+
+ +
+
+
diff --git a/old_code_ci3/views/Medical/Stock/indent_request.php b/old_code_ci3/views/Medical/Stock/indent_request.php new file mode 100644 index 0000000..1f30b32 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_request.php @@ -0,0 +1,30 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_request_search_result.php b/old_code_ci3/views/Medical/Stock/indent_request_search_result.php new file mode 100644 index 0000000..ab8562c --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_request_search_result.php @@ -0,0 +1,56 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Indent IDStore/TypeDateProduct ListStatus
indent_code ?>store_name.'/'.$indent_req_list[$i]->indent_request_type_str ?>created_date ?>product_list ?>request_status_str ?> + request_status==1 ) { ?> + + request_status==2){ ?> + + request_status==3){ ?> + + + +
Indent IDStoreDateStatus
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/indent_stock_list.php b/old_code_ci3/views/Medical/Stock/indent_stock_list.php new file mode 100644 index 0000000..846f15c --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/indent_stock_list.php @@ -0,0 +1,61 @@ +'form','class'=>'form1')); ?> + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if($row->store_stock_id==0) + { + echo '' ; + } + + echo ''; + } + echo ''; + ?> + + + + + + + + + + +
#Item NameBatch No.Expiry DateQty.Issued Qty.Action
'.$srno.''.$row->Item_name.''.$row->batch_no.''.$row->expiry_date.''.$row->tqty.''.$row->issue_item.' + + + + + +
+ + + + +
'; + }else{ + echo '
#Item NameBatch No.Expiry DateQty.Issued Qty.Action
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/invoice_item_log.php b/old_code_ci3/views/Medical/Stock/invoice_item_log.php new file mode 100644 index 0000000..ba0da1e --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/invoice_item_log.php @@ -0,0 +1,80 @@ +
+

+ Medical Invoice Item Log + Panel +

+
+
+ 'form_payment_log','role'=>'form')); ?> +
+
+ +
+   + +
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/invoice_item_log_data.php b/old_code_ci3/views/Medical/Stock/invoice_item_log_data.php new file mode 100644 index 0000000..4f41b26 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/invoice_item_log_data.php @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
#Invoice CodeInvoice DateNameItem DeletedPayment LogUpdate Log
inv_med_code; ?>inv_date; ?>inv_name; ?> + del_item_list); + //print_r($item_removed_log); + if(count($item_removed_log)>0) { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + $item_amount_total = 0; + foreach($item_removed_log as $row_item) { + + $item = explode("#",$row_item); + + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + $item_amount_total += $item[3]; + } + echo ""; + echo "
Item NameQtyPriceAmountDelete By
".$item[0]."".$item[1]."".$item[2]."".$item[3]."".$item[5]."
Total Amount : ".$item_amount_total."
"; + } else { + echo "No Item Deleted"; + } + + ?> +
+ payment_log); + //print_r($item_removed_log); + if(count($payment_log_list)>0) { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + foreach($payment_log_list as $row_item) { + + $item = explode("#",$row_item); + + echo ""; + echo ""; + + echo ""; + + echo ""; + + echo ""; + } + + echo "
Payment TypeAmountPayment By
"; + if(isset($item[0])) { + if($item[0]==0) { + echo "Credit"; + }else if($item[0]==1) { + echo "Return"; + } + } + echo ""; + if(isset($item[1])) echo $item[1]; + echo ""; + if(isset($item[2])) echo $item[2]; + echo "
"; + } else { + echo "No Payment Log"; + } + ?> +
log; ?>
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/main_store_dashboard.php b/old_code_ci3/views/Medical/Stock/main_store_dashboard.php new file mode 100644 index 0000000..54b6371 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/main_store_dashboard.php @@ -0,0 +1,75 @@ +
+

+ Store Main + Panel +

+
+
+
+ +
+
+
+ Inventory +
+ +
+
+ +
diff --git a/old_code_ci3/views/Medical/Stock/merge_product.php b/old_code_ci3/views/Medical/Stock/merge_product.php new file mode 100644 index 0000000..d7eff00 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/merge_product.php @@ -0,0 +1,109 @@ +
+

+ Purchase Item Transfer + +

+
+
+
+
+ +
+
+
+
+
+ + + +
+
+
+ +
+
+
+
+
+ + + +
+
+
+ +
+
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/new_purchase_return_invoice.php b/old_code_ci3/views/Medical/Stock/new_purchase_return_invoice.php new file mode 100644 index 0000000..b776a49 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/new_purchase_return_invoice.php @@ -0,0 +1,63 @@ +
+
+
+
+
+
+

New Purchase Invoice

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_invoice_item_print.php b/old_code_ci3/views/Medical/Stock/purchase_invoice_item_print.php new file mode 100644 index 0000000..3cbd9b6 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_invoice_item_print.php @@ -0,0 +1,131 @@ + + + + + + + + + + + +

+

, Uttarakhand
+ '; + + if(H_Med_GST!='') + { + echo 'GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo ' L.No: '.M_LIC; + } + ?> +

+

+ Invoice From : + Supplier : name_supplier?>
+ Purchase Invoice No.: Invoice_no?>
+ Invoice Date : date_of_invoice)?>
+

+
+

Purchase Invoice

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:Invoice_no?> / Name : name_supplier?>
+
+ + + + + + + + + + + + + + + + + + item_return==1) + { + $style='style="color:Red;"'; + }else{ + $style=''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + ?> + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
'.$srno.''.$row->Item_name.''.$row->batch_no.''.$row->expiry_date.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->amount.''.$row->discount.''.$row->taxable_amount.''.$row->CGST_per.''.$row->SGST_per.''.$row->net_amount.'
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_invoice_list.php b/old_code_ci3/views/Medical/Stock/purchase_invoice_list.php new file mode 100644 index 0000000..8482dcf --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_invoice_list.php @@ -0,0 +1,68 @@ + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=0; + + echo ''; + foreach($purchase_list as $row) + { + + $srno=$srno+1; + if($row->isExp==1) + { + echo ''; + }else{ + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + if($row->item_return==0 && $row->remove_item==0){ + echo ''; + }else{ + echo ''; + } + echo ''; + + $inv_id=$row->pur_id; + } + echo ''; + ?> +
#Pur.DateItemBat./Exp.DtRatePur. Qty C.Unit QtyR.Unit Qty
'.$srno.''.$row->str_date_of_invoice.''.$row->Item_name.''.$row->batch_no.'
'.$row->exp_date.'
'.$row->mrp.''.$row->tqty .' /'.$row->packing .''.$row->cur_qty.' +
+ + + + +
'; + echo '
+ diff --git a/old_code_ci3/views/Medical/Stock/purchase_product_search.php b/old_code_ci3/views/Medical/Stock/purchase_product_search.php new file mode 100644 index 0000000..eca0352 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_product_search.php @@ -0,0 +1,120 @@ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+ + +

+ + + + + + + + +

+
+
+
+
+
+ + +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_return.php b/old_code_ci3/views/Medical/Stock/purchase_return.php new file mode 100644 index 0000000..6ba648b --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_return.php @@ -0,0 +1,29 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_return_invoice_edit.php b/old_code_ci3/views/Medical/Stock/purchase_return_invoice_edit.php new file mode 100644 index 0000000..fd14d9b --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_return_invoice_edit.php @@ -0,0 +1,161 @@ +
+

Purchase Return Invoice / Supplier : name_supplier ?>

+ |Invoice No.: Invoice_no ?> | + Invoice Date : str_date_of_invoice ?> + + Print + +
+
+'form','class'=>'form1')); ?> +
+
+
+ +
+
+
+
+
+
+

Item List

+
+ + +
+
+ + +
+ +
+ + + +
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_return_invoice_item.php b/old_code_ci3/views/Medical/Stock/purchase_return_invoice_item.php new file mode 100644 index 0000000..3b33071 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_return_invoice_item.php @@ -0,0 +1,50 @@ + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + +
#RecNoItem NameBatch NoExp.MRP / P. Rate/UnitQty.(Unit / Pack)Rate
'.$srno.''.$row->r_id.''.$row->Item_name.''.$row->batch_no_r_s.''.$row->exp_date_str.''.$row->mrp.' / '.$row->purchase_unit_rate.''.floatval($row->r_qty).' / '.floatval($row->qty_pak).''.$row->r_amount.''; + if(1==1) + { + echo ''; + } + echo '
#
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_return_invoice_item_print.php b/old_code_ci3/views/Medical/Stock/purchase_return_invoice_item_print.php new file mode 100644 index 0000000..550b6b2 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_return_invoice_item_print.php @@ -0,0 +1,114 @@ + + + + + + + + + + + +

+

, Uttarakhand
+ '; + + if(H_Med_GST!='') + { + echo 'GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo ' L.No: '.M_LIC; + } + ?> +

+

+ Invoice To : + Supplier : name_supplier?>
+ Purchase Return Invoice No.: Invoice_no?>
+ Invoice Date : str_date_of_invoice ?>
+

+
+

Purchase Return

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:Invoice_no ?> / Name : name_supplier ?>
+
+ + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $total_amt+=Round($row->r_qty*$row->purchase_unit_rate,2); + } + echo ''; + ?> + + + + + + + + + + + + + +
#RecNoItem NameBatch NoExp.MRP of PackReturn Unit Qty/ Pack.Rate UnitAmount
'.$srno.''.$row->r_id.''.$row->Item_name.''.$row->batch_no.' '.$row->exp_date_str.''.$row->mrp.''.floatval($row->r_qty).' / '.floatval($row->qty_pak).''.$row->purchase_price.' / '.$row->purchase_unit_rate.''.Round($row->r_qty*$row->purchase_unit_rate,2).'
#Total
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/purchase_supp_list.php b/old_code_ci3/views/Medical/Stock/purchase_supp_list.php new file mode 100644 index 0000000..a5d55d7 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/purchase_supp_list.php @@ -0,0 +1,61 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice IDSupplierDate
p_r_invoice_no ?>name_supplier ?>date_of_invoice ?> + + Print +
Invoice IDSupplierDate
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/stock_search.php b/old_code_ci3/views/Medical/Stock/stock_search.php new file mode 100644 index 0000000..de502b8 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/stock_search.php @@ -0,0 +1,58 @@ +
+'form','class'=>'form2')); ?> +
+ +
+
+
+ +
+
+
+
+ + + + + + + +
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock/stock_transfer.php b/old_code_ci3/views/Medical/Stock/stock_transfer.php new file mode 100644 index 0000000..54ca9eb --- /dev/null +++ b/old_code_ci3/views/Medical/Stock/stock_transfer.php @@ -0,0 +1,158 @@ +
+

+ Purchase Item Transfer + +

+
+
+
+
+ +
+
+
+
+
+ + + + + +
+
+
+ +
+
+
+
+
+ + + + + +
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Stock_Update.php b/old_code_ci3/views/Medical/Stock_Update.php new file mode 100644 index 0000000..f1bd0a9 --- /dev/null +++ b/old_code_ci3/views/Medical/Stock_Update.php @@ -0,0 +1,211 @@ +
+
+
+
+
+

Stock Information

+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store/Stock_Item_history.php b/old_code_ci3/views/Medical/Store/Stock_Item_history.php new file mode 100644 index 0000000..2b165ba --- /dev/null +++ b/old_code_ci3/views/Medical/Store/Stock_Item_history.php @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pur. IDSupplierInv.No / DateBat.No.Exp.Dt.MRPPurchaseQty / PackingUnit QtySale U.QtyReturn UnitCurr.U.QtyUpdate Lost UnitRemove
id?>name_supplier?>Invoice_no?>
date_of_invoice?>
batch_no?>expiry_date?>mrp?>purchase_price?>tqty?> / packing?>total_unit?>total_sale_unit?>total_return_unit?>cur_unit?> + + +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store/Stock_Item_history_removed.php b/old_code_ci3/views/Medical/Store/Stock_Item_history_removed.php new file mode 100644 index 0000000..0e3a61b --- /dev/null +++ b/old_code_ci3/views/Medical/Store/Stock_Item_history_removed.php @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pur. IDSupplierInv.No / DateBat.No.Exp.Dt.MRPPurchaseQtyUnit QtySale U.QtyLost UnitCurr.U.QtyUpdate Lost UnitRemove
id?>name_supplier?>Invoice_no?>
date_of_invoice?>
batch_no?>expiry_date?>mrp?>purchase_price?>tqty?>total_unit?>total_sale_unit?>total_lost_unit?>cur_unit?> + + + +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store/Stock_Item_history_return.php b/old_code_ci3/views/Medical/Store/Stock_Item_history_return.php new file mode 100644 index 0000000..8fec641 --- /dev/null +++ b/old_code_ci3/views/Medical/Store/Stock_Item_history_return.php @@ -0,0 +1,96 @@ +
+
+
+
+

Purchase Return

+
+
+ + + + + + + + + + + + qty; + ?> + + + + + + + + + + + + + + + +
Invoice NoSupplier NameDateItem NameUnit Qty
p_r_invoice_no; ?>name_supplier; ?>date_of_invoice; ?>Item_name; ?>qty; ?>
Total Return Qty
+
+
+
+
+
+
+

Purchase Invoice (Return Adjustment)

+
+
+ + + + + + + + + + + + + + qty; + $total_unit_invoice_qty += ($row->packing*$row->qty); + ?> + + + + + + + + + + + + + + + + + + + +
Invoice NoSupplier NameDateItem NameQtyPackingUnit Qty
Invoice_no; ?>name_supplier; ?>date_of_invoice; ?>Item_name; ?>qty; ?>packing; ?>packing*$row->qty; ?>
Total Invoice Qty
+
+
+
+
diff --git a/old_code_ci3/views/Medical/Store/Stock_search_result.php b/old_code_ci3/views/Medical/Store/Stock_search_result.php new file mode 100644 index 0000000..fe3539d --- /dev/null +++ b/old_code_ci3/views/Medical/Store/Stock_search_result.php @@ -0,0 +1,208 @@ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NameCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order QtyRemoved Qty
+

+ item_name ?> + genericname)>0){ + echo '
'.$row->genericname.''; + } + ?>

+
+

C_Pak_Qty?>

+
+

C_Unit_Stock_Qty,2) ?>

+
+

C_Pak_Sale_Qty,2) ?>

+
+

sale_unit,2) ?>

+
+

total_lost_unit,2) ?>

+
+

packing ?>/re_order_qty ?>

+
+ +
Item Name Current Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order QtyRemoved Qty
+ +
+
+
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store/stock_store_statement.php b/old_code_ci3/views/Medical/Store/stock_store_statement.php new file mode 100644 index 0000000..0c00f71 --- /dev/null +++ b/old_code_ci3/views/Medical/Store/stock_store_statement.php @@ -0,0 +1,147 @@ +
+'form','class'=>'form2')); ?> +
+
+ + +
+
+
+ +
+   + +
+ +
+
+ +
+ + + + + + + + + + +
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store/stock_store_statement_data.php b/old_code_ci3/views/Medical/Store/stock_store_statement_data.php new file mode 100644 index 0000000..ba7a32c --- /dev/null +++ b/old_code_ci3/views/Medical/Store/stock_store_statement_data.php @@ -0,0 +1,197 @@ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NamePur Pak.Pur CostCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order QtyRemoved Qty
+

+ item_name ?>

+
+

total_pak_qty,2) ?>

+
+

purchase_cost,2) ?>

+
+

C_Pak_Qty,2) ?>

+
+

C_Unit_Stock_Qty,2) ?>

+
+

C_Pak_Sale_Qty,2) ?>

+
+

sale_unit,2) ?>

+
+

total_lost_unit,2) ?>

+
+

packing ?>/re_order_qty ?>

+
+ +
Item NamePur Pak.Pur CostCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order QtyRemoved Qty
+ +
+
+
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store/stock_store_statement_data_excel.php b/old_code_ci3/views/Medical/Store/stock_store_statement_data_excel.php new file mode 100644 index 0000000..c43d837 --- /dev/null +++ b/old_code_ci3/views/Medical/Store/stock_store_statement_data_excel.php @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NamePur Pak.Pur CostCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyStock Cost
+

item_name ?>

+
+

total_pak_qty, 2) ?>

+
+

purchase_cost, 2) ?>

+
+

C_Pak_Qty, 2) ?>

+
+

C_Unit_Stock_Qty, 2) ?>

+
+

C_Pak_Sale_Qty, 2) ?>

+
+

sale_unit, 2) ?>

+
+

total_lost_unit, 2) ?>

+
+

packing ?>/re_order_qty ?>

diff --git a/old_code_ci3/views/Medical/Store/store_stock_search.php b/old_code_ci3/views/Medical/Store/store_stock_search.php new file mode 100644 index 0000000..4bffa71 --- /dev/null +++ b/old_code_ci3/views/Medical/Store/store_stock_search.php @@ -0,0 +1,143 @@ +
+'form','class'=>'form2')); ?> +
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + +
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Store_Dashboard.php b/old_code_ci3/views/Medical/Store_Dashboard.php new file mode 100644 index 0000000..42b94f4 --- /dev/null +++ b/old_code_ci3/views/Medical/Store_Dashboard.php @@ -0,0 +1,45 @@ + +
+

+ Medical Store : store_name?> + Dashboard +

+
+ +
+ +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Storestock/drug_master_list.php b/old_code_ci3/views/Medical/Storestock/drug_master_list.php new file mode 100644 index 0000000..718dff1 --- /dev/null +++ b/old_code_ci3/views/Medical/Storestock/drug_master_list.php @@ -0,0 +1,30 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Storestock/product_edit.php b/old_code_ci3/views/Medical/Storestock/product_edit.php new file mode 100644 index 0000000..d9008ea --- /dev/null +++ b/old_code_ci3/views/Medical/Storestock/product_edit.php @@ -0,0 +1,255 @@ +
+
+
+ 'form','class'=>'form1')); ?> +
+
+

Product

+ item_name?> +
+
+ + +
+
+
+
+ + ion_auth->in_group('MedicalStoreAdmin'))?'':'readonly'; ?>> +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+ ban_flag_id; + if($chk_ban_flag_id==1) + { + $chk_ban_flag_id_checkbox_checked="checked"; + }else{ + $chk_ban_flag_id_checkbox_checked=""; + } + + $chk_is_continue=$product_data[0]->is_continue; + if($chk_is_continue==1) + { + $chk_is_continue_checkbox_checked="checked"; + }else{ + $chk_is_continue_checkbox_checked=""; + } + + $chk_batch_applicable=$product_data[0]->batch_applicable; + if($chk_batch_applicable==1) + { + $chk_batch_applicable_checkbox_checked="checked"; + }else{ + $chk_batch_applicable_checkbox_checked=""; + } + + $chk_exp_date_applicable=$product_data[0]->exp_date_applicable; + if($chk_exp_date_applicable==1) + { + $chk_exp_date_applicable="checked"; + }else{ + $chk_exp_date_applicable=""; + } + + + + ?> +
+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Storestock/product_new.php b/old_code_ci3/views/Medical/Storestock/product_new.php new file mode 100644 index 0000000..d21a7a1 --- /dev/null +++ b/old_code_ci3/views/Medical/Storestock/product_new.php @@ -0,0 +1,167 @@ +
+
+
+ 'form','class'=>'form1')); ?> +
+
+

Product

+ New Product +
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Storestock/product_search_result.php b/old_code_ci3/views/Medical/Storestock/product_search_result.php new file mode 100644 index 0000000..4dfcc62 --- /dev/null +++ b/old_code_ci3/views/Medical/Storestock/product_search_result.php @@ -0,0 +1,51 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Prod. IDNameFormulationGeneric NamePacking Type
id ?>item_name ?>formulation ?>genericname ?>packing ?> + + +
Prod. IDNameFormulationGeneric NamePacking Type
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Supplier_Edit.php b/old_code_ci3/views/Medical/Supplier_Edit.php new file mode 100644 index 0000000..39592ea --- /dev/null +++ b/old_code_ci3/views/Medical/Supplier_Edit.php @@ -0,0 +1,111 @@ + + +
+
+

Supplier

+
+
+ 'form','class'=>'form1')); ?> + 0) + { + $sid=$supplier_data[0]->sid; + $name_supplier=$supplier_data[0]->name_supplier; + $short_name=$supplier_data[0]->short_name; + $contact_no=$supplier_data[0]->contact_no; + $gst_no=$supplier_data[0]->gst_no; + $city=$supplier_data[0]->city; + $state=$supplier_data[0]->state; + } + + ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Supplier_master.php b/old_code_ci3/views/Medical/Supplier_master.php new file mode 100644 index 0000000..db90a1f --- /dev/null +++ b/old_code_ci3/views/Medical/Supplier_master.php @@ -0,0 +1,60 @@ +
+

+ Supplier +

+
+
+
+
+
+
+ +

Supplier List

+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?>name_supplier ?> + + +
NameGSTAction
+ +
+ +
+
+
+ +
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/Supplier_master_sub.php b/old_code_ci3/views/Medical/Supplier_master_sub.php new file mode 100644 index 0000000..a5551df --- /dev/null +++ b/old_code_ci3/views/Medical/Supplier_master_sub.php @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?>name_supplier ?> + +
NameGSTAction
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/check_med_invoice.php b/old_code_ci3/views/Medical/check_med_invoice.php new file mode 100644 index 0000000..d17470e --- /dev/null +++ b/old_code_ci3/views/Medical/check_med_invoice.php @@ -0,0 +1,104 @@ +
+

+ Medical Invoice No. inv_med_code?> + + Edit + +

+
+
+'form','class'=>'form1')); ?> +
+
+
+
+ + + patient_id==0) { ?> + + + + + + + + + + +
Patient Name : Doctor Name : + + Other Doctor: + +
+ +
+

Name : + inv_name?> + / P Code :patient_code?> + / Invoice No. :inv_med_code?> + / Date : inv_date)?> + ipd_id > 0) { ?> + IPD Code : + + ipd_code?> + + Admit Date : str_register_date ?> reg_time ?> + / Doctor :doc_name?> + / TPA-Org. :admit_type?> + / Bill Type :ipd_credit)?'Credit To Hospital':'CASH/Direct'?> + case_id > 0){ ?> + / Org. Case ID : + case_id_code ?> + + + + + + + + + + +
Doctor Name : + + Other Doctor: + +
+ + + +

+
+ +
+
+
+
+
+
+ +
+
+
+
+ +
+
+ +
diff --git a/old_code_ci3/views/Medical/invoice_master_edit.php b/old_code_ci3/views/Medical/invoice_master_edit.php new file mode 100644 index 0000000..42ca3e6 --- /dev/null +++ b/old_code_ci3/views/Medical/invoice_master_edit.php @@ -0,0 +1,408 @@ +
+
+

+ Medical Invoice Master Edit : + + Back to Invoice + +

+
+
+'form','class'=>'form1')); ?> + +
+
+
+
+ + +

Name :inv_name?> + / P Code :patient_code?> + / Invoice No. :inv_med_code?> + / Date : inv_date)?> + ipd_id > 0) { ?> + IPD Code : + + ipd_code?> + + Admit Date : str_register_date ?> reg_time ?> + / Doctor :doc_name?> + / TPA-Org. : + case_id > 0){ ?> + / Org. Case ID :case_id_code ?> + +

+
+
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ ipd_id > 0) { ?> +
+ payment_received ==0) { ?> +
+
+ + +
+
+ +
+ +
credit_status ?>
+
+ +
+
+
+ + +
+
+ case_id > 0){ ?> +
+ payment_received ==0) { ?> +
+
+ + +
+
+ +
+ +
+
+
+
+
+
+

Change Name : Current Name : patient_code ?>

+
+
+
+
+
+
+ + +
+
+
+
+ + Patient Name
+
+
+
+
+ + +
+
+
+
+
+
+
+

Change UHID : Current UHID : patient_code ?>

+
+
+
+
+
+
+ + +
+
+
+
+ +
Patient Information
+
+
+
+
+ + + +
+
+
+
+
+
+
+

Change IPD : + ipd_credit>0){ ?> + Current IPD : ipd_code ?> + +

+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+
+
+
+

Change Org. Case : + case_credit>0){ ?> + Current Org. Case : case_id ?> + + +

+
+
+
+
+
+
+ + +
+
+
+
+ +
Patient Information
+
+
+
+
+ + + +
+
+
+
+ + +
+ + + +
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/mini_invoice.php b/old_code_ci3/views/Medical/mini_invoice.php new file mode 100644 index 0000000..c52be4f --- /dev/null +++ b/old_code_ci3/views/Medical/mini_invoice.php @@ -0,0 +1,62 @@ +
+

+ Already created on today + + Add New Invoice + +

+
+
+
+
+ + $row->inv_id) + { + $srno=0; + + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + $inv_id=$row->inv_id; + } + ?> +
#'.$row->inv_med_code.''.$row->inv_date.''.$row->net_amount.'Edit
#ItemBat./Exp.DtRateQtyN.Amt.
'.$srno.''.$row->item_Name.''.$row->batch_no.'
'.$row->exp_date.'
'.$row->price.''.$row->qty.''.$row->twdisc_amount.'
+ +
+
+
diff --git a/old_code_ci3/views/Medical/new_purchase_invoice.php b/old_code_ci3/views/Medical/new_purchase_invoice.php new file mode 100644 index 0000000..3e430d2 --- /dev/null +++ b/old_code_ci3/views/Medical/new_purchase_invoice.php @@ -0,0 +1,70 @@ +
+
+
+
+
+
+

New Purchase Invoice

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/payment_edit.php b/old_code_ci3/views/Medical/payment_edit.php new file mode 100644 index 0000000..36db8a5 --- /dev/null +++ b/old_code_ci3/views/Medical/payment_edit.php @@ -0,0 +1,208 @@ +
+
+
+
+

+ Payment ID : +

+
+
+

Invoice Type :

+
+
+

IPD/OPD No :

+
+
+

Invoice To :

+
+
+

Amount : Rs. Amount_str ?>

+
+
+

Mode of Payment. : payment_mode==1)?'CASH':'BANK');?>

+
+
+ +
+
+
+ payment_mode==1){ ?> +
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ +
+ +
+ +
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+ diff --git a/old_code_ci3/views/Medical/payment_log.php b/old_code_ci3/views/Medical/payment_log.php new file mode 100644 index 0000000..917abf1 --- /dev/null +++ b/old_code_ci3/views/Medical/payment_log.php @@ -0,0 +1,80 @@ +
+

+ Payment Log + Panel +

+
+
+ 'form_payment_log','role'=>'form')); ?> +
+
+ +
+   + +
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/payment_log_data.php b/old_code_ci3/views/Medical/payment_log_data.php new file mode 100644 index 0000000..86bc98f --- /dev/null +++ b/old_code_ci3/views/Medical/payment_log_data.php @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Bill NoInvoice CodeBill TypeInsert Date TimeLog InsertUpdate LogAmount / New AmountLog TypeUpdate By
id; ?>Inv_code; ?>Bill_type; ?>insert_time; ?>log_insert; ?>update_log; ?>amount; ?>LOG_type; ?>update_by; ?>
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/payment_search.php b/old_code_ci3/views/Medical/payment_search.php new file mode 100644 index 0000000..b7d4adb --- /dev/null +++ b/old_code_ci3/views/Medical/payment_search.php @@ -0,0 +1,25 @@ +
+'form','class'=>'form_payment_search')); ?> +
+ + + + +
+ +
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/print_bill_on_uhid.php b/old_code_ci3/views/Medical/print_bill_on_uhid.php new file mode 100644 index 0000000..1ee4388 --- /dev/null +++ b/old_code_ci3/views/Medical/print_bill_on_uhid.php @@ -0,0 +1,88 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+
+ + +
+ +
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/purchase_invoice_item.php b/old_code_ci3/views/Medical/purchase_invoice_item.php new file mode 100644 index 0000000..468b73f --- /dev/null +++ b/old_code_ci3/views/Medical/purchase_invoice_item.php @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
'.$srno.''.$row->Item_name.''.$row->batch_no.''.$row->expiry_date.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->amount.''.$row->discount.''.$row->taxable_amount.''.$row->CGST_per.''.$row->SGST_per.''.$row->net_amount.' + +
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
\ No newline at end of file diff --git a/old_code_ci3/views/Medical/purchase_supp_list.php b/old_code_ci3/views/Medical/purchase_supp_list.php new file mode 100644 index 0000000..ce4b75d --- /dev/null +++ b/old_code_ci3/views/Medical/purchase_supp_list.php @@ -0,0 +1,47 @@ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice IDSupplierDateAmount
Invoice_no ?>name_supplier ?>date_of_invoice ?>tamount ?> + +
Invoice IDSupplierDateAmount
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical/sale_item_list_for_add.php b/old_code_ci3/views/Medical/sale_item_list_for_add.php new file mode 100644 index 0000000..dc1a5c7 --- /dev/null +++ b/old_code_ci3/views/Medical/sale_item_list_for_add.php @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + +
Item NameBatch No.Qty in StockMRPQty
+
+ +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical/supplier_list.php b/old_code_ci3/views/Medical/supplier_list.php new file mode 100644 index 0000000..734a017 --- /dev/null +++ b/old_code_ci3/views/Medical/supplier_list.php @@ -0,0 +1,30 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical_app/dash_main.php b/old_code_ci3/views/Medical_app/dash_main.php new file mode 100644 index 0000000..7e261d6 --- /dev/null +++ b/old_code_ci3/views/Medical_app/dash_main.php @@ -0,0 +1,41 @@ +session->userdata(); +?> +
+

+ +

+
+ +
+
+ +
+ +
+
+ +
diff --git a/old_code_ci3/views/Medical_app/index.php b/old_code_ci3/views/Medical_app/index.php new file mode 100644 index 0000000..2d2c005 --- /dev/null +++ b/old_code_ci3/views/Medical_app/index.php @@ -0,0 +1,378 @@ +session->all_userdata(); + +if (isset($session_set_value['remember_me']) && $session_set_value['remember_me'] == "1") { + $session_data = $this->session->userdata('logged_in'); + $login_status=1; +}else{ + $login_status=0; +} +?> + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+load->view('Medical_app/dash_main'); + } else { ?> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/old_code_ci3/views/Medical_app/ipd_panel.php b/old_code_ci3/views/Medical_app/ipd_panel.php new file mode 100644 index 0000000..40db403 --- /dev/null +++ b/old_code_ci3/views/Medical_app/ipd_panel.php @@ -0,0 +1,77 @@ + +
+
+
+ Current IPD List + +
+
+ + + + + + + + + + + + + + + + + + + + + +
IPD No. InfoAdmit /Discharge Dt
+ ipd_code?>
+ p_fname?>
+ str_age?> / xgender?>
+ pay_type?>

+ discount_group_2>0){ ?> + + + +
+ Admit Dt :admit_dt?>
+ Discharge Dt :discharge_dt?>
+ Net Amount : net_amount?>
+ Paid Amt. : payment_received?>
+ Balance. : payment_balance?> +
IPD No. InfoAdmit /Discharge Dt
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical_app/ipd_panel_search.php b/old_code_ci3/views/Medical_app/ipd_panel_search.php new file mode 100644 index 0000000..69ffced --- /dev/null +++ b/old_code_ci3/views/Medical_app/ipd_panel_search.php @@ -0,0 +1,58 @@ + +
+
+
+ IPD List Search + +
+
+
+
+ 'myform'); + echo form_open('Medical_app/ipd_search_data', $attributes); ?> +
+ +
+ +
+
+ +
+
+
+
+

Results

+
+
+
+
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Medical_app/ipd_panel_sub.php b/old_code_ci3/views/Medical_app/ipd_panel_sub.php new file mode 100644 index 0000000..323137d --- /dev/null +++ b/old_code_ci3/views/Medical_app/ipd_panel_sub.php @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + +
IPD No. InfoAdmit /Discharge Dt
+ ipd_code?>
+ p_fname?>
+ str_age?> / xgender?>
+ pay_type?>

+ discount_group_2>0){ ?> + + + +
+ Admit Dt :admit_dt?>
+ Discharge Dt :discharge_dt?>
+ Net Amount : net_amount?>
+ Paid Amt. : payment_received?>
+ Balance. : payment_balance?> +
IPD No. InfoAdmit /Discharge Dt
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Medical_app/login.php b/old_code_ci3/views/Medical_app/login.php new file mode 100644 index 0000000..f14b1d4 --- /dev/null +++ b/old_code_ci3/views/Medical_app/login.php @@ -0,0 +1,76 @@ +"; + echo $logout_message; + echo ""; + } +?> + +"; + echo $message_display; + echo ""; + } + +?> + + 'myform'); + echo form_open('Medical_app/login/'.$user_id,$attributes); ?> +
+

Welcome

+

+ User : first_name); ?> last_name); ?> +

+

+ username; ?> +

+
+
+
+
+
+
+
+
+
+ + +
+
+
+ Remember Me +
+
+ +
+
+ "; + if (isset($error_message)) { + echo $error_message; + } + echo validation_errors(); + echo "
"; + ?> +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Medical_app/select_doctor.php b/old_code_ci3/views/Medical_app/select_doctor.php new file mode 100644 index 0000000..b15dc55 --- /dev/null +++ b/old_code_ci3/views/Medical_app/select_doctor.php @@ -0,0 +1,20 @@ + 'myform'); + echo form_open('Medical_app/login_pin',$attributes); ?> +
+

Select Your Self for Login

+ +
+ diff --git a/old_code_ci3/views/Mobile_app/dash_main.php b/old_code_ci3/views/Mobile_app/dash_main.php new file mode 100644 index 0000000..270135c --- /dev/null +++ b/old_code_ci3/views/Mobile_app/dash_main.php @@ -0,0 +1,76 @@ +session->userdata('logged_in'); +?> +
+

+ Dr. +

+

+ + All Patient +

+
+ +
+
+ +
+
+
+ +
+
+
+ +
+ diff --git a/old_code_ci3/views/Mobile_app/index.php b/old_code_ci3/views/Mobile_app/index.php new file mode 100644 index 0000000..759db16 --- /dev/null +++ b/old_code_ci3/views/Mobile_app/index.php @@ -0,0 +1,365 @@ +session->all_userdata(); + +if (isset($session_set_value['remember_me']) && $session_set_value['remember_me'] == "1") { + $session_data = $this->session->userdata('logged_in'); + $login_status=1; +}else{ + $login_status=0; +} +?> + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+load->view('Mobile_app/dash_main'); + } else { ?> + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/old_code_ci3/views/Mobile_app/ipd_panel.php b/old_code_ci3/views/Mobile_app/ipd_panel.php new file mode 100644 index 0000000..3f4673f --- /dev/null +++ b/old_code_ci3/views/Mobile_app/ipd_panel.php @@ -0,0 +1,41 @@ + + + +
+
+
+ + title.' '.$c->p_fname ; ?>
{p_relative?> p_rname?>} +
+
+
+

Age : str_age; ?>

+

p_code; ?>

+

+ + + mphone1; ?> + + +

+ + OPD View +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/login.php b/old_code_ci3/views/Mobile_app/login.php new file mode 100644 index 0000000..8e8c5b9 --- /dev/null +++ b/old_code_ci3/views/Mobile_app/login.php @@ -0,0 +1,76 @@ +"; + echo $logout_message; + echo ""; + } +?> + +"; + echo $message_display; + echo ""; + } + +?> + + 'myform'); + echo form_open('Mobile_app/login/'.$doc_id,$attributes); ?> +
+

Welcome

+

+ Dr. p_fname); ?> +

+

+ SpecName; ?> +

+
+
+
+
+
+
+
+
+
+ + +
+
+
+ Remember Me +
+
+ +
+
+ "; + if (isset($error_message)) { + echo $error_message; + } + echo validation_errors(); + echo "
"; + ?> +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/opd_scan.php b/old_code_ci3/views/Mobile_app/opd_scan.php new file mode 100644 index 0000000..9aaaae7 --- /dev/null +++ b/old_code_ci3/views/Mobile_app/opd_scan.php @@ -0,0 +1,98 @@ + + +
+
+
+ + title.' '.$c->p_fname ; ?>
{p_relative?> p_rname?>} +
+
+
+

str_age; ?>

+

p_code; ?>

+

+ + + mphone1; ?> + + + mphone1; ?> +

+ + View +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+ 'opd_form'); + echo form_open_multipart('/Opd/save_image_mobile/'.$opd_id,$attributes ); + ?> +
+ +
+ + +
+
+ +
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/opd_scan1.php b/old_code_ci3/views/Mobile_app/opd_scan1.php new file mode 100644 index 0000000..021242b --- /dev/null +++ b/old_code_ci3/views/Mobile_app/opd_scan1.php @@ -0,0 +1,160 @@ + + +
+
+
+ + title.' '.$c->p_fname ; ?>
{p_relative?> p_rname?>} +
+
+
+

str_age; ?>

+

p_code; ?>

+

+ + + mphone1; ?> + + + mphone1; ?> +

+ + View +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+ 'opd_form'); + echo form_open_multipart('/Opd/save_image_mobile/'.$opd_id,$attributes ); + ?> +
+ +
+ + + +
+
+ +
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/patient_opd_profile.php b/old_code_ci3/views/Mobile_app/patient_opd_profile.php new file mode 100644 index 0000000..8d9e60d --- /dev/null +++ b/old_code_ci3/views/Mobile_app/patient_opd_profile.php @@ -0,0 +1,138 @@ +0) +{ + $c=$data[0]; +?> + +
+
+
+ + title.' '.$c->p_fname ; ?>
{p_relative?> p_rname?>} +
+
+
+

str_age; ?>

+

p_code; ?>

+

+ + + mphone1; ?> + + + mphone1; ?> +

+ + View +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+
+
+
+
+ +
    + +
  • + + 10 Feb. 2014 + +
  • + + +
  • + + +
    + 12:05 + +

    Support Team sent you an email

    + +
    + Etsy doostang zoodles disqus groupon greplin oooj voxy zoodles, + weebly ning heekya handango imeem plugg dopplr jibjab, movity + jajah plickers sifteo edmodo ifttt zimbra. Babblely odeo kaboodle + quora plaxo ideeli hulu weebly balihoo... +
    + +
    +
  • + + +
  • + + +
    + 5 mins ago + +

    Sarah Young accepted your friend request +

    +
    +
  • + + +
  • + + +
    + 27 mins ago + +

    Jay White commented on your post

    + +
    + Take me to your leader! + Switzerland is small and neutral! + We are more like Germany, ambitious and misunderstood! +
    + +
    +
  • + + +
  • + + 3 Jan. 2014 + +
  • + + +
  • + + +
    + 2 days ago + +

    Mina Lee uploaded new photos

    + +
    + ... + ... + ... + ... +
    +
    +
  • + +
  • + +
  • +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/patient_page.php b/old_code_ci3/views/Mobile_app/patient_page.php new file mode 100644 index 0000000..e4d9fed --- /dev/null +++ b/old_code_ci3/views/Mobile_app/patient_page.php @@ -0,0 +1,70 @@ +
+
+ 'myform'); + echo form_open('Mobile_app/patient_search',$attributes); ?> + + +
+ +
+ +
+
+ +
+
+
+
+

Results

+
+
+
+
+ load->view($_view); + ?> +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/patient_search_v.php b/old_code_ci3/views/Mobile_app/patient_search_v.php new file mode 100644 index 0000000..c1273ee --- /dev/null +++ b/old_code_ci3/views/Mobile_app/patient_search_v.php @@ -0,0 +1,49 @@ + + +
+
+
+ + title.' '.$c->p_fname ; ?> + / Age:str_age; ?> +
{p_relative?> p_rname?>} +
+
+
+

p_code; ?>

+

+ + + mphone1; ?> + + +

+ + View + opd_today=='0'){?> +

Today Visit : opd_today; ?> +
Dr. doc_name; ?> +

+ + Scan + +
+
+

Last Visit last_date_visit; ?>

+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Mobile_app/person_file_show.php b/old_code_ci3/views/Mobile_app/person_file_show.php new file mode 100644 index 0000000..e6bfc25 --- /dev/null +++ b/old_code_ci3/views/Mobile_app/person_file_show.php @@ -0,0 +1,206 @@ + + 0) + { + $opd_current=$opd_master_current[0]->opd_id; + } + ?> +
+
+
+ + title.' '.$c->p_fname ; ?>
{p_relative?> p_rname?>} +
+
+
+

str_age; ?>

+

p_code; ?>

+

+ + + mphone1; ?> + + + mphone1; ?> +

+ + View + 0){?> + + Scan [Today] + +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+
+
+
+ opd_id"; + $query = $this->db->query($sql); + $opd_data= $query->result(); + + $sql="select * from file_upload_data where show_type=0 and opd_id=$row->opd_id order by id"; + $query = $this->db->query($sql); + $opd_file_list= $query->result(); + + $sql="select * from file_opd_rec where opd_id=$row->opd_id order by id"; + $query = $this->db->query($sql); + $file_opd_rec= $query->result(); + + if(count($opd_data)>0) + { + echo '
+
+
+
+
'; + echo '
+
'; + + echo 'OPD ID :'.$opd_data[0]->opd_code.' /Doctor Name :Dr. '.$opd_data[0]->doc_name; + echo '/OPD Date :'.$opd_data[0]->str_date_opd_visit.' /Queue No.:'.$opd_data[0]->queue_no.'
'; + + if($opd_data[0]->bp!='') + { + echo 'BP : '.$opd_data[0]->bp.' '; + } + + if($opd_data[0]->diastolic!='') + { + echo 'Diastolic : '.$opd_data[0]->diastolic.' '; + } + + if($opd_data[0]->pulse!='') + { + echo 'Pulse : '.$opd_data[0]->pulse.' '; + } + + if($opd_data[0]->temp!='') + { + echo 'Temp. : '.$opd_data[0]->temp.' '; + } + + echo ' + Scan ['.$opd_data[0]->str_date_opd_visit.'] '; + + echo '
+
'; + + + + } + + $i=0; + //Files Show + foreach($opd_file_list as $opd_file_row) + { + $i=$i+1; + echo '
+
'; + $pos=strpos($opd_file_row->full_path,'/uploads/',1) ; + $file_path=substr($opd_file_row->full_path,$pos); + + //$file_path=str_replace('hms_uploads','uploads',$opd_file_row->full_path); + + if($opd_file_row->file_ext=='.pdf') + { + echo ''; + }else + { + echo 'Photo'; + } + + echo '
+
'; + } + + //OPD Movies Show + foreach($file_opd_rec as $file_opd_rec_row) + { + echo '
+
'; + + $pos=strpos($file_opd_rec_row->full_path,'uploads/',1) ; + $file_path=substr($file_opd_rec_row->full_path,$pos); + + + //$file_path=str_replace('hms_uploads','uploads',$file_opd_rec_row->full_path); + + echo ' '; + + echo '
+
'; + } + + + } + ?> + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_edit_request.php b/old_code_ci3/views/PathLab_Report/lab_report_edit_request.php new file mode 100644 index 0000000..8c17563 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_edit_request.php @@ -0,0 +1,49 @@ +'form','class'=>'form_reason')); ?> + +
+
+ + +
+
+
+
+ + +
+
+
+ +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_file_show.php b/old_code_ci3/views/PathLab_Report/lab_report_file_show.php new file mode 100644 index 0000000..cf5ce36 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_file_show.php @@ -0,0 +1,59 @@ +
+
+ +
diff --git a/old_code_ci3/views/PathLab_Report/lab_report_item_edit.php b/old_code_ci3/views/PathLab_Report/lab_report_item_edit.php new file mode 100644 index 0000000..17f1ae3 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_item_edit.php @@ -0,0 +1,376 @@ +0) + { + $mstTestKey=$lab_test_parameter[0]->mstTestKey; + $Test=$lab_test_parameter[0]->Test; + $TestID=$lab_test_parameter[0]->TestID; + $Result=$lab_test_parameter[0]->Result; + $Formula=$lab_test_parameter[0]->Formula; + $VRule=$lab_test_parameter[0]->VRule; + $VMsg=$lab_test_parameter[0]->VMsg; + $Unit=$lab_test_parameter[0]->Unit; + $FixedNormals=$lab_test_parameter[0]->FixedNormals; + $isGenderSpecific=$lab_test_parameter[0]->isGenderSpecific; + $FixedNormalsWomen=$lab_test_parameter[0]->FixedNormalsWomen; + + if($isGenderSpecific==1) + { + $checkbox_checked="checked"; + } + + + } +?> + +
+
+

Test Parameter

+
+ +
+
+
+
+ + + + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
#CodeBoldAction
sort_id ?>option_value ?>option_bold_str ?> +
+ + id; + $sort_current=$lab_test_option[$i]->sort_id; + + if($i+1 < count($lab_test_option)) + { + $option_next=$lab_test_option[$i+1]->id; + $sort_next=$lab_test_option[$i+1]->sort_id; + + echo ''; + } + if($i>0) + { + $option_prev=$lab_test_option[$i-1]->id; + $sort_prev=$lab_test_option[$i-1]->sort_id; + + echo ''; + + } + ?> +
+
+
+
+
+
+ + +
+
+
+
+
+
+ +
+
+ +
+
+
+
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+ +
+ + diff --git a/old_code_ci3/views/PathLab_Report/lab_report_list.php b/old_code_ci3/views/PathLab_Report/lab_report_list.php new file mode 100644 index 0000000..eb4a31c --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_list.php @@ -0,0 +1,60 @@ +
+

+ Test Name +

+
+
+
+
+
+
+ +

Report List

+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Report TitleGroupAction
Title ?>RepoGrp ?> + + +
Report TitleGroupAction
+ +
+ +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_print.php b/old_code_ci3/views/PathLab_Report/lab_report_print.php new file mode 100644 index 0000000..1b92aa8 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_print.php @@ -0,0 +1,105 @@ +
+
+
+

IPD List

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No./DatePerson NameTest NameTest Type
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_show.php b/old_code_ci3/views/PathLab_Report/lab_report_show.php new file mode 100644 index 0000000..a112cc4 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_show.php @@ -0,0 +1,55 @@ +
+ diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_1.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_1.php new file mode 100644 index 0000000..e35791b --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_1.php @@ -0,0 +1,74 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No.Person NameDateTests Name
invoice_code ?>inv_name ?> / age ?>inv_date ?> + data_array); + echo ''; + foreach ($data_array as $value) { + echo ''; + $value_array=explode(";",$value); + + echo ''; + + echo ''; + } + echo '
'; + ?> +
Invoice No.Person NameDateTests Name
+
+ +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_1_1.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_1_1.php new file mode 100644 index 0000000..6b659a5 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_1_1.php @@ -0,0 +1,142 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No.CustomersCodeTest NameTest TypeBalance
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_2.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_2.php new file mode 100644 index 0000000..892086a --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_2.php @@ -0,0 +1,170 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No./DatePerson NameTest Name
invoice_code ?> +
+ inv_date ?> +
inv_name ?> + data_array); + echo ''; + foreach ($data_array as $value) { + echo ''; + $value_array=explode(";",$value); + echo ''; + echo ''; + + echo ' + '; + + echo ' + '; + + + echo ' + '; + echo ''; + } + echo '
'.$value_array[0].'
'; + ?> +
Invoice No./DatePerson NameTest Name
+ +
+ +
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_2_1.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_2_1.php new file mode 100644 index 0000000..a98388e --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_2_1.php @@ -0,0 +1,209 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
Invoice No.CustomersCodeAgeDateTest Name
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_3.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_3.php new file mode 100644 index 0000000..f748a26 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_3.php @@ -0,0 +1,126 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No./DatePerson NameTest Name
invoice_code ?> +
+ inv_date ?> +
inv_name ?> + data_array); + echo ''; + foreach ($data_array as $value) { + echo ''; + $value_array=explode(";",$value); + echo ''; + echo ''; + echo ' + '; + echo ''; + } + echo '
'.$value_array[0].'
'; + + ?> +
Invoice No./DatePerson NameTest Name
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_4.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_4.php new file mode 100644 index 0000000..a273549 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_4.php @@ -0,0 +1,129 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No./DatePerson NameTest NameTest Type
invoice_code ?> +
+ inv_date ?> +
inv_name ?>Test_List ?>item_type_desc ?> + + + + +
Invoice No./DatePerson NameTest NameCharge Type
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_4_1.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_4_1.php new file mode 100644 index 0000000..8227b7d --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_4_1.php @@ -0,0 +1,182 @@ +
+
+
+
+

Report List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Invoice No.CustomersCodeAgeTest NameTest TypeBalance
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_tab_4_2.php b/old_code_ci3/views/PathLab_Report/lab_report_tab_4_2.php new file mode 100644 index 0000000..8d72b64 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_tab_4_2.php @@ -0,0 +1,28 @@ +
+'form','class'=>'form2')); ?> + +
+ + + + +
+ +
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_report_test_list.php b/old_code_ci3/views/PathLab_Report/lab_report_test_list.php new file mode 100644 index 0000000..006830f --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_report_test_list.php @@ -0,0 +1,103 @@ + +
+
+

Test List

+
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Test NameTest CodeAction
Test ?>TestID ?> +
+ + + id; + $sort_current=$lab_Rep_Item_List[$i]->EOrder; + + if($i+1 < count($lab_Rep_Item_List)) + { + $option_next=$lab_Rep_Item_List[$i+1]->id; + $sort_next=$lab_Rep_Item_List[$i+1]->EOrder; + + echo ''; + } + if($i>0) + { + $option_prev=$lab_Rep_Item_List[$i-1]->id; + $sort_prev=$lab_Rep_Item_List[$i-1]->EOrder; + + echo ''; + + } + ?> +
+
#Test NameTest CodeAction
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_test_entry.php b/old_code_ci3/views/PathLab_Report/lab_test_entry.php new file mode 100644 index 0000000..1d76657 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_test_entry.php @@ -0,0 +1,131 @@ + + +
+
+

Patient Name :patient_name ?>

+ / invoice_code ?> +
+ +
+ 0) { ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test Name/Test IDSaved ValueNew ValueFixedNormals
Test ?>[TestID ?>] + Formula)<>''){ + echo '
'.trim($lab_request_item_entry[$i]->Formula); + echo ''; + } + ?> + +
lab_test_value ?>
+ option_value != null) + { + echo ""; + echo ''; + }else{ + if(trim($lab_request_item_entry[$i]->Formula)<>''){ + echo 'After Calculate'; + //echo ''; + }else{ + echo ''; + } + } + + ?> + + FixedNormals ?> + + +
Test Name/Test IDSaved ValueNew ValueFixedNormals
+
+ +
+
+ +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/lab_test_search.php b/old_code_ci3/views/PathLab_Report/lab_test_search.php new file mode 100644 index 0000000..ef65d29 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/lab_test_search.php @@ -0,0 +1,70 @@ + +
+
+

Test Parameter

+ + +
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+
+
+ + diff --git a/old_code_ci3/views/PathLab_Report/pathlab_request_list.php b/old_code_ci3/views/PathLab_Report/pathlab_request_list.php new file mode 100644 index 0000000..93d349a --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/pathlab_request_list.php @@ -0,0 +1,45 @@ +
+

+ Lab Panel +

+ +
+
+
+
+ +
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/ultrasound_report_edit.php b/old_code_ci3/views/PathLab_Report/ultrasound_report_edit.php new file mode 100644 index 0000000..33c82a8 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/ultrasound_report_edit.php @@ -0,0 +1,146 @@ + +
+
+

Radiology Report Edit

+
+ +
+
+ +
+
+
+
+ + 0) + { + $repo_id=$labReport_master[0]->id; + $repo_name=$labReport_master[0]->template_name; + $repo_title=$labReport_master[0]->title; + $HTMLData=$labReport_master[0]->Findings; + $Impression=$labReport_master[0]->Impression; + $impression_cat=$labReport_master[0]->impression_cat; + } + ?> + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + + +
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/PathLab_Report/ultrasound_template_list.php b/old_code_ci3/views/PathLab_Report/ultrasound_template_list.php new file mode 100644 index 0000000..93c8e21 --- /dev/null +++ b/old_code_ci3/views/PathLab_Report/ultrasound_template_list.php @@ -0,0 +1,59 @@ +
+

+ Ultra Sound Template +

+
+
+
+
+
+
+ +

Report List

+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Report TitleGroupAction
template_name ?>title ?> + +
Report TitleGroupAction
+ +
+ +
+
+
+ +
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Patient_Search_V.php b/old_code_ci3/views/Patient_Search_V.php new file mode 100644 index 0000000..92aef55 --- /dev/null +++ b/old_code_ci3/views/Patient_Search_V.php @@ -0,0 +1,45 @@ +

+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Sr.No.Patient/UHID CodeName {Relative Name}AgeLast VisitInsurance
p_code ?>p_fname ?> {p_rname ?>}age ?>Last_Visit ?>insurance_id==0 ? 'Self': 'Insuranced'); ?>
Sr.No.Patient/UHID CodeName {Relative Name}AgeLast VisitInsurance
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Patient_Search_opd.php b/old_code_ci3/views/Patient_Search_opd.php new file mode 100644 index 0000000..c050da8 --- /dev/null +++ b/old_code_ci3/views/Patient_Search_opd.php @@ -0,0 +1,51 @@ +

+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD No.Patient/UHID CodeName {Relative Name}AgeDoctorOPD DateInsurance
opd_code?>p_code ?>p_fname ?> {p_rname ?>}age ?>doc_name ?>opd_Visit ?>insurance_id==0 ? 'Self': $data[$i]->short_name); ?>
Sr.No.Patient/UHID CodeName {Relative Name}AgeDoctorOPD DateInsurance
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Patient_V.php b/old_code_ci3/views/Patient_V.php new file mode 100644 index 0000000..157bdb2 --- /dev/null +++ b/old_code_ci3/views/Patient_V.php @@ -0,0 +1,458 @@ +
+

+ Person + Registration +

+ +
+ +
+
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Person/OPD_file_upload.php b/old_code_ci3/views/Person/OPD_file_upload.php new file mode 100644 index 0000000..7f79d60 --- /dev/null +++ b/old_code_ci3/views/Person/OPD_file_upload.php @@ -0,0 +1,114 @@ +
+
+

Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + / OPD :opd_code?> +

+
+
+
+
+
+ + +
+
+
+
+
+
+
+

Loading state

+
+
+
+ + +
+ + +
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Person/Person_Profile.php b/old_code_ci3/views/Person/Person_Profile.php new file mode 100644 index 0000000..1d0d34a --- /dev/null +++ b/old_code_ci3/views/Person/Person_Profile.php @@ -0,0 +1,177 @@ +0) + { + $opd_current=$opd_master_current[0]->opd_id; + } + ?> +
+

+ p_fname); ?> + p_code; ?> +

+
+
+
+
+ +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + User profile picture +

title.' '.$c->p_fname ; ?>

+

p_relative?> p_rname?>

+ +
+ +
+ + +
+
+

About

+
+ +
+ Address +

+ p_address ?> +

+
+ +
+ +
+ +
+ + +
+ +
+ + + + +
+ diff --git a/old_code_ci3/views/Person/opd_file_show.php b/old_code_ci3/views/Person/opd_file_show.php new file mode 100644 index 0000000..12821f3 --- /dev/null +++ b/old_code_ci3/views/Person/opd_file_show.php @@ -0,0 +1,76 @@ +
+
+ +
diff --git a/old_code_ci3/views/Person/opd_scan_desktop.php b/old_code_ci3/views/Person/opd_scan_desktop.php new file mode 100644 index 0000000..e85064e --- /dev/null +++ b/old_code_ci3/views/Person/opd_scan_desktop.php @@ -0,0 +1,149 @@ +
+

+ OPD + Scan +

+
+
+
+
+
+
+ OPD Search +
+
+
+ 'form','class'=>'form2')); ?> +
+
+
+ + + + +
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Scan +
+
+
+
+
+
+
+ + +
+
+
Your captured image will appear here...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'form','class'=>'form1')); ?> +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Person/opd_scan_search.php b/old_code_ci3/views/Person/opd_scan_search.php new file mode 100644 index 0000000..bdbbbfb --- /dev/null +++ b/old_code_ci3/views/Person/opd_scan_search.php @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD CodeNameDoctor NamePhone NumberAction
opd_code ?>
[ App_Date ?> ]
p_fname ?>
{p_code ?>}
doc_name ?>mphone1 ?>
OPD CodeNameDoctor NamePhone NumberAction
+ + diff --git a/old_code_ci3/views/Person/opd_scanfile_upload.php b/old_code_ci3/views/Person/opd_scanfile_upload.php new file mode 100644 index 0000000..95192bd --- /dev/null +++ b/old_code_ci3/views/Person/opd_scanfile_upload.php @@ -0,0 +1,27 @@ +
+
+
+
Upload
+ + + +
+
+
+ diff --git a/old_code_ci3/views/Person/person_file_show.php b/old_code_ci3/views/Person/person_file_show.php new file mode 100644 index 0000000..173ab6a --- /dev/null +++ b/old_code_ci3/views/Person/person_file_show.php @@ -0,0 +1,181 @@ +
+

+ p_fname); ?> + p_code; ?> +

+
+ +
+ + + +
+
+
+ + title.' '.$c->p_fname ; ?>
{p_relative?> p_rname?>} +
+
+
+

str_age; ?>

+

p_code; ?>

+

+ + + mphone1; ?> + + + mphone1; ?> +

+ + View +
+
+ profile_picture,'/uploads/',1) ; + $profile_file_path=substr($c->profile_picture,$pos); + ?> + ' +
+
+
+
+ opd_id; + + if($opd_id!=$opd_id_new) + { + $sql="select p.*,o.opd_code,o.doc_name from opd_prescription p + join opd_master o on o.opd_id=p.opd_id + where p.opd_id=$opd_id_new"; + $query = $this->db->query($sql); + $opd_data= $query->result(); + + if(count($opd_data)>0) + { + echo '
+
+
+
+
'; + + echo '
+
'; + + echo 'OPD ID :'.$opd_data[0]->opd_code.' /Doctor Name :Dr. '.$opd_data[0]->doc_name; + echo '/OPD Date :'.$opd_data[0]->date_opd_visit.' /Queue No.:'.$opd_data[0]->queue_no.'
'; + + if($opd_data[0]->bp!='') + { + echo 'BP : '.$opd_data[0]->bp.' '; + } + + if($opd_data[0]->diastolic!='') + { + echo 'Diastolic : '.$opd_data[0]->diastolic.' '; + } + + if($opd_data[0]->pulse!='') + { + echo 'Pulse : '.$opd_data[0]->pulse.' '; + } + + if($opd_data[0]->temp!='') + { + echo 'Temp. : '.$opd_data[0]->temp.' '; + } + + echo '
+
'; + } + } + + $opd_id=$opd_id_new; + + echo '
+
'; + + $pos=strpos($opd_file_list[$i]->full_path,'/uploads/',1) ; + + $file_path=substr($opd_file_list[$i]->full_path,$pos); + + //$file_path=str_replace('hms_uploads','uploads',$opd_file_list[$i]->full_path); + + if($opd_file_list[$i]->file_ext=='.pdf') + { + echo ''; + }else + { + echo 'Photo'; + } + + echo '
+
'; + } + ?> +
+ +'; + + } +} +?> \ No newline at end of file diff --git a/old_code_ci3/views/Person_Edit_V.php b/old_code_ci3/views/Person_Edit_V.php new file mode 100644 index 0000000..b401a70 --- /dev/null +++ b/old_code_ci3/views/Person_Edit_V.php @@ -0,0 +1,349 @@ +
+

+ p_fname; ?> + p_code; ?> +

+ +
+p_edit==1 || $this->ion_auth->in_group('admin')){ + $readonly=""; +}else{ + $readonly="readonly"; +} +?> + +
+
+
+
+
+
+

Person Profile

+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + > +
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ estimate_dob; + if($chk_age==1) + { + $checkbox_checked="checked"; + $age_input_2='style="display: none;"'; + $age_input_1=''; + $DateofBirth=''; + }else{ + $checkbox_checked=""; + $age_input_1='style="display: none;"'; + $age_input_2=''; + $DateofBirth=MysqlDate_to_str($data[0]->dob); + } + ?> +
+
+ +
+
+
> +
+
+ + + + + + + + + +
Year : + Month :
+
+
+
+
> +
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Person_profile_V.php b/old_code_ci3/views/Person_profile_V.php new file mode 100644 index 0000000..37edce3 --- /dev/null +++ b/old_code_ci3/views/Person_profile_V.php @@ -0,0 +1,359 @@ +
+

+ p_fname); ?> + p_code; ?> +

+
+ +
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+
+

Person Profile

+
+ +
+
+ +
+
+

Full Name : p_fname) ?>

+
+
+

Gender : xgender?> + / Age : str_age?> +

+
+
+
+
+

Relation : p_relative?> + Relative Name : p_rname)?> +

+
+
+

Aadhar No. : udai?> +

+
+
+
+
+

Phone Number : mphone1?>

+
+
+

Email : email1?>

+
+
+

Blood Group : blood_group?>

+
+
+
+
+

Address : add1?> + city ?> + district ?> + state ?> + zip ?> +

+
+
+
+
+ +
+
+
+ + + + +
+
+
+
+
+
+
+

Insurance Details + Insurance Update +

+
+ + +
+ insurance_id>0) { ?> +
+
+

Company Name : ins_company_name?>

+

Card Holder Name : card_holder_name?>

+

Relation : relation_patient_cardholder?>

+

Insurance ID : insurance_no?>

+
+
+
+ 0){ ?> +

Case Code : case_id_code?>

+

Visit Date Start : str_date_registration?>

+

Clam or Case No.: insurance_no_1?>

+

Any Other IDs : insurance_no_2?>

+

+ +

+ + + 0){ ?> + +

Case Code : case_id_code?>

+

Org. Date Start : str_date_registration?>

+

Clam or Case No.: insurance_no_1?>

+

Any Other IDs : insurance_no_2?>

+

IPD No : ipd_code?>

+

IPD Admit Date : str_date_registration?>

+

+ +

+ + + +
+ + +
+
+
+
+ opd_allowed==1) { ?> +

+ +

+ + charge_cash==1) { ?> +

+ +

+ +
+ +
+
+
+
+ + + + +
+
+
+
+ 0) { ?> +
+
+
+
+

OPD Registration

+
+
+ '.$row->opd_code.''; + echo '

'; + echo 'Dr.'.$row->doc_name.' '; + echo ' D:'.$row->str_apointment_date.' '; + echo ' P:'.$row->p_fname.'
'; + + if($this->ion_auth->in_group('OPDEdit') || $row->new_opd==1){ + echo 'Edit OPD '; + echo 'Print Day Care '; + } + echo '

'; + echo '
'; + } + ?> +
+
+
+
+ + 0) { ?> +
+
+
+
+

Charges Invoice

+
+
+ '.$row->invoice_code.''; + echo ' D:'.$row->str_inv_date.' '; + echo ' N:'.$row->inv_name.' '; + echo '

'; + echo ''.$row->Item_List.'
'; + + if($row->invoice_status==0) + { + echo 'Edit Charges Invoice '; + echo 'Delete : Un-confirm Invoice '; + }else{ + echo 'Show Charges Invoice '; + } + echo '

'; + echo '
'; + } + ?> + +
+
+
+
+ +
+
+ + +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Person_profile_V_backup.php b/old_code_ci3/views/Person_profile_V_backup.php new file mode 100644 index 0000000..37edce3 --- /dev/null +++ b/old_code_ci3/views/Person_profile_V_backup.php @@ -0,0 +1,359 @@ +
+

+ p_fname); ?> + p_code; ?> +

+
+ +
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+
+

Person Profile

+
+ +
+
+ +
+
+

Full Name : p_fname) ?>

+
+
+

Gender : xgender?> + / Age : str_age?> +

+
+
+
+
+

Relation : p_relative?> + Relative Name : p_rname)?> +

+
+
+

Aadhar No. : udai?> +

+
+
+
+
+

Phone Number : mphone1?>

+
+
+

Email : email1?>

+
+
+

Blood Group : blood_group?>

+
+
+
+
+

Address : add1?> + city ?> + district ?> + state ?> + zip ?> +

+
+
+
+
+ +
+
+
+ + + + +
+
+
+
+
+
+
+

Insurance Details + Insurance Update +

+
+ + +
+ insurance_id>0) { ?> +
+
+

Company Name : ins_company_name?>

+

Card Holder Name : card_holder_name?>

+

Relation : relation_patient_cardholder?>

+

Insurance ID : insurance_no?>

+
+
+
+ 0){ ?> +

Case Code : case_id_code?>

+

Visit Date Start : str_date_registration?>

+

Clam or Case No.: insurance_no_1?>

+

Any Other IDs : insurance_no_2?>

+

+ +

+ + + 0){ ?> + +

Case Code : case_id_code?>

+

Org. Date Start : str_date_registration?>

+

Clam or Case No.: insurance_no_1?>

+

Any Other IDs : insurance_no_2?>

+

IPD No : ipd_code?>

+

IPD Admit Date : str_date_registration?>

+

+ +

+ + + +
+ + +
+
+
+
+ opd_allowed==1) { ?> +

+ +

+ + charge_cash==1) { ?> +

+ +

+ +
+ +
+
+
+
+ + + + +
+
+
+
+ 0) { ?> +
+
+
+
+

OPD Registration

+
+
+ '.$row->opd_code.''; + echo '

'; + echo 'Dr.'.$row->doc_name.' '; + echo ' D:'.$row->str_apointment_date.' '; + echo ' P:'.$row->p_fname.'
'; + + if($this->ion_auth->in_group('OPDEdit') || $row->new_opd==1){ + echo 'Edit OPD '; + echo 'Print Day Care '; + } + echo '

'; + echo '
'; + } + ?> +
+
+
+
+ + 0) { ?> +
+
+
+
+

Charges Invoice

+
+
+ '.$row->invoice_code.''; + echo ' D:'.$row->str_inv_date.' '; + echo ' N:'.$row->inv_name.' '; + echo '

'; + echo ''.$row->Item_List.'
'; + + if($row->invoice_status==0) + { + echo 'Edit Charges Invoice '; + echo 'Delete : Un-confirm Invoice '; + }else{ + echo 'Show Charges Invoice '; + } + echo '

'; + echo '
'; + } + ?> + +
+
+
+
+ +
+
+ + +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Person_profile_V_test.php b/old_code_ci3/views/Person_profile_V_test.php new file mode 100644 index 0000000..a4aa9b3 --- /dev/null +++ b/old_code_ci3/views/Person_profile_V_test.php @@ -0,0 +1,683 @@ + + */ + +// Data validation and sanitization helper +function safe_output($data, $default = '') { + return !empty($data) ? htmlspecialchars($data, ENT_QUOTES, 'UTF-8') : $default; +} +?> + +
+
+
+

+ p_fname ?? ''), 'Unknown Patient'); ?> + + + p_code ?? '', 'No Code'); ?> + + +

+ +
+
+
+ + +
+ + + + +
+ + 'form','class'=>'form1', 'id'=>'person-profile-form')); ?> + +
+ +
+ +
+
+
+
+

+ Person Profile +

+
+
+
+ + + +
+
+
+
+ +
+ + + +
+
+
+ +
+ Full Name + + p_fname ?? ''), 'Not provided'); ?> + +
+
+
+ +
+
+ +
+ Gender + + xgender ?? '', 'Not specified'); ?> + +
+
+
+ +
+
+ +
+ Age + + str_age ?? '', 'Unknown'); ?> + +
+
+
+
+ + +
+
+

+ Phone Number: + + mphone1 ?? '', 'Not provided'); ?> + +

+
+
+

+ Email: + + email1 ?? '', 'Not provided'); ?> + +

+
+
+ + +
+
+

+ Relation: + + p_relative ?? '', 'Not specified'); ?> + + p_rname)): ?> + | Relative Name: + + p_rname)); ?> + + +

+
+
+

+ Blood Group: + + blood_group ?? '', 'Not specified'); ?> + +

+
+
+ + +
+
+

+ Address: + + add1 ?? '', + $data[0]->city ?? '', + $data[0]->district ?? '', + $data[0]->state ?? '', + $data[0]->zip ?? '' + ]); + echo !empty($address_parts) ? safe_output(implode(', ', $address_parts)) : 'Not provided'; + ?> + +

+
+
+ + +
+
+
+ Patient Photo +
+
+
+
+ +
+ + + + +
+ 12-digit Aadhar number +
+
+
+
+
+ + +
+
+

+ Insurance Details + + + +

+
+ + + + +
+ insurance_id) && $data[0]->insurance_id > 0): ?> + +
+
+

+ Company Name: + + ins_company_name ?? '', 'Not specified'); ?> + +

+

+ Card Holder Name: + + card_holder_name ?? '', 'Not specified'); ?> + +

+

+ Relation: + + relation_patient_cardholder ?? '', 'Not specified'); ?> + +

+

+ Insurance ID: + + insurance_no ?? '', 'Not specified'); ?> + +

+
+ +
+ + 0): ?> +
+
OPD Case Active
+

Case Code: case_id_code ?? ''); ?>

+

Visit Date: str_date_registration ?? ''); ?>

+ +
+ 0): ?> + +
+
IPD Case Active
+

Case Code: case_id_code ?? ''); ?>

+

IPD No: ipd_code ?? ''); ?>

+ +
+ +
+
Create New Case
+ + +
+ +
+
+ + +
+
+ opd_allowed) && $data_insurance_card[0]->opd_allowed == 1): ?> + + + + charge_cash) && $data_insurance_card[0]->charge_cash == 1): ?> + + +
+
+ +
+ +

No Insurance Information

+

No insurance details found for this patient.

+ +
+ +
+
+ + +
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ + +
+ + 0): ?> +
+
+

+ OPD Registration + +

+
+
+ +
+
opd_code ?? ''); ?>
+

+ Dr. doc_name ?? ''); ?>
+ str_apointment_date ?? ''); ?>
+ p_fname ?? ''); ?> +

+ ion_auth->in_group('OPDEdit') || ($row->new_opd ?? 0) == 1): ?> + + +
+ +
+
+ + + + 0): ?> +
+
+

+ Charges Invoice + +

+
+
+ +
+
invoice_code ?? ''); ?>
+

+ str_inv_date ?? ''); ?>
+ inv_name ?? ''); ?>
+ Item_List ?? ''); ?> +

+ +
+ invoice_status ?? 1) == 0): ?> + + Edit + + + Delete + + + + View + + +
+
+ +
+
+ +
+
+ + +
+ + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/Report/IPD_Current_List.php b/old_code_ci3/views/Report/IPD_Current_List.php new file mode 100644 index 0000000..24890f6 --- /dev/null +++ b/old_code_ci3/views/Report/IPD_Current_List.php @@ -0,0 +1,111 @@ +
+

+ Current Admit IPD List + Panel +

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/OPD_Report_Doctor.php b/old_code_ci3/views/Report/OPD_Report_Doctor.php new file mode 100644 index 0000000..033c6c1 --- /dev/null +++ b/old_code_ci3/views/Report/OPD_Report_Doctor.php @@ -0,0 +1,97 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/ReportMain.php b/old_code_ci3/views/Report/ReportMain.php new file mode 100644 index 0000000..a9ebe67 --- /dev/null +++ b/old_code_ci3/views/Report/ReportMain.php @@ -0,0 +1,201 @@ +
+

+ Report + Panel +

+
+
+
diff --git a/old_code_ci3/views/Report/Report_IPD.php b/old_code_ci3/views/Report/Report_IPD.php new file mode 100644 index 0000000..5c12cae --- /dev/null +++ b/old_code_ci3/views/Report/Report_IPD.php @@ -0,0 +1,200 @@ +
+

+ Report + Panel +

+
+
+
+
+ + +
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + + + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/Report_medical.php b/old_code_ci3/views/Report/Report_medical.php new file mode 100644 index 0000000..4a8dd08 --- /dev/null +++ b/old_code_ci3/views/Report/Report_medical.php @@ -0,0 +1,153 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/Report_medical_template.php b/old_code_ci3/views/Report/Report_medical_template.php new file mode 100644 index 0000000..cbf362a --- /dev/null +++ b/old_code_ci3/views/Report/Report_medical_template.php @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient NameIPD Doc.Admit
Discharge Date
Item NameRateQtyAmt.After Bill Amt.Doc. Name
ipd_code?>p_fname?>ipd_doc_name?>register_date_str?>
discharge_date_str?>
item_name?>item_rate?>item_qty?>item_amount?>Aft_Amt?>doc_name?>
\ No newline at end of file diff --git a/old_code_ci3/views/Report/Report_refer_ipd.php b/old_code_ci3/views/Report/Report_refer_ipd.php new file mode 100644 index 0000000..664f213 --- /dev/null +++ b/old_code_ci3/views/Report/Report_refer_ipd.php @@ -0,0 +1,126 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/Report_refer_template.php b/old_code_ci3/views/Report/Report_refer_template.php new file mode 100644 index 0000000..9ffee0f --- /dev/null +++ b/old_code_ci3/views/Report/Report_refer_template.php @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IPD CodePatient NameIPD Doc.Admit
Discharge Date
Refer NameNet AmountBalance
ipd_code?>p_fname?>ipd_doc_name?>register_date_str?>
discharge_date_str?>
title?> f_name?> [type_desc?>] net_amount?>balance_amount?>
\ No newline at end of file diff --git a/old_code_ci3/views/Report/ipd_payment_report.php b/old_code_ci3/views/Report/ipd_payment_report.php new file mode 100644 index 0000000..ca59dba --- /dev/null +++ b/old_code_ci3/views/Report/ipd_payment_report.php @@ -0,0 +1,158 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/new 1.php b/old_code_ci3/views/Report/new 1.php new file mode 100644 index 0000000..7a3eb2b --- /dev/null +++ b/old_code_ci3/views/Report/new 1.php @@ -0,0 +1,60 @@ +// storing request (ie, get/post) global array to a variable +$requestData= $_REQUEST; + +$columns = array( +// datatable column index => database column name + 0 =>'employee_name', + 1 => 'employee_salary', + 2=> 'employee_age' +); +// getting total number records without any search +$sql = "SELECT employee_name, employee_salary, employee_age "; +$sql.=" FROM employee"; +$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees"); +$totalData = mysqli_num_rows($query); +$totalFiltered = $totalData; // when there is no search parameter then total number rows = total number filtered rows. + = '".$minRange."' AND employee_age <= '".$maxRange."' ) "; +} +$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees"); +$totalFiltered = mysqli_num_rows($query); // when there is a search parameter then we have to modify total number filtered rows as per search result. + +$sql.=" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; // adding length + +$query=mysqli_query($conn, $sql) or die("employee-grid-data.php: get employees"); + +$data = array(); +while( $row=mysqli_fetch_array($query) ) { // preparing an array + $nestedData=array(); + + $nestedData[] = $row["employee_name"]; + $nestedData[] = $row["employee_salary"]; + $nestedData[] = $row["employee_age"]; + + $data[] = $nestedData; +} + +$json_data = array( + "draw" => intval( $requestData['draw'] ), // for every request/draw by clientside , they send a number as a parameter, when they recieve a response/data they first check the draw number, so we are sending same number in draw. + "recordsTotal" => intval( $totalData ), // total number of records + "recordsFiltered" => intval( $totalFiltered ), // total number of records after searching, if there is no searching then totalFiltered = totalData + "data" => $data // total data array + ); + +echo json_encode($json_data); // send data as json format + +?> \ No newline at end of file diff --git a/old_code_ci3/views/Report/new 1.txt b/old_code_ci3/views/Report/new 1.txt new file mode 100644 index 0000000..262c9bf --- /dev/null +++ b/old_code_ci3/views/Report/new 1.txt @@ -0,0 +1,143 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/opd_report_total.php b/old_code_ci3/views/Report/opd_report_total.php new file mode 100644 index 0000000..6e34049 --- /dev/null +++ b/old_code_ci3/views/Report/opd_report_total.php @@ -0,0 +1,128 @@ +
+

+ OPD Total Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/opd_report_v.php b/old_code_ci3/views/Report/opd_report_v.php new file mode 100644 index 0000000..a0de4f7 --- /dev/null +++ b/old_code_ci3/views/Report/opd_report_v.php @@ -0,0 +1,160 @@ +
+

+ OPD List + List +

+
+ +
+
+
+
+ +
+   + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD CodeNamePatient CodeOPD DateDoc. NameTypePayModeFee
+ + + +
Total:
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_collocation_emp.php b/old_code_ci3/views/Report/rep_collocation_emp.php new file mode 100644 index 0000000..ba760ff --- /dev/null +++ b/old_code_ci3/views/Report/rep_collocation_emp.php @@ -0,0 +1,156 @@ +
+

+ Report Payment + Panel +

+
+
+
+
+ +
+   + +
+ +
+ +
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+ + + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_diagnosis.php b/old_code_ci3/views/Report/rep_diagnosis.php new file mode 100644 index 0000000..e39a8de --- /dev/null +++ b/old_code_ci3/views/Report/rep_diagnosis.php @@ -0,0 +1,129 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_diagnosis_cash.php b/old_code_ci3/views/Report/rep_diagnosis_cash.php new file mode 100644 index 0000000..6b9d631 --- /dev/null +++ b/old_code_ci3/views/Report/rep_diagnosis_cash.php @@ -0,0 +1,153 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_diagnosis_empwise.php b/old_code_ci3/views/Report/rep_diagnosis_empwise.php new file mode 100644 index 0000000..07a823d --- /dev/null +++ b/old_code_ci3/views/Report/rep_diagnosis_empwise.php @@ -0,0 +1,121 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_diagnosis_empwise_2.php b/old_code_ci3/views/Report/rep_diagnosis_empwise_2.php new file mode 100644 index 0000000..4c2601d --- /dev/null +++ b/old_code_ci3/views/Report/rep_diagnosis_empwise_2.php @@ -0,0 +1,121 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_lab_item.php b/old_code_ci3/views/Report/rep_lab_item.php new file mode 100644 index 0000000..4c2601d --- /dev/null +++ b/old_code_ci3/views/Report/rep_lab_item.php @@ -0,0 +1,121 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_opd_p.php b/old_code_ci3/views/Report/rep_opd_p.php new file mode 100644 index 0000000..75dbb89 --- /dev/null +++ b/old_code_ci3/views/Report/rep_opd_p.php @@ -0,0 +1,160 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_other_charge.php b/old_code_ci3/views/Report/rep_other_charge.php new file mode 100644 index 0000000..de8fd18 --- /dev/null +++ b/old_code_ci3/views/Report/rep_other_charge.php @@ -0,0 +1,161 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+ + + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_total_bank_payment.php b/old_code_ci3/views/Report/rep_total_bank_payment.php new file mode 100644 index 0000000..d94f59f --- /dev/null +++ b/old_code_ci3/views/Report/rep_total_bank_payment.php @@ -0,0 +1,118 @@ +
+

+ Report Payment + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/rep_total_payment.php b/old_code_ci3/views/Report/rep_total_payment.php new file mode 100644 index 0000000..19deeb4 --- /dev/null +++ b/old_code_ci3/views/Report/rep_total_payment.php @@ -0,0 +1,135 @@ +
+

+ Report Payment + Panel +

+
+
+
+
+ +
+   + +
+ +
+ +
+ + +
+
+
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report/report_Diagnosis_Emp_total_3.php b/old_code_ci3/views/Report/report_Diagnosis_Emp_total_3.php new file mode 100644 index 0000000..37be24a --- /dev/null +++ b/old_code_ci3/views/Report/report_Diagnosis_Emp_total_3.php @@ -0,0 +1,11 @@ + + + + + + + + + + + +

+ Report Insurance Case IPD + Panel +

+ +
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report3/ECHS_OPD.php b/old_code_ci3/views/Report3/ECHS_OPD.php new file mode 100644 index 0000000..1ed168b --- /dev/null +++ b/old_code_ci3/views/Report3/ECHS_OPD.php @@ -0,0 +1,137 @@ +
+

+ Report Insurance Case OPD + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report3/diagnosis_qty.php b/old_code_ci3/views/Report3/diagnosis_qty.php new file mode 100644 index 0000000..6e3f377 --- /dev/null +++ b/old_code_ci3/views/Report3/diagnosis_qty.php @@ -0,0 +1,116 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report4/Report_echs_opd.php b/old_code_ci3/views/Report4/Report_echs_opd.php new file mode 100644 index 0000000..3195a14 --- /dev/null +++ b/old_code_ci3/views/Report4/Report_echs_opd.php @@ -0,0 +1,128 @@ +
+

+ Report + Panel +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + + +
+
+
+ +
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report5/Report_Document.php b/old_code_ci3/views/Report5/Report_Document.php new file mode 100644 index 0000000..0f3f14a --- /dev/null +++ b/old_code_ci3/views/Report5/Report_Document.php @@ -0,0 +1,109 @@ +
+

+ Document Issue + Report +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report5/Report_XRay_chest.php b/old_code_ci3/views/Report5/Report_XRay_chest.php new file mode 100644 index 0000000..65a5455 --- /dev/null +++ b/old_code_ci3/views/Report5/Report_XRay_chest.php @@ -0,0 +1,79 @@ +
+

+ X-Ray Chest List + Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ diff --git a/old_code_ci3/views/Report5/Report_corona_suspected.php b/old_code_ci3/views/Report5/Report_corona_suspected.php new file mode 100644 index 0000000..ac9ed5a --- /dev/null +++ b/old_code_ci3/views/Report5/Report_corona_suspected.php @@ -0,0 +1,79 @@ +
+

+ Corona Suspected Data + Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report5/Report_dengue.php b/old_code_ci3/views/Report5/Report_dengue.php new file mode 100644 index 0000000..d8c21ed --- /dev/null +++ b/old_code_ci3/views/Report5/Report_dengue.php @@ -0,0 +1,79 @@ +
+

+ Dengue Data + Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report5/Report_pregnancy_suspected.php b/old_code_ci3/views/Report5/Report_pregnancy_suspected.php new file mode 100644 index 0000000..253c800 --- /dev/null +++ b/old_code_ci3/views/Report5/Report_pregnancy_suspected.php @@ -0,0 +1,79 @@ +
+

+ Pregnancy Data + Report +

+
+
+
+
+ +
+   + +
+ +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Report6/Report_Lab_Log.php b/old_code_ci3/views/Report6/Report_Lab_Log.php new file mode 100644 index 0000000..6b59060 --- /dev/null +++ b/old_code_ci3/views/Report6/Report_Lab_Log.php @@ -0,0 +1,109 @@ +
+

+ Lab Log + Report +

+
+
+
+
+ +
+   + +
+ +
+
+ + +
+
+ +
+ + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/ReportMain.php b/old_code_ci3/views/ReportMain.php new file mode 100644 index 0000000..0fc5af3 --- /dev/null +++ b/old_code_ci3/views/ReportMain.php @@ -0,0 +1,124 @@ +
+

+ Report + Panel +

+
+
+
diff --git a/old_code_ci3/views/Storestock/Dashboard.php b/old_code_ci3/views/Storestock/Dashboard.php new file mode 100644 index 0000000..5d1a815 --- /dev/null +++ b/old_code_ci3/views/Storestock/Dashboard.php @@ -0,0 +1,37 @@ +
+

+ Store Stock + Dashboard +

+
+ +
+'form','class'=>'form1')); ?> + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Draft_indent.php b/old_code_ci3/views/Storestock/Draft_indent.php new file mode 100644 index 0000000..c5a59fc --- /dev/null +++ b/old_code_ci3/views/Storestock/Draft_indent.php @@ -0,0 +1,117 @@ +
+
+
+

Indent List

+
+
+
#Test NamePatient NameUHIDAgePhone No.
+ + + + + + + + + + + + + + + +
Indent No.DepartmentDate
+
+ + + + + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Medical_stock_drug.php b/old_code_ci3/views/Storestock/Medical_stock_drug.php new file mode 100644 index 0000000..3c8afae --- /dev/null +++ b/old_code_ci3/views/Storestock/Medical_stock_drug.php @@ -0,0 +1,116 @@ +
+
+
+

Drug Details

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SS No.Item CodeItem NameFormulationRack No.Shelf No.Batch No.QtyExpiryMRPSaled Qty
+
+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/new_purchase_invoice.php b/old_code_ci3/views/Storestock/Purchase/new_purchase_invoice.php new file mode 100644 index 0000000..7dc48d6 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/new_purchase_invoice.php @@ -0,0 +1,78 @@ +
+
+
+
+
+
+

New Purchase Invoice

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_challan_list.php b/old_code_ci3/views/Storestock/Purchase/purchase_challan_list.php new file mode 100644 index 0000000..b96c12e --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_challan_list.php @@ -0,0 +1,37 @@ +
+
+ + $row->id) + { + echo ''; + echo ' '; + echo ''; + + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; + } + + echo ''; + echo ' '; + echo ' '; + echo ' '; + echo ' '; + echo ''; + + $purchase_id=$row->id; + + } + ?> +
Challan No :'.$row->Invoice_no.' / Date : '.$row->str_date_of_invoice.' /Net Amount :'.$row->tamount.'
Item NameQty + FreeMRPAdd
'.$row->Item_name.''.$row->qty.' + '.$row->qty_free.''.$row->mrp.'Add
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_invoice_edit.php b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_edit.php new file mode 100644 index 0000000..35566e1 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_edit.php @@ -0,0 +1,531 @@ +
+
+
+
+
+

Purchase Invoice Information

+ Supplier: | name_supplier ?> + ischallan == 1) { ?> + | Challan No.: Invoice_no ?> + + Invoice No.: Invoice_no ?> + + Invoice Date : str_date_of_invoice ?> + + + +
+
+ 'form', 'class' => 'form2')); ?> +
+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_invoice_item.php b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_item.php new file mode 100644 index 0000000..11f4f55 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_item.php @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + item_return==1) + { + $style='style="color:Red;"'; + }else{ + $style=''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + + + +
#RecNoItem NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
'.$srno.''.$row->id.''.$row->Item_name.''.$row->batch_no.''.$row->exp_date_str.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->amount.''.$row->discount.''.$row->taxable_amount.''.$row->CGST_per.''.$row->SGST_per.''.$row->net_amount.''; + if($purchase_invoice[0]->inv_status==0) + { + echo ' + '; + if($row->old_purchase_id>0) + { + echo ''; + } + } + echo '
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_invoice_item_print.php b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_item_print.php new file mode 100644 index 0000000..67947ce --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_item_print.php @@ -0,0 +1,130 @@ + + + + + + + + + + + +

+

, Uttarakhand
+ '; + + if(H_Med_GST!='') + { + echo 'GST: '.H_Med_GST .''; + } + + if(M_LIC!='') + { + echo ' L.No: '.M_LIC; + } + ?> +

+

+ Invoice From : + Supplier : name_supplier?>
+ Purchase Invoice No.: Invoice_no?>
+ Invoice Date : date_of_invoice)?>
+

+
+

Purchase Invoice

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:Invoice_no?> / Name : name_supplier?>
+
+ + + + + + + + + + + + + + + + + + item_return==1) + { + $style='style="color:Red;"'; + }else{ + $style=''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + ?> + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
'.$srno.''.$row->Item_name.''.$row->batch_no.''.$row->expiry_date.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->amount.''.$row->discount.''.$row->taxable_amount.''.$row->CGST_per.''.$row->SGST_per.''.$row->net_amount.'
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_invoice_master_edit.php b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_master_edit.php new file mode 100644 index 0000000..d4eb5f5 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_invoice_master_edit.php @@ -0,0 +1,231 @@ +
+
+
+
+
+
+ 'form','class'=>'form1')); ?> + + inv_status==0){ ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+ +
name_supplier?>
+
+
+
+
+ +
Invoice_no?>
+
+
+
+ +
date_of_invoice)?>
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + item_return==1) + { + $style='style="color:Red;"'; + }else{ + $style=''; + } + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.MRPQty.RateAmountDisc.Tax AmountCGSTSGSTNet Amount
'.$srno.''.$row->Item_name.''.$row->batch_no.''.$row->expiry_date.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->amount.''.$row->discount.''.$row->taxable_amount.''.$row->CGST_per.''.$row->SGST_per.''.$row->net_amount.'
#Taxable_Amt ?>CGST_Amt ?>SGST_Amt ?>T_Net_Amount ?>
+
+ +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_item_old.php b/old_code_ci3/views/Storestock/Purchase/purchase_item_old.php new file mode 100644 index 0000000..2fcb615 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_item_old.php @@ -0,0 +1,31 @@ +

Last 5 Purchase Orders

+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + +
#Item NameDateMRPQtyRateSupplier
'.$srno.''.$row->Item_name.''.$row->date_of_invoice_str.''.$row->mrp.''.floatval($row->qty).'+'.floatval($row->qty_free).''.$row->purchase_price.''.$row->name_supplier.'
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/purchase_supp_list.php b/old_code_ci3/views/Storestock/Purchase/purchase_supp_list.php new file mode 100644 index 0000000..5216fb7 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/purchase_supp_list.php @@ -0,0 +1,74 @@ +
+
+
+
+ + + + + + + + + + + + ischallan==0){ + echo ''; + }else{ + echo ''; + } + ?> + + + + + + + + + + + + + + + + + + + + +
Invoice IDSupplierDateAmount
Invoice_no ?>name_supplier ?>date_of_invoice ?>tamount ?> + + Print + tamount==0){ ?> + + + +
Invoice IDSupplierDateAmount
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/supplier_Edit.php b/old_code_ci3/views/Storestock/Purchase/supplier_Edit.php new file mode 100644 index 0000000..2aedfd9 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/supplier_Edit.php @@ -0,0 +1,120 @@ + + +
+
+

Supplier

+
+
+ 'form','class'=>'form1')); ?> + 0) + { + $sid=$supplier_data[0]->sid; + $name_supplier=$supplier_data[0]->name_supplier; + $short_name=$supplier_data[0]->short_name; + $contact_no=$supplier_data[0]->contact_no; + $gst_no=$supplier_data[0]->gst_no; + $city=$supplier_data[0]->city; + $state=$supplier_data[0]->state; + } + + ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/supplier_list.php b/old_code_ci3/views/Storestock/Purchase/supplier_list.php new file mode 100644 index 0000000..e0a5567 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/supplier_list.php @@ -0,0 +1,32 @@ +
+ +'form','class'=>'form2')); ?> +
+ + + + + + + + + + + + +
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/supplier_master.php b/old_code_ci3/views/Storestock/Purchase/supplier_master.php new file mode 100644 index 0000000..327b85b --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/supplier_master.php @@ -0,0 +1,60 @@ +
+

+ Supplier +

+
+
+
+
+
+
+ +

Supplier List

+
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?>gst_no ?> + +
NameGSTAction
+ +
+ +
+
+
+ +
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Purchase/supplier_master_sub.php b/old_code_ci3/views/Storestock/Purchase/supplier_master_sub.php new file mode 100644 index 0000000..651aa18 --- /dev/null +++ b/old_code_ci3/views/Storestock/Purchase/supplier_master_sub.php @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
NameGSTAction
name_supplier ?>name_supplier ?> + +
NameGSTAction
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Stock/location_master_list.php b/old_code_ci3/views/Storestock/Stock/location_master_list.php new file mode 100644 index 0000000..5c90f8b --- /dev/null +++ b/old_code_ci3/views/Storestock/Stock/location_master_list.php @@ -0,0 +1,52 @@ +
+
+
+
+

Location

+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ ID + + Location Name + + Location Description + + Action +
+ l_id ?> + + loc_name ?> + + loc_desc ?> + + Edit +
+
+ + +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Stock/main_store_dashboard.php b/old_code_ci3/views/Storestock/Stock/main_store_dashboard.php new file mode 100644 index 0000000..c28a01c --- /dev/null +++ b/old_code_ci3/views/Storestock/Stock/main_store_dashboard.php @@ -0,0 +1,70 @@ +
+

+ Store Main + Panel +

+
+
+
+ +
+
+
+ Inventory +
+ +
+
+ +
diff --git a/old_code_ci3/views/Storestock/Stock_Item_history.php b/old_code_ci3/views/Storestock/Stock_Item_history.php new file mode 100644 index 0000000..5d0f09c --- /dev/null +++ b/old_code_ci3/views/Storestock/Stock_Item_history.php @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Pur. IDSupplierInv.No / DateBat.No.Exp.Dt.MRPPurchaseQty / PackingUnit QtySale U.QtyLost UnitCurr.U.QtyUpdate Lost UnitRemove
id?>name_supplier?>Invoice_no?>
date_of_invoice?>
batch_no?>expiry_date?>mrp?>purchase_price?>tqty?> / packing?>total_unit?>total_sale_unit?>total_lost_unit?>cur_unit?> + + +
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Stock_search_qty_result.php b/old_code_ci3/views/Storestock/Stock_search_qty_result.php new file mode 100644 index 0000000..2c34dc8 --- /dev/null +++ b/old_code_ci3/views/Storestock/Stock_search_qty_result.php @@ -0,0 +1,190 @@ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item NameCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order QtyRemoved Qty
+

+ item_name ?>

+
+

C_Pak_Qty?>

+
+

C_Unit_Stock_Qty,2) ?>

+
+

C_Pak_Sale_Qty,2) ?>

+
+

sale_unit,2) ?>

+
+

total_lost_unit,2) ?>

+
+

packing ?>/re_order_qty ?>

+
+ +
Item NameCurrent Pak.Current Unit QtyTotal Sale Pak.Total Sale Unit QtyLost UnitPackage/Re-Order QtyRemoved Qty
+ +
+
+
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Store_Final_Invoice.php b/old_code_ci3/views/Storestock/Store_Final_Invoice.php new file mode 100644 index 0000000..dc36a3b --- /dev/null +++ b/old_code_ci3/views/Storestock/Store_Final_Invoice.php @@ -0,0 +1,308 @@ +
+
+

+ Indent + No. : indent_code?> +

+
+
+'form','class'=>'form1')); ?> +
+
+
+ + + + location_id>0) { ?> +
+

Location Name : + issued_name?> + / Indent No. :indent_code?> + / Date : indent_date)?> +

+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + echo ''; + ?> + + + + + + + + + + + + + + + + + +
#Item codeItem NameFormulationBatch NoExp.RateQty.PriceDisc.HSNCODE/C-SGSTCGSTSGSTAmount
'.$srno.''.$row->item_code.''.$row->item_Name.''.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->disc_amount.''.$row->HSNCODE.''.$row->CGST.''.$row->SGST.''.$row->tamount.'
#Gross TotalGtotal ?>tamt?>
+
+
+ +
+
+ Print +
+
+ +
+
+ +
+ + + +
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/Store_Print.php b/old_code_ci3/views/Storestock/Store_Print.php new file mode 100644 index 0000000..b64c445 --- /dev/null +++ b/old_code_ci3/views/Storestock/Store_Print.php @@ -0,0 +1,103 @@ + + + + + + + + +
+

+

,
+

+
+

Location Name : + issued_name?>
+ Indent No. :indent_code?>
+ Date : indent_date)?> +

+
+
+

Indent

+
+ + + + + + +
Page : {PAGENO}/{nbpg}Invoice No.:indent_code ?> / Location : issued_name ?>
+
+ + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + $srno=$srno+1; + $head_start=$head_start+1; + + if($row->sale_return==1){ + echo ''; + echo ''; + echo ''; + } + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + + if(count($invoice_stock_master)>0) { + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> +
Invoice ID : '.$row->indent_code.' [Dated : '.$row->str_inv_date.']
#Item NameBatch NoExp.RateQty.Gross Amt
Sale Return
'.$srno.''.$row->item_Name.' '.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.'
#Total'.$invoice_stock_master[0]->gross_amount.'
+ +

+ + + + +
+ + + + For +
diff --git a/old_code_ci3/views/Storestock/indent_edit.php b/old_code_ci3/views/Storestock/indent_edit.php new file mode 100644 index 0000000..3acedfd --- /dev/null +++ b/old_code_ci3/views/Storestock/indent_edit.php @@ -0,0 +1,444 @@ +
+

+ Indent No. indent_code?> + + Edit + +

+
+
+ 'form','class'=>'form1')); ?> +
+
+
+
+ + + + location_id>0) { ?> +
+

Location Name : + issued_name?> + / Indent No. :indent_code?> + / Date : indent_date)?> +

+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+
+ + +

+ + + + + + + + +

+
+
+
+
+
+ + +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+

Sale Medicine

+
+ +
+
+ + +
+ +
+ + + +
+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/indent_item_list.php b/old_code_ci3/views/Storestock/indent_item_list.php new file mode 100644 index 0000000..5ec0772 --- /dev/null +++ b/old_code_ci3/views/Storestock/indent_item_list.php @@ -0,0 +1,108 @@ +item_code); + } + +?> + + + + + + + + + + + + + + sale_return==1){ + $style='style="background:orange;"'; + + }else{ + $style=""; + } + + if($row->no_day<90){ + $style='style="color:red;"'; + } + + $style_repeat=''; + + if(in_array($row->item_code,$Item_List)){ + $style_repeat='style="color:green;"'; + } + + if($row->cur_qty<6){ + $style='style="color:red;"'; + } + + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + + echo ''; + echo ''; + } + echo ''; + echo ''; + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
#Item NameBatch NoExp.RateS.Qty.Qty.PriceAmount
'.$srno.''.$row->item_Name.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''; + if($row->sale_return==0){ + echo '
+ + + + +
'; + } + echo '
'.$row->amount.''.$row->tamount.''; + echo ' '; + echo '
#Gross TotalGtotal ?>tamt?>
#Tax TotalTCGST : TCGST?> / TSGST :TSGST?>
\ No newline at end of file diff --git a/old_code_ci3/views/Storestock/new_indent.php b/old_code_ci3/views/Storestock/new_indent.php new file mode 100644 index 0000000..d8bb9e6 --- /dev/null +++ b/old_code_ci3/views/Storestock/new_indent.php @@ -0,0 +1,88 @@ +
+
+
+

New Indent

+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/Storestock/store_stock_search.php b/old_code_ci3/views/Storestock/store_stock_search.php new file mode 100644 index 0000000..c467693 --- /dev/null +++ b/old_code_ci3/views/Storestock/store_stock_search.php @@ -0,0 +1,143 @@ +
+'form','class'=>'form2')); ?> +
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + +
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/TestForm.php b/old_code_ci3/views/TestForm.php new file mode 100644 index 0000000..93c820e --- /dev/null +++ b/old_code_ci3/views/TestForm.php @@ -0,0 +1,66 @@ +
+

+ Dashboard + Control panel +

+ +
+ +
+
+
+
+
+

CK Editor + Advanced and full of features +

+ +
+ + +
+ +
+ +
+ + + +
+
+ + +
+
+

Bootstrap WYSIHTML5 + Simple and fast +

+ +
+ + +
+ +
+ +
+
+ +
+
+
+
+ +
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/TestForm2.php b/old_code_ci3/views/TestForm2.php new file mode 100644 index 0000000..568e1d3 --- /dev/null +++ b/old_code_ci3/views/TestForm2.php @@ -0,0 +1,405 @@ +
+

+ Advanced Form Elements + Preview +

+ +
+ + +
+ + +
+
+

Select2

+ +
+ + +
+
+ +
+
+
+
+ + +
+ +
+ + +
+ +
+ +
+
+ + +
+ +
+ + +
+ +
+ +
+ +
+ + +
+ + +
+
+ +
+
+

Input masks

+
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + +
+
+
+ +
+ +
+ +
+ + + +
+ + +
+
+ +
+ +
+ +
+ + + +
+ + +
+
+ +
+ +
+ +
+ + + +
+ + +
+
+ +
+ +
+ +
+ + +
+ +
+ + +
+
+

Color & Time Picker

+
+
+ +
+ + +
+ + + +
+ + +
+ + +
+ +
+
+ +
+ + + +
+
+ + +
+ + +
+ +
+
+ +
+ +
+
+ +
+ + +
+ +
+
+
+

Date picker

+
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + +
+ + +
+
+ +
+ +
+ +
+ + + +
+ + +
+
+ +
+ +
+ +
+ + + +
+ + +
+ +
+
+ + +
+ +
+ + + +
+
+

iCheck - Checkbox & Radio Inputs

+
+
+ + + +
+ + + +
+ + +
+ + + +
+ + + + +
+ + + +
+ + +
+ + + +
+ + + + +
+ + + +
+ + +
+ + + +
+
+ + +
+ +
+ +
+ + +
+ \ No newline at end of file diff --git a/old_code_ci3/views/Website.php b/old_code_ci3/views/Website.php new file mode 100644 index 0000000..ce7152a --- /dev/null +++ b/old_code_ci3/views/Website.php @@ -0,0 +1,42 @@ +load->view('form'); + } + + public function submission() + { + + if (!$this->input->is_ajax_request()) { exit('no valid req.'); } + + $FormRules = array( + array( + 'field' => 'website', + 'label' => 'Website Address', + 'rules' => 'required|min_length[5]|max_length[30]' + ) + ); + + $this->form_validation->set_rules($FormRules); + + if ($this->form_validation->run() == TRUE) + { + echo '
Your website is submitted
'; + } + else + { + echo '
'.validation_errors().'
'; + } + } + + } diff --git a/old_code_ci3/views/auth_dst/create_group.php b/old_code_ci3/views/auth_dst/create_group.php new file mode 100644 index 0000000..e8c6f25 --- /dev/null +++ b/old_code_ci3/views/auth_dst/create_group.php @@ -0,0 +1,43 @@ +
+

+ + +

+ +
+
+
+
+ +'form','class'=>'form1'));?> + + +

+
+ +

+ +

+
+ +

+ +

+ + +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/auth_dst/create_user.php b/old_code_ci3/views/auth_dst/create_user.php new file mode 100644 index 0000000..5c0d2e5 --- /dev/null +++ b/old_code_ci3/views/auth_dst/create_user.php @@ -0,0 +1,95 @@ +
+

+ + +

+ +
+ +
+
+
+ +'form','class'=>'form1'));?> +
+
+
+
+ +
+
+
+
+
+ +
+
+ '; + echo '
'; + echo lang('create_user_identity_label', 'identity'); + + echo form_error('identity'); + echo form_input($identity); + echo '
+
'; + } + ?> +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+

+
+
+ + + +
+ \ No newline at end of file diff --git a/old_code_ci3/views/auth_dst/edit_group.php b/old_code_ci3/views/auth_dst/edit_group.php new file mode 100644 index 0000000..080dad7 --- /dev/null +++ b/old_code_ci3/views/auth_dst/edit_group.php @@ -0,0 +1,20 @@ +

+

+ +
+ + + +

+
+ +

+ +

+
+ +

+ +

+ + \ No newline at end of file diff --git a/old_code_ci3/views/auth_dst/edit_user.php b/old_code_ci3/views/auth_dst/edit_user.php new file mode 100644 index 0000000..d4a59da --- /dev/null +++ b/old_code_ci3/views/auth_dst/edit_user.php @@ -0,0 +1,119 @@ +
+

+ + +

+
+
+
+ +'form','class'=>'form1'));?> +
+
+
+
+ +
+
+
+
+
+ +
+
+ '; + echo '
'; + echo lang('edit_user_identity_label', 'identity'); + echo form_input($identity); + echo '
+
'; + } + ?> + +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+

Role Assign

+
+
+ ion_auth->is_admin()): ?> + module_name): + if($module_head_name!=""){ + echo '
'; + echo '
'; + } + echo '
'; + echo '
'; + echo '

'.$group->module_name.'

'; + $module_head_name=$group->module_name; + endif + ?> + + + ';?> + +
+
+
+
+
+
+
+ id);?> + +

+
+
+
+ +
+ diff --git a/old_code_ci3/views/auth_dst/index.php b/old_code_ci3/views/auth_dst/index.php new file mode 100644 index 0000000..f2aa6a7 --- /dev/null +++ b/old_code_ci3/views/auth_dst/index.php @@ -0,0 +1,52 @@ +

+
+
+
+

+
+ +
+

+ + + + + + + + + + + + + + + + + + + + + + + +
User Name
username,ENT_QUOTES,'UTF-8');?>first_name,ENT_QUOTES,'UTF-8');?>last_name,ENT_QUOTES,'UTF-8');?>email,ENT_QUOTES,'UTF-8');?> + active){ + echo "".lang('index_active_link').""; + + }else{ + echo "".lang('index_inactive_link').""; + } + ?> + Edit
+ +
+ + +
\ No newline at end of file diff --git a/old_code_ci3/views/auth_dst/login.php b/old_code_ci3/views/auth_dst/login.php new file mode 100644 index 0000000..60c0a51 --- /dev/null +++ b/old_code_ci3/views/auth_dst/login.php @@ -0,0 +1,100 @@ + + + + + + Log in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/old_code_ci3/views/auth_dst/profile_update.php b/old_code_ci3/views/auth_dst/profile_update.php new file mode 100644 index 0000000..b6199ae --- /dev/null +++ b/old_code_ci3/views/auth_dst/profile_update.php @@ -0,0 +1,64 @@ +
+

+ + +

+ +
+
+
+ +'form','class'=>'form1'));?> +
+ '; + echo '
'; + echo lang('edit_user_identity_label', 'identity'); + echo form_input($identity); + echo '
+
'; + } + ?> + +
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+
+ id);?> + + +

+
+
+
+ +
+ diff --git a/old_code_ci3/views/center_room/center_room.php b/old_code_ci3/views/center_room/center_room.php new file mode 100644 index 0000000..e8f8e26 --- /dev/null +++ b/old_code_ci3/views/center_room/center_room.php @@ -0,0 +1,75 @@ + + + + + + + + + + + + + +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/Investigation_history.php b/old_code_ci3/views/dashboard/Investigation_history.php new file mode 100644 index 0000000..b38d138 --- /dev/null +++ b/old_code_ci3/views/dashboard/Investigation_history.php @@ -0,0 +1,69 @@ + +id; + $query = $this->db->query($sql); + $lab_request= $query->result(); + + $sql="select * from file_upload_data + where show_type=0 and pid=$row->attach_id and charge_id=$row->id order by id"; + $query = $this->db->query($sql); + $opd_file_list= $query->result(); + + ?> +
+
+ User Image + + Report On inv_date_str?> / Amount : net_amount?> + + Test Name : Item_list?> +
+ +
+ '; + echo $lab_request_row->Report_Data; + echo '
'; + } + ?> +
+ +
+ '; + $pos=strpos($opd_file_row->full_path,'/uploads/',1) ; + $file_path=substr($opd_file_row->full_path,$pos); + + //$file_path=str_replace('hms_uploads','uploads',$opd_file_row->full_path); + + if($opd_file_row->file_ext=='.pdf') + { + echo ''; + }else + { + echo 'Photo'; + } + + echo '
'; + } + + ?> + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/OPDPrescription.php b/old_code_ci3/views/dashboard/OPDPrescription.php new file mode 100644 index 0000000..316d72e --- /dev/null +++ b/old_code_ci3/views/dashboard/OPDPrescription.php @@ -0,0 +1,1203 @@ +
+
+ + + + + + + + + + +
+

Name : p_fname); ?>
p_relative) . ' ' . ucwords($data[0]->p_rname); ?> +
UHID ID : p_code ?> +
Gender : xgender ?> + / Age : str_age ?> +
OPD ID : opd_code ?> +

+
+ profile_picture, '/uploads/', 1); + $profile_file_path = substr($data[0]->profile_picture, $pos); + ?> + + + + +
+
+
+
+ + + + + + Print OPD HEAD in Letter Head + Print OPD HEAD in Blank Page +

+ + + +
+
+ 'form', 'class' => 'form1')); ?> + +
+
+ + + +
+
+ +
+
+
+ +
+
+
+

General Examination

+
+
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+

Pain Measurement Scale

+
+
+
+
+
+ +
+
+
+
+
+
+ pain_value)?> > + +
+
+ pain_value)?> > + +
+
+ pain_value)?> > + +
+
+ pain_value)?> > + +
+
+ pain_value)?> > + +
+ +
+
+
+
+
+
+
Complication
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
Addiction(if any)
+
+ +
+
+ +
+
+ +
+
+
+
+
+
Co-Morbidities
+
+ + + +
+
+
+
+
+ + + + + + + +
+
+
+ +
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/OPD_old_prescription.php b/old_code_ci3/views/dashboard/OPD_old_prescription.php new file mode 100644 index 0000000..bf9b6da --- /dev/null +++ b/old_code_ci3/views/dashboard/OPD_old_prescription.php @@ -0,0 +1,195 @@ + + + diff --git a/old_code_ci3/views/dashboard/appointment.php b/old_code_ci3/views/dashboard/appointment.php new file mode 100644 index 0000000..014b9d7 --- /dev/null +++ b/old_code_ci3/views/dashboard/appointment.php @@ -0,0 +1,48 @@ +
+
+
+
+ +
+
+
+ +
+ + + + +
+
+
+
+
+ +
+
+ + +
+
+
+
+
+ +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/dash1.php b/old_code_ci3/views/dashboard/dash1.php new file mode 100644 index 0000000..1c55c59 --- /dev/null +++ b/old_code_ci3/views/dashboard/dash1.php @@ -0,0 +1,158 @@ +
+

+ Dashboard + panel +

+ +
+
+
+
+
+ +
+ OPD + T_opd ?> + More info +
+
+
+ +
+
+ +
+ Admit & Discharge Status + Discharge Today : + Admit Today : +
+
+
+
+
+ +
+ Current IPD Status + Total Admit : + Org. Admit : +
+
+
+ +
+
+ + +
+ CPU & Memory Load + + CPU % + Memory % + Free Disk % + Total Disk +
+ +
+ +
+
+
+
+
+
+
+
+

OPD

+
+
+ + + + + + + + + + + +
OrganizationNo of OPD
Ins_name ?>No_OPD ?>
+
+
+
+
+
+
+

OPD

+
+
+ + + + + + + + + + + + + + + +
Doctor NameNo of OPDDirectOrg.
p_fname ?>No_opd ?>Direct_OPD ?>Org_OPD ?>
+
+
+
+
+
+
+
+
+

IPD Doctors

+
+
+ + + + + + + + + + + +
Doctor NameNo of IPD
doc_name ?>No_patient ?>
+
+
+
+
+
+
+

IPD

+
+
+ + + + + + + + + + + +
OrganizationNo of IPD
ins_company_name ?>No_IPD ?>
+
+
+
+ +
+ +
diff --git a/old_code_ci3/views/dashboard/day_care_format.php b/old_code_ci3/views/dashboard/day_care_format.php new file mode 100644 index 0000000..0c1871b --- /dev/null +++ b/old_code_ci3/views/dashboard/day_care_format.php @@ -0,0 +1,65 @@ + + + +

DAY CARE DISCHARGE

+
+ + + +udai<>"") + { + $old_uhid= ' /'.$patient_master[0]->udai; + } +?> +
+ + + + + +
+ UHID : p_code?>
+ Name : title?> p_fname)?>
+ p_relative?> p_rname)?>
+ Sex : xgender?> age?>
+
+ Date: str_apointment_date ?>

+ Admit Time: ____________________

+ Discharge Time: ___________________
+
+
+
+

Hospital Course

+
+
+
+
+
+
+
+
+
+
+

Treatment Advice

+
+
+
+
+
+
+
+
diff --git a/old_code_ci3/views/dashboard/invoice_print_a4_double.php b/old_code_ci3/views/dashboard/invoice_print_a4_double.php new file mode 100644 index 0000000..5e1c309 --- /dev/null +++ b/old_code_ci3/views/dashboard/invoice_print_a4_double.php @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/jkhospital.php b/old_code_ci3/views/dashboard/jkhospital.php new file mode 100644 index 0000000..023254d --- /dev/null +++ b/old_code_ci3/views/dashboard/jkhospital.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/khrc_opd_parcha.php b/old_code_ci3/views/dashboard/khrc_opd_parcha.php new file mode 100644 index 0000000..b11697a --- /dev/null +++ b/old_code_ci3/views/dashboard/khrc_opd_parcha.php @@ -0,0 +1,82 @@ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + diff --git a/old_code_ci3/views/dashboard/khrc_opd_parcha_drManmeet.php b/old_code_ci3/views/dashboard/khrc_opd_parcha_drManmeet.php new file mode 100644 index 0000000..f88d88f --- /dev/null +++ b/old_code_ci3/views/dashboard/khrc_opd_parcha_drManmeet.php @@ -0,0 +1,82 @@ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + diff --git a/old_code_ci3/views/dashboard/khrc_opd_parcha_drRahul.php b/old_code_ci3/views/dashboard/khrc_opd_parcha_drRahul.php new file mode 100644 index 0000000..14ea3d5 --- /dev/null +++ b/old_code_ci3/views/dashboard/khrc_opd_parcha_drRahul.php @@ -0,0 +1,82 @@ + + +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + diff --git a/old_code_ci3/views/dashboard/opd_appointment_panel.php b/old_code_ci3/views/dashboard/opd_appointment_panel.php new file mode 100644 index 0000000..87fa952 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_appointment_panel.php @@ -0,0 +1,36 @@ + +
+ +
+ +
+ +
+ +

Dr. p_fname ?>

+
Spec ?>
+
+ +
+ +
+
'; + } + } ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_blank_print_ssc.php b/old_code_ci3/views/dashboard/opd_blank_print_ssc.php new file mode 100644 index 0000000..6f66125 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_blank_print_ssc.php @@ -0,0 +1,50 @@ + + + + + + + + + +
+ + +

+



+ + Email : '.H_Email; + } + ?> +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ + + + diff --git a/old_code_ci3/views/dashboard/opd_display.php b/old_code_ci3/views/dashboard/opd_display.php new file mode 100644 index 0000000..0e76d59 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_display.php @@ -0,0 +1,166 @@ + + + + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+
+
+
+
+
+

Dr. B.C. Joshi

+
+
+ + + + + + + + +
queue_no?>p_code?>P_name?>
+
+
+
+
+
+
+

Dr. Paritosh Joshi

+
+
+ + + + + + + + +
queue_no?>p_code?>P_name?>
+
+
+
+
+
+ + diff --git a/old_code_ci3/views/dashboard/opd_invoice_print.php b/old_code_ci3/views/dashboard/opd_invoice_print.php new file mode 100644 index 0000000..4457972 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_invoice_print.php @@ -0,0 +1,44 @@ + + + + + + + + + +
+ + +

+

, Uttarakhand
+ '; + ?> +

+ +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print.php b/old_code_ci3/views/dashboard/opd_letter_head_print.php new file mode 100644 index 0000000..684e442 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print.php @@ -0,0 +1,45 @@ + + + + + + + + + +
+ + +

+

, Uttarakhand
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_agarwal_hospital.php b/old_code_ci3/views/dashboard/opd_letter_head_print_agarwal_hospital.php new file mode 100644 index 0000000..2ea9073 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_agarwal_hospital.php @@ -0,0 +1,44 @@ + + + + + + + + + +
+ + +

+

, Uttarakhand
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_bajaj_neuro.php b/old_code_ci3/views/dashboard/opd_letter_head_print_bajaj_neuro.php new file mode 100644 index 0000000..976546f --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_bajaj_neuro.php @@ -0,0 +1,61 @@ + + + +

+
+ +

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob. :
+ Add. : +
+ Sr No :
+ UHID :
+ OPD No. :
+ Date :
+
+ OPD Fee : +
+ Dr. Ajay Bajaj / Dr Vibhu Shankar
+ MBBS,MS,MCh.(Neuro Surgery)
+ Senior Consultant Neuro Surgery

+
+
diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_chamunda_hospital.php b/old_code_ci3/views/dashboard/opd_letter_head_print_chamunda_hospital.php new file mode 100644 index 0000000..6109d11 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_chamunda_hospital.php @@ -0,0 +1,44 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_khrc.php b/old_code_ci3/views/dashboard/opd_letter_head_print_khrc.php new file mode 100644 index 0000000..c354f39 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_khrc.php @@ -0,0 +1,51 @@ + + + + + + + + + +
+ + +

+



+ + Email : '.H_Email; + } + ?> +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Not Valid for Medico legal Purpose / Print Time :

+
+ +

BP : __________ Pulse Rate : __________ SPO2 : __________ Ht : __________ Wt.: __________ RBS : __________

diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_mehrotra_hospital.php b/old_code_ci3/views/dashboard/opd_letter_head_print_mehrotra_hospital.php new file mode 100644 index 0000000..6109d11 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_mehrotra_hospital.php @@ -0,0 +1,44 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant.php new file mode 100644 index 0000000..43f4459 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant.php @@ -0,0 +1,55 @@ + + + + + + + + + +
+ + +

+



+ + Email : '.H_Email; + } + ?> +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +

+

Appointment Number : 8171010848

+
+
+
+ +

Review after _______________ days

+


+

Appointment Number : 8171010848 / Not Valid for Medico legal Purpose / Print Time :

+
+ +

BP : __________ Pulse Rate : __________ SPO2 : __________ Ht : __________ Wt.: __________ RBS : __________

diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam.php new file mode 100644 index 0000000..9e8d642 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam.php @@ -0,0 +1,164 @@ + + + + + + + + + +
+ + +

+

OBSTETRICS, GYNECOLOGY AND FERTILITY CENTRE

+
+ +
+ + + + + +
+

Address :Near KVM School, +
Mukhani Road, Haldwani, Uttarakhand

+

+ Phone No. :05946-365929
+ Email :radianthospitalhaldwani@gmail.com
+

+ +
+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+ + + + + + +
+ OPD Timing : Morning 11.30am to 3.00pm | Evening 4.30pm to 7.00pm | Sunday:By Appointment only | Phone No.:05946-365929, 9760644918 | Valid for 7 days +
+
+ +
+ +
+ +
+ + + + + + + +
+ BP : + + PR : + + Weight : + + LMP : +
+ +
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_1.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_1.php new file mode 100644 index 0000000..f0d809b --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_1.php @@ -0,0 +1,22 @@ + + + + + +

Not Valid for Medico legal Purpose / Print Time :

+
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_21052025.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_21052025.php new file mode 100644 index 0000000..574bd93 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpoonam_21052025.php @@ -0,0 +1,168 @@ + + + + + + + + + +
+ + +

RADIANT FERTILITY AND IVF CENTRE

+

A Unit of Radiant Hospital

+
+ +
+ + + + + +
+

Address :Near KVM School, +
Mukhani Road, +
Haldwani, Uttarakhand

+

+ Phone No. :+91 8979565771
+ Email :radianthospitalhaldwani@gmail.com
+

+ +
+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+ + + + + + +
+ OPD Timing : 11am to 05pm | Sunday : By Appointment only | Phone No. : 8171010848 | Valid for 7 days + + Not Valid for Medico legal Purpose +
+
+ +
+ +
+ +
+ + + + + + + +
+ BP : + + PR : + + Weight : + + LMP : +
+ +
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpuneet.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpuneet.php new file mode 100644 index 0000000..f118265 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drpuneet.php @@ -0,0 +1,164 @@ + + + + + + + + + +
+ + +
+ NEURO-BRAIN & SPINE CENTRE +
+ +
+ + + + + +
+


Address :
Near KVM School, + Mukhani Road, Haldwani +

+

+ Phone No. :7817844055, 9068429666, 05946-365929
+

+
+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+ + + + + + +
+ OPD Timing : 10AM to 5PM | Sunday OPD by Appointment only + + Not Valid for Medico legal Purpose +
+
+ +
+
+ +
+ +
+ + +
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk blank.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk blank.php new file mode 100644 index 0000000..fc607ca --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk blank.php @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk.php b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk.php new file mode 100644 index 0000000..7505c08 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_radiant_drvk.php @@ -0,0 +1,54 @@ + + + + + + + + + +
+ + +

+



+ + Email : '.H_Email; + } + ?> +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+ +

FOR APPOINTMENT
MOB - 7466985557

+
+
+
+ +

Not Valid for Medico legal Purpose / Print Time :

+
+ +

BP : __________ Pulse Rate : __________ SPO2 : __________ Ht : __________ Wt.: __________ RBS : __________

diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_ssc.php b/old_code_ci3/views/dashboard/opd_letter_head_print_ssc.php new file mode 100644 index 0000000..60d7d9a --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_ssc.php @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/old_code_ci3/views/dashboard/opd_letter_head_print_vedanta_hospital.php b/old_code_ci3/views/dashboard/opd_letter_head_print_vedanta_hospital.php new file mode 100644 index 0000000..6109d11 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_print_vedanta_hospital.php @@ -0,0 +1,44 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_singhal_drparul.php b/old_code_ci3/views/dashboard/opd_letter_head_singhal_drparul.php new file mode 100644 index 0000000..2b7e06c --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_singhal_drparul.php @@ -0,0 +1,59 @@ + + + + + + + + + +
+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+ +

SINGHAL CLINIC +
ENDO-NEURO CENTER +

+
+

+ Formerly at:
+ MAMC & LNJP Hospital, Delhi
+ UCMS & GTB Hospital, Delhi
+ AIIMS New Delhi
+ AIIMS Jodhpur +

+
+
+ +
+

Singhal Clinic & Endo-Neuro Center

+

Cheema Chauraha, Behind Spectrum Mall, Ramnagar Road, Kashipur - 244713
+ Contact : 9045424198,05947-274865, 7017369216
+ Monday to Friday : 11 A.M. - 3 P.M. And 6 P.M. - 8 P.M.
+ Saturday : 11 A.M. - 3 P.M.
+ Saturday evening & Sunday closed
+ website : www.singhalclinickashipur.in +

+
+ diff --git a/old_code_ci3/views/dashboard/opd_letter_head_singhal_drrahul.php b/old_code_ci3/views/dashboard/opd_letter_head_singhal_drrahul.php new file mode 100644 index 0000000..4686a72 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_letter_head_singhal_drrahul.php @@ -0,0 +1,50 @@ + + + + + + + + + + +
+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+ +

SINGHAL CLINIC +
ENDO-NEURO CENTER +

+
+

+ Formerly at:
+ GB Pant Hospital, Delhi
+ IHBAS Hospital, Delhi
+ AIIMS, New Delhi +

+
+
+ +
+

Singhal Clinic & Endo-Neuro Center

+

Cheema Chauraha, Behind Spectrum Mall, Ramnagar Road, Kashipur - 244713
+ Contact : 05947-274865, 7017369216 / Time : 6 P.M. - 8 P.M. Monday to Friday
+ website : www.singhalclinickashipur.in +

+
+ diff --git a/old_code_ci3/views/dashboard/opd_line_list.php b/old_code_ci3/views/dashboard/opd_line_list.php new file mode 100644 index 0000000..b697d04 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_line_list.php @@ -0,0 +1,48 @@ +'form','class'=>'form1')); ?> +
+

+ Online OPD Booked : Date +

+
+ +
+
+
+
+

Online OPD Book List

+
+
+ + + + + + + + + + + + + +
+ p_code?> + + p_fname?> + + opd_code?> + + opd_book_date?> + + apointment_date?> + + Dr. doc_name?> + + doc_spec?> + + Print OPD +
+
+
+
+
diff --git a/old_code_ci3/views/dashboard/opd_list_doc.php b/old_code_ci3/views/dashboard/opd_list_doc.php new file mode 100644 index 0000000..4294774 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_list_doc.php @@ -0,0 +1,194 @@ + 'form', 'class' => 'form1')); ?> +
+
+
+

Dr. p_fname ?> + Spec ?> +

+
+
+ +
+ +
+
+
+
+ +
+
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_medical_bill.php b/old_code_ci3/views/dashboard/opd_medical_bill.php new file mode 100644 index 0000000..3e4108e --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_medical_bill.php @@ -0,0 +1,40 @@ +
+id + ORDER BY t.id "; + $query = $this->db->query($sql); + $medical_store_item= $query->result(); +?> +
+
+

inv_med_code?> Date : inv_date?>

+
+ +
+ + + + + + + + +
+ item_Name?> + + formulation?> + + qty?> +
+
+ +
+ +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_parcha_ent_care.php b/old_code_ci3/views/dashboard/opd_parcha_ent_care.php new file mode 100644 index 0000000..917425d --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_parcha_ent_care.php @@ -0,0 +1,85 @@ + + +
+ +
+
+ +
+
+ +
+
+ PID:
+ Ph.:
+ FEE:
+ Visit:
+
+ Pr.T: +
+ + diff --git a/old_code_ci3/views/dashboard/opd_parcha_radiant.php b/old_code_ci3/views/dashboard/opd_parcha_radiant.php new file mode 100644 index 0000000..00ca00a --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_parcha_radiant.php @@ -0,0 +1,85 @@ + + +
+ +
+
+ +
+
+ +
+
+ PID:
+ Ph.:
+ FEE:
+ Visit:
+
+ Pr.T: +
+ + diff --git a/old_code_ci3/views/dashboard/opd_prescribed_advice.php b/old_code_ci3/views/dashboard/opd_prescribed_advice.php new file mode 100644 index 0000000..ce3183d --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescribed_advice.php @@ -0,0 +1,13 @@ +0){ + echo ''; + foreach($opd_patient_advice as $row) + { + echo ''; + echo ''; + echo ''; + } + + echo '
'.$row->advice_txt.'
'.$row->advice_txt_hindi.'
Del
'; + } +?> \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescribed_dose.php b/old_code_ci3/views/dashboard/opd_prescribed_dose.php new file mode 100644 index 0000000..b958eb8 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescribed_dose.php @@ -0,0 +1,563 @@ +'form','class'=>'form2','autocomplete'=>'on')); ?> +
+
+
+
+

Prescribed/ Dosage

+
+
+
+ + + + +
+
+
+
+
+
+ + 0) + { echo ' + + + + + + + '; } ?> + + + + + + + + + + +
TypePrescribedDosageRemarks
med_type?>med_name?>dose_shed?>dose_when?> + dose_frequency?> dose_where?> + qty?> no_of_days?> remark?> + + + +
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ + + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+
+

+ + Rx Group +

+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+

+ + Pre define Advise + +

+
+
+
+ 0){ + echo ''; + foreach($opd_advise as $row) + { + echo ''; + echo ''; + echo ''; + } + echo '
'.$row->advice.'+Add
'; + } + ?> +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_med_list.php b/old_code_ci3/views/dashboard/opd_prescription_med_list.php new file mode 100644 index 0000000..f7a58f2 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_med_list.php @@ -0,0 +1,29 @@ +
+ +0) + { echo ' + + + + + + + '; } ?> + + + + + + + + + + +
TypePrescribedDosageRemarks
med_type?>med_name?>dose_shed?>dose_when?> + dose_frequency?> dose_where?> + qty?>no_of_days?>remark?> + + + +
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_print.php b/old_code_ci3/views/dashboard/opd_prescription_print.php new file mode 100644 index 0000000..20543ca --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_print.php @@ -0,0 +1,87 @@ + + + + + + + + + +
+

+ +

+
+

+

, Uttarakhand
+ '; + ?> +

+
+ + + + + + +
Page : {PAGENO}/{nbpg}
+
+ + + + + +
+

Rx

+ '; + echo $Complaint; + echo '
'; + echo $diagnosis; + echo '
'; + echo $investigation; + echo '
'; + echo $medical; + echo '
'; + echo $doctor; + echo '
'; + + ?> +
diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_edit.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_edit.php new file mode 100644 index 0000000..3034950 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_edit.php @@ -0,0 +1,127 @@ +
+
+

Medicine

+
+
+
+
+
+
+ + + + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_panel.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_panel.php new file mode 100644 index 0000000..f6d84c6 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/opd_medicine_panel.php @@ -0,0 +1,175 @@ + 'form', 'class' => 'form2')); ?> +
+
+
+

Medicine List

+
+
+
+
+ + 0) { + echo ' + + + + + + '; + } ?> + + + + + + + + + +
TypePrescribedDosageRemarks
formulation ?>item_name ?>dose_shed ?>dose_when ?> + dose_frequency ?> dose_where ?> + qty ?> no_of_days ?> remark ?> + +
+
+
+
+ +
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_list.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_list.php new file mode 100644 index 0000000..026e5ea --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_list.php @@ -0,0 +1,31 @@ + +id % count($Color)) ; + ?> +
+ + + +
+ diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine.php new file mode 100644 index 0000000..3d2ca5e --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine.php @@ -0,0 +1,303 @@ +'form','class'=>'form2')); ?> +
+
+

Prescribed/ Dosage : rx_group_name?>

+
+
+
+
+ + 0) + { echo ' + + + + + + '; } ?> + + + + + + + + + +
TypePrescribedDosageRemarks
+ med_type?>med_name?>dose_shed?>dose_when?> + dose_frequency?> dose_where?> + qty?> no_of_days?> remark?> + + +
+
+
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine_list.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine_list.php new file mode 100644 index 0000000..5c6cae8 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_medicine_list.php @@ -0,0 +1,26 @@ +
+ + 0) + { echo ' + + + + + + '; } ?> + + + + + + + + + +
TypePrescribedDosageRemarks
med_type?>med_name?>dose_shed?>dose_when?> + dose_frequency?> dose_where?> + qty?> no_of_days?> remark?> + + +
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_new.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_new.php new file mode 100644 index 0000000..ba16e88 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_new.php @@ -0,0 +1,60 @@ +'form','class'=>'form2')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_patient.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_patient.php new file mode 100644 index 0000000..8a0a2f5 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_patient.php @@ -0,0 +1,12 @@ +id % count($Color)) ; + ?> + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_save.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_save.php new file mode 100644 index 0000000..f160c84 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_save.php @@ -0,0 +1,34 @@ +
+
+
+ + +
+
+
+
+
+ + + +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_show.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_show.php new file mode 100644 index 0000000..27f8f17 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_group_show.php @@ -0,0 +1,80 @@ +'form','class'=>'form2')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + + + +
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_patient_old_medicine.php b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_patient_old_medicine.php new file mode 100644 index 0000000..48d7542 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prescription_suggest_panel/rx_patient_old_medicine.php @@ -0,0 +1,163 @@ +opd_id"; + $query = $this->db->query($sql); + $opd_data= $query->result(); + + ?> +
+ OPD Date :'.MysqlDate_to_str($row->apointment_date).'
'; + + if(count($opd_data)>0) + { + + $sql="SELECT pt.* ,d.dose_show_sign AS dose_shed,dw.dose_sign_desc AS dose_when, + df.dose_sign_desc AS dose_frequency,d_on.dose_sign_desc AS dose_where + FROM (((opd_prescrption_prescribed pt + LEFT JOIN opd_dose_shed d ON pt.dosage=d.dose_shed_id) + LEFT JOIN opd_dose_when dw ON pt.dosage_when=dw.dose_when_id) + LEFT JOIN opd_dose_frequency df ON pt.dosage_freq=df.dose_freq_id) + LEFT JOIN opd_dose_where d_on ON pt.dosage_where=d_on.dose_where_id + where pt.opd_pre_id=".$opd_data[0]->id; + $query = $this->db->query($sql); + $opd_prescribed= $query->result(); + + + if($opd_data[0]->bp!='') + { + $opd_details_str.= 'BP : '.$opd_data[0]->bp.' '; + } + + if($opd_data[0]->diastolic!='') + { + $opd_details_str.= 'Diastolic : '.$opd_data[0]->diastolic.' '; + } + + if($opd_data[0]->pulse!='') + { + $opd_details_str.= 'Pulse : '.$opd_data[0]->pulse.' '; + } + + if($opd_data[0]->temp!='') + { + $opd_details_str.= 'Temp. : '.$opd_data[0]->temp.' '; + } + + $Complaint=""; + + if($opd_data[0]->complaints!='') + { + $Complaint="
Complaint : "; + $Complaint.=''.$opd_data[0]->complaints.''; + } + + $diagnosis=""; + + if($opd_data[0]->diagnosis!='') + { + $diagnosis="
Diagnosis : "; + $diagnosis.=' '.$opd_data[0]->diagnosis.''; + + } + + $investigation=""; + if($opd_data[0]->investigation!='') + { + $investigation="
Investigation Advised : "; + $investigation.=' '.$opd_data[0]->investigation.''; + } + + $opd_details_str.=$Complaint.$diagnosis.$investigation; + + //New Start + + if(count($opd_prescribed)>0) + { + $medical=""; + $sr_no=1; + $medical.= ' + + + + + + '; + + foreach($opd_prescribed as $row_prescribed) + { + $medical_extend=""; + + $medical.=' + + + '; + if(strlen($row_prescribed->remark)>0) + { + $medical_extend=' + + '; + } + $sr_no=$sr_no+1; + } + $medical.="
Rx : Add All
PrescribedDose
'.$sr_no.'-'.$row_prescribed->med_type.' '.$row_prescribed->med_name.''.$row_prescribed->dose_shed.'
'.$row_prescribed->remark.'
"; + $opd_details_str.=$medical; + } + + $advice=""; + + if($opd_data[0]->advice!='') + { + $advice="
Advice : "; + $advice.=''.$opd_data[0]->advice.''; + } + + $opd_details_str.=$advice; + + $next_visit=""; + + if($opd_data[0]->next_visit!='') + { + $next_visit="
Next Visit : "; + $next_visit.=''.$opd_data[0]->next_visit.''; + } + + $opd_details_str.=$next_visit; + + $refer_to=""; + + if($opd_data[0]->refer_to!='') + { + $refer_to="
Refer To : "; + $refer_to.=''.$opd_data[0]->refer_to.''; + } + + $opd_details_str.=$refer_to; + //New End + } + ?> + +

OPD By :Dr. doc_name?>

+

+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_prev.php b/old_code_ci3/views/dashboard/opd_prev.php new file mode 100644 index 0000000..048ca2b --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_prev.php @@ -0,0 +1,93 @@ +
+
+
+

Preview

+
+
+
+
+
+ +
+
+
+
+
+
+
+
+

Complaint

+
+
+ +
+
+
+
+
+
+
+
+

Investigation

+
+
+ +
+
+
+
+
+
+
+
+

History

+
+
+ +
+
+
+
+
+
+
+
+
+
+

Diagnosis

+
+
+ +
+
+
+
+
+
+ +
+
+

Pharmacological Treatment

+
+
+ +
+
+
+
+
+
+
+
+

Follow Up

+
+
+ +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha.php b/old_code_ci3/views/dashboard/opd_print_parcha.php new file mode 100644 index 0000000..258cc7b --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_2 copy.php b/old_code_ci3/views/dashboard/opd_print_parcha_2 copy.php new file mode 100644 index 0000000..4e90ce4 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_2 copy.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :
P.T.O.

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_2.php b/old_code_ci3/views/dashboard/opd_print_parcha_2.php new file mode 100644 index 0000000..4e90ce4 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_2.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :
P.T.O.

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_3.php b/old_code_ci3/views/dashboard/opd_print_parcha_3.php new file mode 100644 index 0000000..375c3b3 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_3.php @@ -0,0 +1,21 @@ + + + +

CIN No. U74999UR2018PTC008810 [Chaumu Healthcare Private Limited]

+
+ +

Print Time :
P.T.O.

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_4.php b/old_code_ci3/views/dashboard/opd_print_parcha_4.php new file mode 100644 index 0000000..44c92ae --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_4.php @@ -0,0 +1,20 @@ + + + +

+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_DrAseemMehrotra.php b/old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_DrAseemMehrotra.php new file mode 100644 index 0000000..8fca07d --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_DrAseemMehrotra.php @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_hospital.php b/old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_hospital.php new file mode 100644 index 0000000..b746f0f --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_Mehrotra_hospital.php @@ -0,0 +1,20 @@ + + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp.php b/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp.php new file mode 100644 index 0000000..c9acdbd --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_new.php b/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_new.php new file mode 100644 index 0000000..6caa127 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_new.php @@ -0,0 +1,93 @@ + + +
+ +
+
+ +
+ +
+ +
+
+ Sr.No. :
OPD Fee :
+
OPD ID :
UHID : +
+
+ +
diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_ss.php b/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_ss.php new file mode 100644 index 0000000..c4e8ec2 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_agarwal_hospital_ksp_ss.php @@ -0,0 +1,97 @@ + + +
+ +
+
+ +
+ +
+ +
+
+ Sr.No. :
OPD Fee :
+
OPD ID :
UHID :
+ +
+
+ +
diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_ah.php b/old_code_ci3/views/dashboard/opd_print_parcha_ah.php new file mode 100644 index 0000000..34da663 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_ah.php @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_bajaj.php b/old_code_ci3/views/dashboard/opd_print_parcha_bajaj.php new file mode 100644 index 0000000..85dc78f --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_bajaj.php @@ -0,0 +1,35 @@ + + + +

+
+ +

+
+
+ +
diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_bajaj_blank.php b/old_code_ci3/views/dashboard/opd_print_parcha_bajaj_blank.php new file mode 100644 index 0000000..6733d88 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_bajaj_blank.php @@ -0,0 +1,35 @@ + + + +

+
+ +

+
+
+ +
diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_chamunda_hospital_ksp.php b/old_code_ci3/views/dashboard/opd_print_parcha_chamunda_hospital_ksp.php new file mode 100644 index 0000000..2cfdf9e --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_chamunda_hospital_ksp.php @@ -0,0 +1,47 @@ + + + +

+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+ +
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_drAnkurChauhan.php b/old_code_ci3/views/dashboard/opd_print_parcha_drAnkurChauhan.php new file mode 100644 index 0000000..45af032 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_drAnkurChauhan.php @@ -0,0 +1,97 @@ + + +
+ +
+
+ +
+
+ OPD ID : / UHID : +
+
+ +
+
+ Sr.No. :
OPD Fee :
+
+
+ +
+ + diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_radiant.php b/old_code_ci3/views/dashboard/opd_print_parcha_radiant.php new file mode 100644 index 0000000..0538295 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_radiant.php @@ -0,0 +1,22 @@ + + + +

+
+ +

Review after _______________ days / Appointment Number : 8171010848

+

Print Time :

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_radiant_drpoonam.php b/old_code_ci3/views/dashboard/opd_print_parcha_radiant_drpoonam.php new file mode 100644 index 0000000..8514eb3 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_radiant_drpoonam.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_singhal.php b/old_code_ci3/views/dashboard/opd_print_parcha_singhal.php new file mode 100644 index 0000000..2532c6e --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_singhal.php @@ -0,0 +1,21 @@ + + + +

+
+ +

Print Time :

+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_print_parcha_vedanta_hospital_ksp.php b/old_code_ci3/views/dashboard/opd_print_parcha_vedanta_hospital_ksp.php new file mode 100644 index 0000000..2cfdf9e --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_print_parcha_vedanta_hospital_ksp.php @@ -0,0 +1,47 @@ + + + +

+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+ +
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_queue_status.php b/old_code_ci3/views/dashboard/opd_queue_status.php new file mode 100644 index 0000000..1ac0112 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_queue_status.php @@ -0,0 +1,41 @@ + +
+
+
+
+
+

Dr. p_fname?>

+

Spec?>

+ +

Refresh

+
+ +
+
+
+
+
+ +
+
diff --git a/old_code_ci3/views/dashboard/opd_queue_status_tab_0.php b/old_code_ci3/views/dashboard/opd_queue_status_tab_0.php new file mode 100644 index 0000000..834c2d0 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_queue_status_tab_0.php @@ -0,0 +1,50 @@ +
+
+

On Booking List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Patient NameOPD No.Booking No.UHIDOPD ID.OPD TypeAction
P_name?>opd_id?>opd_no?>p_code?>opd_code?>Paymode?> + payment_status==1) { ?> + + + + Go For Payment

+ +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_queue_status_tab_1.php b/old_code_ci3/views/dashboard/opd_queue_status_tab_1.php new file mode 100644 index 0000000..1dc0445 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_queue_status_tab_1.php @@ -0,0 +1,71 @@ +
+
+

On Waiting List

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD No.Current PatientQ No.UHIDOPD TypeAction
opd_id?> + P_name?> { p_rname?> } + queue_no?>p_code?>opd_fee_desc?>/ Amt.:opd_fee_amount?> + + + + + +
OPD No.Current PatientQueue No.UHIDOPD TypeAction
+
+
+ diff --git a/old_code_ci3/views/dashboard/opd_queue_status_tab_2.php b/old_code_ci3/views/dashboard/opd_queue_status_tab_2.php new file mode 100644 index 0000000..3368e0c --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_queue_status_tab_2.php @@ -0,0 +1,38 @@ +
+
+

Visited List

+
+ +
+ + + + + + + + + + + + +
opd_id?>opd_code?>P_name?> { p_rname?> }queue_no?>p_code?>opd_fee_desc?>/ Amt.:opd_fee_amount?> + + + +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_queue_status_tab_3.php b/old_code_ci3/views/dashboard/opd_queue_status_tab_3.php new file mode 100644 index 0000000..6c03a43 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_queue_status_tab_3.php @@ -0,0 +1,37 @@ +
+
+

OPD Cancellation List

+
+ +
+ + + + + + + + + + + + +
opd_id?>opd_code?>P_name?> { p_rname?> }queue_no?>p_code?>opd_fee_desc?>/ Amt.:opd_fee_amount?> + + +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_queue_status_total.php b/old_code_ci3/views/dashboard/opd_queue_status_total.php new file mode 100644 index 0000000..ede6ad8 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_queue_status_total.php @@ -0,0 +1,5 @@ +
On Waiting :count_wait?>
+
No. of Visited :count_visit?>
+
Canceled :count_cancel?>
+
Total : No_opd?>
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/opd_scan.php b/old_code_ci3/views/dashboard/opd_scan.php new file mode 100644 index 0000000..1d70208 --- /dev/null +++ b/old_code_ci3/views/dashboard/opd_scan.php @@ -0,0 +1,26 @@ +
+
+
+
Upload
+ + + +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/patient_glucose_data.php b/old_code_ci3/views/dashboard/patient_glucose_data.php new file mode 100644 index 0000000..9c0e555 --- /dev/null +++ b/old_code_ci3/views/dashboard/patient_glucose_data.php @@ -0,0 +1,222 @@ +
+
+
+ +
+
+

Glucose Chart

+
+ + +
+
+
+
+ +
+
+ +
+
+
+ +
+
+

Glucose Value

+
+
+ 'form','class'=>'form_g')); ?> +
+
+
+ +
+
+ +
+ +
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + +
DateFast GlucoseAfter Food GlucoseRandom GlucoseRemove
test_date?>r_sugar?>f_sugar?>a_sugar?>
+
+
+ +
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/patient_investigation.php b/old_code_ci3/views/dashboard/patient_investigation.php new file mode 100644 index 0000000..53651b9 --- /dev/null +++ b/old_code_ci3/views/dashboard/patient_investigation.php @@ -0,0 +1,122 @@ +
+
+
+
+
+

Investigation Value

+
+
+ 'form','class'=>'form_investigation')); ?> +
+
+
+ +
+
+ +
+ +
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+
+
+ + +
+ +
+
+
+
+
+

Investigation Value

+
+
+
+ + + + + + + + + + + + + + + + + + + +
DateInvestigationValueNormal RangeResultRemove
date_investigation?>investigation_name?>result?>normal_range?>result_text?>
+
+
+
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/patient_remark.php b/old_code_ci3/views/dashboard/patient_remark.php new file mode 100644 index 0000000..0aa4e78 --- /dev/null +++ b/old_code_ci3/views/dashboard/patient_remark.php @@ -0,0 +1,158 @@ +

+
+
+
+
+
+

Patient Personal Remark

+
+ +
+ +

Write By insert_by?> + Date : : ins_time?>

+

remark) ?>

+
+ + +
+ +
+
+
+
+
+
+
+
+

Remark

+
+ +
+
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+

Assign Tag

+
+ +
+
+
+ + '; + echo '
'.$row->tag_name.'
'.$row->assign_by.'
'; + echo ' '; + echo ' '; + echo '
'; + } + ?> +
+
+
+ + +
+
+
+
+ diff --git a/old_code_ci3/views/dashboard/person_profile_photo_from_doctor.php b/old_code_ci3/views/dashboard/person_profile_photo_from_doctor.php new file mode 100644 index 0000000..2ce3058 --- /dev/null +++ b/old_code_ci3/views/dashboard/person_profile_photo_from_doctor.php @@ -0,0 +1,99 @@ +
+

+ Profile Picture : p_fname; ?> + Scan +

+ +
+
+
+
+
+
+
+
+ Scan +
+
+
+
+
+
+
+ + +
+
+
Your captured image will appear here...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_group.php b/old_code_ci3/views/dashboard/rx_group.php new file mode 100644 index 0000000..c1fff91 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_group.php @@ -0,0 +1,62 @@ +
+

+ Rx-Group +

+ +
+
+
+
+
+
+ +
+

Rx-Group List List

+
+
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
Rx-Group NameAction
rx_group_name ?> + +
Rx-Group NameAction
+ +
+ +
+
+
+ +
+
+ +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_group_list.php b/old_code_ci3/views/dashboard/rx_group_list.php new file mode 100644 index 0000000..3a04733 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_group_list.php @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + +
Rx-Group NameAction
rx_group_name ?> + +
Rx-Group NameAction
+ \ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_chamunda_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_chamunda_plain_paper.php new file mode 100644 index 0000000..4228b70 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_chamunda_plain_paper.php @@ -0,0 +1,172 @@ + + + + + + + + + +
+ + +

+

An ISO Certified 9001 : 2015
+ NABH (Fully Accredited) Hospital +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ '; + if(strlen($vital_content)>0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($painscale)>0){ + echo $painscale; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + if(strlen($morbidities)>0){ + echo 'Co-Morbidities : '.$morbidities; + echo '
'; + } + + if(strlen($Addiction)>0){ + echo 'Addiction : '.$Addiction; + echo '
'; + } + + if(strlen($Complication)>0){ + echo 'Complication : '.$Complication; + echo '
'; + } + + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_chamunda_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_chamunda_pre_print_letter_head_format.php new file mode 100644 index 0000000..ea2b366 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_chamunda_pre_print_letter_head_format.php @@ -0,0 +1,120 @@ + + + +

+
+ +

Print Time :

+
+
+ '; + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($painscale)>0){ + echo $painscale; + echo '
'; + } + + if(strlen($vital_content)>0){ + echo $vital_content; + echo '
'; + } + + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + if(strlen($morbidities)>0){ + echo 'Co-Morbidities : '.$morbidities; + echo '
'; + } + + if(strlen($Addiction)>0){ + echo 'Addiction : '.$Addiction; + echo '
'; + } + + if(strlen($Complication)>0){ + echo 'Complication : '.$Complication; + echo '
'; + } + + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_chamunda_rx_blank_letter_head.php b/old_code_ci3/views/dashboard/rx_print_chamunda_rx_blank_letter_head.php new file mode 100644 index 0000000..ae5bac8 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_chamunda_rx_blank_letter_head.php @@ -0,0 +1,150 @@ + + + +

+
+ +

Print Time :

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ + +
+ '; + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($vital_content)>0){ + echo $vital_content; + echo '
'; + } + + if(strlen($painscale)>0){ + echo $painscale; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + if(strlen($morbidities)>0){ + echo 'Co-Morbidities : '.$morbidities; + echo '
'; + } + + if(strlen($Addiction)>0){ + echo 'Addiction : '.$Addiction; + echo '
'; + } + + if(strlen($Complication)>0){ + echo 'Complication : '.$Complication; + echo '
'; + } + + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_devbhumi_plain.php b/old_code_ci3/views/dashboard/rx_print_devbhumi_plain.php new file mode 100644 index 0000000..7a9cd00 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_devbhumi_plain.php @@ -0,0 +1,144 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead - Copy.php b/old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead - Copy.php new file mode 100644 index 0000000..a9da963 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead - Copy.php @@ -0,0 +1,65 @@ + + + +

+
+ +

Print Time :

+
+
+ '; + echo $Complaint; + echo '
'; + echo $Provisional_diagnosis; + echo '
'; + echo $diagnosis; + echo '
'; + echo $medical; + echo '
'; + echo $investigation; + echo '
'; + echo $advice; + echo '
'; + echo $next_visit; + echo '
'; + echo $refer_to; + echo '
'; + echo $doctor; + echo '
'; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead.php b/old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead.php new file mode 100644 index 0000000..61a3ab6 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_drJoshiclinic_letterhead.php @@ -0,0 +1,75 @@ + + + +

+
+ +

+
+
+ '; + echo $Complaint; + echo '
'; + echo $Finding_Examinations; + echo '
'; + echo $Provisional_diagnosis; + echo '
'; + echo $diagnosis; + echo '
'; + echo $medical; + echo '
'; + echo $investigation; + echo '
'; + echo $advice; + echo '
'; + echo $next_visit; + echo '
'; + echo $refer_to; + echo '
'; + echo '
'; + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_plain_paper.php new file mode 100644 index 0000000..8d3d290 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_plain_paper.php @@ -0,0 +1,162 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Provisional_diagnosis)>0){ + echo $Provisional_diagnosis; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + //echo $doctor; + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_pre_print_letter_head_format.php new file mode 100644 index 0000000..c327d2e --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_pre_print_letter_head_format.php @@ -0,0 +1,114 @@ + + + +

+
+ +

+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Provisional_diagnosis)>0){ + echo $Provisional_diagnosis; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + //echo $doctor; +echo '
'; + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_rx_blank_letter_head.php b/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_rx_blank_letter_head.php new file mode 100644 index 0000000..77e606b --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_drjoshiclinic_rx_blank_letter_head.php @@ -0,0 +1,143 @@ + + + +

+
+ +

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Provisional_diagnosis)>0){ + echo $Provisional_diagnosis; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + //echo $doctor; +echo '
'; + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_letterhead_drbcjoshi.php b/old_code_ci3/views/dashboard/rx_print_letterhead_drbcjoshi.php new file mode 100644 index 0000000..1278fa5 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_letterhead_drbcjoshi.php @@ -0,0 +1,102 @@ + + + +

+
+ +

Print Time :

+
+ +
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($Provisional_diagnosis)>0){ + echo $Provisional_diagnosis; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + echo $doctor; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_letterhead_singhal.php b/old_code_ci3/views/dashboard/rx_print_letterhead_singhal.php new file mode 100644 index 0000000..65038bc --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_letterhead_singhal.php @@ -0,0 +1,64 @@ + + + +

+
+ +

Print Time :

+
+ +
+ '; + echo $Complaint; + echo $diagnosis; + echo '
'; + echo $medical; + echo '
'; + echo $investigation; + echo '
'; + echo $advice; + echo '
'; + echo $next_visit; + echo '
'; + echo $refer_to; + echo '
'; + echo $doctor; + echo '
'; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_blank_letter_head.php b/old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_blank_letter_head.php new file mode 100644 index 0000000..44480e0 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_blank_letter_head.php @@ -0,0 +1,124 @@ + + + +

+
+ + +
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ + +
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_pre_print_letter_head_format.php new file mode 100644 index 0000000..034d74b --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_mehrotra_aseem_pre_print_letter_head_format.php @@ -0,0 +1,98 @@ + + + +

+
+ + +
+ +
+ + +
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_mehrotra_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_mehrotra_plain_paper.php new file mode 100644 index 0000000..7a9cd00 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_mehrotra_plain_paper.php @@ -0,0 +1,144 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_mehrotra_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_mehrotra_pre_print_letter_head_format.php new file mode 100644 index 0000000..eb9a851 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_mehrotra_pre_print_letter_head_format.php @@ -0,0 +1,94 @@ + + + +

+
+ +

Print Time :

+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_mehrotra_rx_blank_letter_head..php b/old_code_ci3/views/dashboard/rx_print_mehrotra_rx_blank_letter_head..php new file mode 100644 index 0000000..3f803d0 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_mehrotra_rx_blank_letter_head..php @@ -0,0 +1,124 @@ + + + +

+
+ +

Print Time :

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+ + +
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_sahara_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_sahara_plain_paper.php new file mode 100644 index 0000000..d4bca80 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_sahara_plain_paper.php @@ -0,0 +1,90 @@ + + + + + + + + + +
+ + +

+ +

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
diff --git a/old_code_ci3/views/dashboard/rx_print_singhal_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_singhal_plain_paper.php new file mode 100644 index 0000000..bcb0941 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_singhal_plain_paper.php @@ -0,0 +1,144 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + echo $doctor; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_singhal_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_singhal_pre_print_letter_head_format.php new file mode 100644 index 0000000..370f9cd --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_singhal_pre_print_letter_head_format.php @@ -0,0 +1,94 @@ + + + +

+
+ +

Print Time :

+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + echo $doctor; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_singhal_rx_blank_letter_head.php b/old_code_ci3/views/dashboard/rx_print_singhal_rx_blank_letter_head.php new file mode 100644 index 0000000..d6dc329 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_singhal_rx_blank_letter_head.php @@ -0,0 +1,124 @@ + + + +

+
+ +

Print Time :

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+ + +
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + echo $doctor; + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_svh_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_svh_plain_paper.php new file mode 100644 index 0000000..6eb400d --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_svh_plain_paper.php @@ -0,0 +1,152 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ '; + if(strlen($vital_content)>0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_svh_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_svh_pre_print_letter_head_format.php new file mode 100644 index 0000000..3409f87 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_svh_pre_print_letter_head_format.php @@ -0,0 +1,104 @@ + + + +

+
+ +

Print Time :

+
+
+ 0){ + echo $Complaint; + echo '
'; + } + + if(strlen($vital_content)>0){ + echo $vital_content; + echo '
'; + } + + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_svh_rx_blank_letter_head.php b/old_code_ci3/views/dashboard/rx_print_svh_rx_blank_letter_head.php new file mode 100644 index 0000000..d5c6051 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_svh_rx_blank_letter_head.php @@ -0,0 +1,131 @@ + + + +

+
+ +

Print Time :

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+
+ 0){ + echo $Complaint; + echo '
'; + } + + if(strlen($vital_content)>0){ + echo $vital_content; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + echo '

'; + echo '
'; + echo '
'; + echo '
'; + echo ''.$doc_name.''; + echo '
'; + echo $doc_sign; + echo '

'; + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_vedanta_plain_paper.php b/old_code_ci3/views/dashboard/rx_print_vedanta_plain_paper.php new file mode 100644 index 0000000..7a9cd00 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_vedanta_plain_paper.php @@ -0,0 +1,144 @@ + + + + + + + + + +
+ + +

+

,
+ +

+

+ Dr. doc_name ?> +

+ doc_sign)?> +
+
+
+ +

Print Time :

+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_vedanta_pre_print_letter_head_format.php b/old_code_ci3/views/dashboard/rx_print_vedanta_pre_print_letter_head_format.php new file mode 100644 index 0000000..eb9a851 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_vedanta_pre_print_letter_head_format.php @@ -0,0 +1,94 @@ + + + +

+
+ +

Print Time :

+
+
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/rx_print_vedanta_rx_blank_letter_head.php b/old_code_ci3/views/dashboard/rx_print_vedanta_rx_blank_letter_head.php new file mode 100644 index 0000000..3f803d0 --- /dev/null +++ b/old_code_ci3/views/dashboard/rx_print_vedanta_rx_blank_letter_head.php @@ -0,0 +1,124 @@ + + + +

+
+ +

Print Time :

+
+
+ + + + + + +
+ Name :
+
+ Gender/Age :
+ Mob :'
+ Address :' +
+ UHID :
+ Sr No.:
+ OPD No.:
+
Date:
+
+ DEPARTMENT :
+ +
+ +
No. of Visit : + +
Book Time : +
+
+ + +
+ 0){ + echo $vital_content; + echo '
'; + } + + if(strlen($Complaint)>0){ + echo $Complaint; + echo '
'; + } + + if(strlen($diagnosis)>0){ + echo $diagnosis; + echo '
'; + } + + echo $medical; + echo '
'; + + if(strlen($investigation)>0){ + echo $investigation; + echo '
'; + } + + if(strlen($Finding_Examinations)>0){ + echo $Finding_Examinations; + echo '
'; + } + + if(strlen($Prescriber_Remarks)>0){ + echo $Prescriber_Remarks; + echo '
'; + } + + + if(strlen($advice)>0){ + echo $advice; + echo '
'; + } + + if(strlen($next_visit)>0){ + echo $next_visit; + echo '
'; + } + + if(strlen($refer_to)>0){ + echo $refer_to; + echo '
'; + } + echo '
'; + + + ?> +
\ No newline at end of file diff --git a/old_code_ci3/views/dashboard/samarpit_opd_parcha.php b/old_code_ci3/views/dashboard/samarpit_opd_parcha.php new file mode 100644 index 0000000..459d14d --- /dev/null +++ b/old_code_ci3/views/dashboard/samarpit_opd_parcha.php @@ -0,0 +1,98 @@ + + +
+ +
+
+ +
+
+ OPD No : / UHID : / OPD Fee : +
+
+ +
+
+ +
+ + diff --git a/old_code_ci3/views/dashboard/shri_ram_hospital.php b/old_code_ci3/views/dashboard/shri_ram_hospital.php new file mode 100644 index 0000000..64c5257 --- /dev/null +++ b/old_code_ci3/views/dashboard/shri_ram_hospital.php @@ -0,0 +1,57 @@ + + + +

Shri Ram Hospital
श्री राम अस्पताल

+ + + + + + +
+

+ Dr. Krishna Sah +

+ M.B.B.S, M.S. (Obstetrics & Gynaecology),
+ Consultant
+ Regd. No. UK-1261 +
+ + +

+ Dr. Sana Anshari +

+ M.B.B.S, D.G.O.
+ Regd. No. UK-6583 +
+
+ +
+

Civil Lines, Tikonia, Haldwani (Nainital) U.K.
+ Contact : 9756389281 (M), 05946-282751,224422, Hospital - 7088020108 +
Morning Time : 10 A.M. - 2 P.M. And Evening Time : 5 P.M. - 8 P.M. (Sunday evening closed)

+
+ A3 Reception No. +91 8755904991
+ Not For Medico-legal Purpose
+ +

+
+ diff --git a/old_code_ci3/views/doctor_conf_room/doctor_room.php b/old_code_ci3/views/doctor_conf_room/doctor_room.php new file mode 100644 index 0000000..e69de29 diff --git a/old_code_ci3/views/echs_profile_V.php b/old_code_ci3/views/echs_profile_V.php new file mode 100644 index 0000000..eab4c95 --- /dev/null +++ b/old_code_ci3/views/echs_profile_V.php @@ -0,0 +1,247 @@ +
+

+ ECHS Card : + name; ?> +

+ +
+ +
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+
+ +
+
+
+ +
+
+
+ mem_gender==1) + $mem_gender_str='Male'; + else + $mem_gender_str='FeMale'; + + echo '
'; + echo '
'; + echo '
'; + echo ' '; + echo ' '; + echo '
'; + echo '
'; + echo '
'; + echo '
'; + echo ' '; + echo ' '; + echo '
'; + echo '
'; + echo '
'; + echo '
'; + echo ' '; + echo ' '; + echo '
'; + echo '
'; + echo '
'; + echo '
'; + echo ' '; + echo ' '; + echo '
'; + echo '
'; + echo '
'; + echo '
'; + echo ' '; + echo '
'; + echo '
'; + echo '
'; + } + ?> +
+
+ 'form','class'=>'form2')); ?> + +
+
+
+ + +
+
+
+
+ +
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+ + +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/echs_register_V.php b/old_code_ci3/views/echs_register_V.php new file mode 100644 index 0000000..0562758 --- /dev/null +++ b/old_code_ci3/views/echs_register_V.php @@ -0,0 +1,174 @@ +
+

+ ECHS Person + Registration +

+ +
+ +
+
+
+ +
+
+ + + +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/echs_search_V.php b/old_code_ci3/views/echs_search_V.php new file mode 100644 index 0000000..81d29a0 --- /dev/null +++ b/old_code_ci3/views/echs_search_V.php @@ -0,0 +1,42 @@ +

+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ECHS CodeNamePhone NumberDate of BirthAction
service_no ?>/reg_no ?>name ?>mphone1 ?>dob ?>
Patient CodeNamePhone NumberEMailAction
+
+ +
+ \ No newline at end of file diff --git a/old_code_ci3/views/errors/cli/error_404.php b/old_code_ci3/views/errors/cli/error_404.php new file mode 100644 index 0000000..6984b61 --- /dev/null +++ b/old_code_ci3/views/errors/cli/error_404.php @@ -0,0 +1,8 @@ + + +An uncaught Exception was encountered + +Type: +Message: +Filename: getFile(), "\n"; ?> +Line Number: getLine(); ?> + + + +Backtrace: +getTrace() as $error): ?> + + File: + Line: + Function: + + + + diff --git a/old_code_ci3/views/errors/cli/error_general.php b/old_code_ci3/views/errors/cli/error_general.php new file mode 100644 index 0000000..6984b61 --- /dev/null +++ b/old_code_ci3/views/errors/cli/error_general.php @@ -0,0 +1,8 @@ + + +A PHP Error was encountered + +Severity: +Message: +Filename: +Line Number: + + + +Backtrace: + + + File: + Line: + Function: + + + + diff --git a/old_code_ci3/views/errors/cli/index.html b/old_code_ci3/views/errors/cli/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/old_code_ci3/views/errors/cli/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/views/errors/html/error_404.php b/old_code_ci3/views/errors/html/error_404.php new file mode 100644 index 0000000..756ea9d --- /dev/null +++ b/old_code_ci3/views/errors/html/error_404.php @@ -0,0 +1,64 @@ + + + + +404 Page Not Found + + + +
+

+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/errors/html/error_db.php b/old_code_ci3/views/errors/html/error_db.php new file mode 100644 index 0000000..f5a43f6 --- /dev/null +++ b/old_code_ci3/views/errors/html/error_db.php @@ -0,0 +1,64 @@ + + + + +Database Error + + + +
+

+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/errors/html/error_exception.php b/old_code_ci3/views/errors/html/error_exception.php new file mode 100644 index 0000000..8784886 --- /dev/null +++ b/old_code_ci3/views/errors/html/error_exception.php @@ -0,0 +1,32 @@ + + +
+ +

An uncaught Exception was encountered

+ +

Type:

+

Message:

+

Filename: getFile(); ?>

+

Line Number: getLine(); ?>

+ + + +

Backtrace:

+ getTrace() as $error): ?> + + + +

+ File:
+ Line:
+ Function: +

+ + + + + + +
\ No newline at end of file diff --git a/old_code_ci3/views/errors/html/error_general.php b/old_code_ci3/views/errors/html/error_general.php new file mode 100644 index 0000000..fc3b2eb --- /dev/null +++ b/old_code_ci3/views/errors/html/error_general.php @@ -0,0 +1,64 @@ + + + + +Error + + + +
+

+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/errors/html/error_php.php b/old_code_ci3/views/errors/html/error_php.php new file mode 100644 index 0000000..b146f9c --- /dev/null +++ b/old_code_ci3/views/errors/html/error_php.php @@ -0,0 +1,33 @@ + + +
+ +

A PHP Error was encountered

+ +

Severity:

+

Message:

+

Filename:

+

Line Number:

+ + + +

Backtrace:

+ + + + +

+ File:
+ Line:
+ Function: +

+ + + + + + + +
\ No newline at end of file diff --git a/old_code_ci3/views/errors/html/index.html b/old_code_ci3/views/errors/html/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/old_code_ci3/views/errors/html/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/views/errors/index.html b/old_code_ci3/views/errors/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/old_code_ci3/views/errors/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/views/form.php b/old_code_ci3/views/form.php new file mode 100644 index 0000000..2b91ab1 --- /dev/null +++ b/old_code_ci3/views/form.php @@ -0,0 +1,66 @@ +
+

+ Dashboard + Control panel +

+ +
+ +
+
+

Horizontal Form

+
+
+ + + 'form-horizontal')); ?> + +
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+
+
+ +
+
+
+
+ + + + +
+ + + + + diff --git a/old_code_ci3/views/hospital_refer/reffer_add.php b/old_code_ci3/views/hospital_refer/reffer_add.php new file mode 100644 index 0000000..2351380 --- /dev/null +++ b/old_code_ci3/views/hospital_refer/reffer_add.php @@ -0,0 +1,78 @@ +
+

+ New Refferal Client + +

+ +
+ +
+
+
+ +'form','class'=>'form1'));?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/hospital_refer/reffer_edit.php b/old_code_ci3/views/hospital_refer/reffer_edit.php new file mode 100644 index 0000000..5107de5 --- /dev/null +++ b/old_code_ci3/views/hospital_refer/reffer_edit.php @@ -0,0 +1,78 @@ +
+

+ Edit Refferal Client + +

+ +
+ +
+
+
+ +'form','class'=>'form1'));?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/hospital_refer/reffer_index.php b/old_code_ci3/views/hospital_refer/reffer_index.php new file mode 100644 index 0000000..375a2a1 --- /dev/null +++ b/old_code_ci3/views/hospital_refer/reffer_index.php @@ -0,0 +1,61 @@ +

+
+
+

Reffer Person Name / clinic / Hospital

+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
NameTypeRegister DateStatusEdit
title.' '.$row->f_name?>refer_type==0){ + echo 'Person'; + } elseif($row->refer_type==1){ + echo 'Doctor'; + }elseif($row->refer_type==2){ + echo 'Staff'; + }elseif($row->refer_type==3){ + echo 'Hospital/Clinic'; + }else{ + echo 'Others'; + } + + ?>str_dateadd?> + active){ + echo "".lang('index_active_link').""; + }else{ + echo "".lang('index_inactive_link').""; + } + ?> + Edit
+ +
+ + +
\ No newline at end of file diff --git a/old_code_ci3/views/index.html b/old_code_ci3/views/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/old_code_ci3/views/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/old_code_ci3/views/insurance/insurance_card.php b/old_code_ci3/views/insurance/insurance_card.php new file mode 100644 index 0000000..ceb9bc5 --- /dev/null +++ b/old_code_ci3/views/insurance/insurance_card.php @@ -0,0 +1,135 @@ +
+

+ Person + p_fname); ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + + + 0) + { + $ins_card_id=$data_insurance_card[0]->id; + $ins_company_id=$data_insurance_card[0]->insurance_id; + $ins_insurance_no=$data_insurance_card[0]->insurance_no; + $card_holder_name=$data_insurance_card[0]->card_holder_name; + $relation_patient_cardholder=$data_insurance_card[0]->relation_patient_cardholder; + $issue_date=MysqlDate_to_str($data_insurance_card[0]->issue_date); + $expiry_date=MysqlDate_to_str($data_insurance_card[0]->expiry_date); + } + ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ + +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/insurance/insurance_create_V.php b/old_code_ci3/views/insurance/insurance_create_V.php new file mode 100644 index 0000000..2c33b54 --- /dev/null +++ b/old_code_ci3/views/insurance/insurance_create_V.php @@ -0,0 +1,74 @@ +
+

+ Insurance Company + Add New +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/insurance/insurance_profile_V.php b/old_code_ci3/views/insurance/insurance_profile_V.php new file mode 100644 index 0000000..837e9c0 --- /dev/null +++ b/old_code_ci3/views/insurance/insurance_profile_V.php @@ -0,0 +1,207 @@ +
+

+ Insurance Company + ins_company_name; ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
+
+

OPD

+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+

Charges And Medicine

+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/insurance/insurance_search_v.php b/old_code_ci3/views/insurance/insurance_search_v.php new file mode 100644 index 0000000..13c8d29 --- /dev/null +++ b/old_code_ci3/views/insurance/insurance_search_v.php @@ -0,0 +1,62 @@ +
+

+ Insurance Company + List +

+ +
+
+
+
+
+ +
+
+ +
+
+
+
+

Result

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Company NameContact NumberOPD FeeActive
ins_company_name ?>ins_contact_number ?>opd_fee?>activestatus ?>
Company NameContact NumberContact Person NameE-Mail
+ +
+ +
+
+
\ No newline at end of file diff --git a/old_code_ci3/views/insurance_V.php b/old_code_ci3/views/insurance_V.php new file mode 100644 index 0000000..dce0180 --- /dev/null +++ b/old_code_ci3/views/insurance_V.php @@ -0,0 +1,7 @@ +
+

+ Insurance + Company +

+ +
\ No newline at end of file diff --git a/old_code_ci3/views/invoice_pathlab_print_V.php b/old_code_ci3/views/invoice_pathlab_print_V.php new file mode 100644 index 0000000..71033c5 --- /dev/null +++ b/old_code_ci3/views/invoice_pathlab_print_V.php @@ -0,0 +1,223 @@ + + + + + + <?=H_Name?> | Invoice + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ +
+ +
+ +
+
+ + + +
+ Invoice #invoice_code ?>
+ Date : inv_date ?>
+ Patient ID : p_code ?>
+ insurance_id>1) + { + echo ' Ins. Comp. :'.$insurance[0]->ins_company_name.'
'; + if($invoice_master[0]->insurance_case_id>0) + { + echo ' Org.Case No. :'.$case_master[0]->case_id_code.'
'; + } + } + ?> + + +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+
+ +
+ To +
+ p_fname) ?>
+ p_relative ?> : p_rname) ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ Refer By : refer_by_other ?>
+
+
+ + +
+ + + +
+
+ + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + discount_amount>0) {?> + + + + + + + + + + + ipd_id<1) {?> + + + + + + + + + + + correction_amount>0) {?> + + + + + + + + + + + + + + + + + + + +
#Charges GroupCharge NameOrg.CodeRateQtyAmount
'.$srno.''.$row->group_desc.''.$row->item_name.''.$row->org_code.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Gross TotalGtotal?>
#Deductiondiscount_desc ?>-discount_amount ?>
#Amount received : payment_part_received?>Balance Amount : payment_part_balance?>Net Amountnet_amount?>
#Cancel Invoicecorrection_remark ?>-correction_amount ?>
#Final Amountcorrection_net_amount?>
+
+ +
+

Invoice_status_str?>

+ + payment_mode>2) { ?> +
+
+ Payment Details [Payment_type_str ?>] +
+
+ +
+
+ Payment Details [Payment No.:Mode of Payment:Amount]: + id.':'.$row->Payment_type_str.':'.$row->amount.']/'; + } + ?> +
+
+ +
+
+ Prepared By : prepared_by ?> +
+
+ +
+
+ Signature +
+
+
+
+ +
+
+ This is computer generated provisional invoice , Signature and stamp not required +
+ + +
+ + + diff --git a/old_code_ci3/views/invoice_print_v.php b/old_code_ci3/views/invoice_print_v.php new file mode 100644 index 0000000..48772d2 --- /dev/null +++ b/old_code_ci3/views/invoice_print_v.php @@ -0,0 +1,183 @@ + + + + + + <?=H_Name?> | Invoice + + + + + + + + + + + + + + + + + + + +ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'-'.$user->id.''; +?> + + +
+ +
+
+ +
+ +
+ +
+
+ + +
+
+ OPD Invoice ID: opd_code ?>
+ Patient ID : p_code ?>
+ + insurance_id>1) + { + echo ' Ins. Comp. :'.$insurance[0]->ins_company_name.'
'; + if($opd_master[0]->insurance_case_id>0) + { + echo ' Org.Case No. :'.$case_master[0]->case_id_code.'
'; + } + } + ?> + + payment_id>0 ) + { + echo 'Payment No. :'.$opd_master[0]->payment_id.'
'; + } + ?> +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+ opd_no=='' || $opd_master[0]->opd_no==0)) { ?> +

Sr.No.opd_no ?>

+ +
+ +
+ To +
+ title ?> p_fname) ?>
+ Date : str_apointment_date ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ No. of Times Visit : no_visit ?> +
+
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + opd_discount>0 ) + { + ?> + + + + + + + + + + + + + + + +
DateDoctorDepartmentDescOPD Fee
apointment_date ?>Dr. doc_name ?>doc_spec ?>opd_fee_desc ?> opd_fee_gross_amount ?>
Deductionopd_disc_remark ?> -opd_discount ?>
Net Amount opd_fee_amount ?>
+
+ +
+ +
+ + opd_status==3) { + echo '

OPD cancelled


'; + echo '

'.$opd_master[0]->opd_status_remark.'

'; + }else{ + ?> + + Mode of Payment : payment_mode_desc ?> + + +
+
+
+ Prepared By : prepared_by ?> +
+
+ +
+
+ Signature +
+
+
+
+ +
+
+ This is computer generated invoice , Signature and stamp not required +
+ + +
+ + + diff --git a/old_code_ci3/views/invoice_show.php b/old_code_ci3/views/invoice_show.php new file mode 100644 index 0000000..cc00450 --- /dev/null +++ b/old_code_ci3/views/invoice_show.php @@ -0,0 +1,145 @@ +
+

OPD Invoice

+
+
+ +
+
+ +
+ +
+ +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+
+ +
+ To +
+ P_name ?>
+ Date : apointment_date) ?>
+ Gender : gender==1)?'Male':'Female' ?>
+ Age : age ?>
+ Phone No : mphone1 ?> +
+
+ +
+ OPD ID: opd_code ?>
+ Patient ID : p_code ?> + + insurance_id>1) + { + echo ' Ins. Comp. :'.$insurance[0]->ins_company_name.'
'; + } + + if($opd_master[0]->payment_id>0 ) + { + echo 'Payment No. :'.$opd_master[0]->payment_id.'
'; + } + ?> +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + +
TypeDoctor NameFee AmountDescription
Dr. doc_name ?>doc_spec ?>opd_fee_amount ?>opd_fee_desc ?>
+
+ +
+ +
+
+
+ +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+

Payment Methods:

+

+
+ +
+

Amount Due 2/22/2014

+ +
+ + + + + + + + + + + + + + + + + +
Subtotal:$250.30
Tax (9.3%)$10.34
Shipping:$5.80
Total:$265.24
+
+
+ +
+ +
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/invoiceshow/invoice_charges.php b/old_code_ci3/views/invoiceshow/invoice_charges.php new file mode 100644 index 0000000..d9593d9 --- /dev/null +++ b/old_code_ci3/views/invoiceshow/invoice_charges.php @@ -0,0 +1,161 @@ +
+ +
+
+ +
+ +
+ +
+
+ + +
+ Invoice #invoice_code ?>
+ Date : inv_date ?>
+ Patient ID : p_code ?>
+ + + payment_id>0 ) + { + echo 'Payment No. :'.$invoice_master[0]->payment_id.'
'; + } + ?> +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+
+ +
+ To +
+ p_fname ?>
+ Gender : xgender ?>
+ Age : age ?>
+ Phone No : mphone1 ?>
+ Refer By : refer_by_other ?>
+
+
+ + +
+ + + +
+
+ + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + $srno=$srno+1; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + discount_amount>0) {?> + + + + + + + + + + + + + + + + + + + + correction_amount>0) {?> + + + + + + + + + + + + + + + + + + + +
#Charges GroupCharge NameRateQtyAmount
'.$srno.''.$row->desc.''.$row->item_name.''.$row->item_rate.''.$row->item_qty.''.$row->item_amount.'
#Gross TotalGtotal?>
#Deductiondiscount_desc ?>-discount_amount ?>
#Net Amountnet_amount?>
#Correctioncorrection_remark ?>-correction_amount ?>
#Final Amountcorrection_net_amount?>
+
+ +
+ +
+ + Mode of Payment : payment_mode_desc ?> +
+
+
+ Prepared By : prepared_by ?> +
+
+ +
+
+ Signature +
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+ + +
\ No newline at end of file diff --git a/old_code_ci3/views/invoiceshow/invoice_medical.php b/old_code_ci3/views/invoiceshow/invoice_medical.php new file mode 100644 index 0000000..5212239 --- /dev/null +++ b/old_code_ci3/views/invoiceshow/invoice_medical.php @@ -0,0 +1,138 @@ + +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ Invoice #inv_med_code ?>
+ Date : inv_date ?>
+ Patient ID : patient_code ?>
+ payment_id>0 ) + { + echo 'Payment No. :'.$invoice_master[0]->payment_id.'
'; + } + ?> + +
+
+ From +
+
+
+
+ Phone:
+ Email: +
+
+ +
+ To +
+ inv_name ?>
+ Refer By : doc_name ?>
+
+
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + '; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + echo ''; + } + ?> + + + + + + + + + + + + + + + + + + +
#Item codeItem NameFormulationBatch NoExp.RateQty.PriceDisc.VatTax Amount Amount
'.$srno.''.$row->item_code.''.$row->item_Name.''.$row->formulation.''.$row->batch_no.''.$row->expiry.''.$row->price.''.$row->qty.''.$row->amount.''.$row->disc_amount.''.$row->vat.''.$row->vamount.''.$row->tamount.'
#Gross Totalamt ?>vamt ?>Gtotal?>
+
+ +
+ +
+ + Mode of Payment : payment_mode_desc ?> +
+
+
+ Prepared By : prepared_by ?> +
+
+ +
+
+ Signature +
+
+
+
+ This is computer generated invoice , Signature and stamp not required +
+ \ No newline at end of file diff --git a/old_code_ci3/views/item/item_create_V.php b/old_code_ci3/views/item/item_create_V.php new file mode 100644 index 0000000..d28b8d4 --- /dev/null +++ b/old_code_ci3/views/item/item_create_V.php @@ -0,0 +1,77 @@ +
+

+ OPD Charges + Add New +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item/item_item_list.php b/old_code_ci3/views/item/item_item_list.php new file mode 100644 index 0000000..2fe8893 --- /dev/null +++ b/old_code_ci3/views/item/item_item_list.php @@ -0,0 +1,69 @@ + + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD or IPDGroupCharge NameCharge DetailsAmount
isIPD_OPD ?>group_desc ?>idesc ?>idesc_detail ?>amount ?>
OPD or IPDGroupCharge NameAmount
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item/item_list_all.php b/old_code_ci3/views/item/item_list_all.php new file mode 100644 index 0000000..457a6fe --- /dev/null +++ b/old_code_ci3/views/item/item_list_all.php @@ -0,0 +1,71 @@ + + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + group_desc) + { + echo ''; + $Head=$data[$i]->group_desc; + } + ?> + + + + + + + + + + + + + + +
Group/Charge NameCharge DetailsAmount
'.$data[$i]->group_desc.'
idesc ?>idesc_detail ?>amount ?>
Group/Charge NameCharge NameAmount
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item/item_profile_V.php b/old_code_ci3/views/item/item_profile_V.php new file mode 100644 index 0000000..0030259 --- /dev/null +++ b/old_code_ci3/views/item/item_profile_V.php @@ -0,0 +1,181 @@ +
+

+ OPD Charge Name : idesc; ?> +

+
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+
+ + + +
+
+ +
+
+
+
+ + +
+
+
+ + +
+
+
+
+
+
+

Insurance Rates

+
+ +
+ 'form','class'=>'form1')); ?> +
+ + + + + + + + + + + + + + + + + + + + +
Company NameAmountCodeAction
ins_company_name ?>i_amount ?>code ?>
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+
+ + +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item/item_search_V.php b/old_code_ci3/views/item/item_search_V.php new file mode 100644 index 0000000..8d55edf --- /dev/null +++ b/old_code_ci3/views/item/item_search_V.php @@ -0,0 +1,135 @@ +
+

+ OPD Charges + +

+
+'form','class'=>'form1')); ?> +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+

Result +

+ +
+ +
+
+ Print + Print ALL +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD or IPDGroupCharge NameAmount
isIPD_OPD ?>group_desc ?>idesc ?>amount ?>
OPD or IPDGroupCharge NameAmount
+ +
+
+ +
+
+
+ + + + \ No newline at end of file diff --git a/old_code_ci3/views/item/item_type_create.php b/old_code_ci3/views/item/item_type_create.php new file mode 100644 index 0000000..de6af24 --- /dev/null +++ b/old_code_ci3/views/item/item_type_create.php @@ -0,0 +1,63 @@ +
+

+ OPD Charges Group + +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/item/item_type_profile.php b/old_code_ci3/views/item/item_type_profile.php new file mode 100644 index 0000000..1b81f3a --- /dev/null +++ b/old_code_ci3/views/item/item_type_profile.php @@ -0,0 +1,62 @@ +
+

+ OPD Charges Group + group_desc ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_create_V.php b/old_code_ci3/views/item_ipd/item_create_V.php new file mode 100644 index 0000000..eb709c8 --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_create_V.php @@ -0,0 +1,77 @@ +
+

+ IPD Charges + Add New +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ + +
+
+ +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_item_list.php b/old_code_ci3/views/item_ipd/item_item_list.php new file mode 100644 index 0000000..2fe8893 --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_item_list.php @@ -0,0 +1,69 @@ + + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OPD or IPDGroupCharge NameCharge DetailsAmount
isIPD_OPD ?>group_desc ?>idesc ?>idesc_detail ?>amount ?>
OPD or IPDGroupCharge NameAmount
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_list_all.php b/old_code_ci3/views/item_ipd/item_list_all.php new file mode 100644 index 0000000..457a6fe --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_list_all.php @@ -0,0 +1,71 @@ + + + + + + <?=H_Name?> + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + group_desc) + { + echo ''; + $Head=$data[$i]->group_desc; + } + ?> + + + + + + + + + + + + + + +
Group/Charge NameCharge DetailsAmount
'.$data[$i]->group_desc.'
idesc ?>idesc_detail ?>amount ?>
Group/Charge NameCharge NameAmount
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_profile_V.php b/old_code_ci3/views/item_ipd/item_profile_V.php new file mode 100644 index 0000000..30cff7c --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_profile_V.php @@ -0,0 +1,177 @@ +
+

+ IPD Charge Name : idesc; ?> +

+
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+ + +
+
+
+
+
+
+

Insurance Rates

+
+ +
+ 'form','class'=>'form1')); ?> +
+ + + + + + + + + + + + + + + + + + + + +
Company NameAmountCodeAction
ins_company_name ?>i_amount ?>code ?>
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_search_V.php b/old_code_ci3/views/item_ipd/item_search_V.php new file mode 100644 index 0000000..bb9f403 --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_search_V.php @@ -0,0 +1,131 @@ +
+

+ IPD Charges + +

+
+'form','class'=>'form1')); ?> +
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+
+

Result +

+ +
+ +
+
+ Print + Print ALL +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
GroupCharge NameAmount
group_desc ?>idesc ?>amount ?>
GroupCharge NameAmount
+ +
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_type_create.php b/old_code_ci3/views/item_ipd/item_type_create.php new file mode 100644 index 0000000..7ea689e --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_type_create.php @@ -0,0 +1,50 @@ +
+

+ IPD Charges Group +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> +
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/item_ipd/item_type_profile.php b/old_code_ci3/views/item_ipd/item_type_profile.php new file mode 100644 index 0000000..bb28a17 --- /dev/null +++ b/old_code_ci3/views/item_ipd/item_type_profile.php @@ -0,0 +1,58 @@ +
+

+ IPD Charges Group + group_desc ?> +

+ +
+ +
+
+
+
+ 'form','class'=>'form1')); ?> + +
+
+
+ + +
+
+
+
+ + +
+
+
+ + +
+
+
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/opd_app_insurance_V.php b/old_code_ci3/views/opd_app_insurance_V.php new file mode 100644 index 0000000..e3310b9 --- /dev/null +++ b/old_code_ci3/views/opd_app_insurance_V.php @@ -0,0 +1,151 @@ +
+

+ OPD + Registration +

+ +
+'form','class'=>'form1')); ?> +
+
+
+

Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + + + +

+
+
+
+
+
+ +
+
+ +
+ /> +
+
+
+
+
+
+
+
+ '; + echo ' '; + echo $row->p_fname.' ['.$row->SpecName.']'; + echo '
'; + } + ?> + +
+ +
+
+
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/opd_appointment_V.php b/old_code_ci3/views/opd_appointment_V.php new file mode 100644 index 0000000..88279b1 --- /dev/null +++ b/old_code_ci3/views/opd_appointment_V.php @@ -0,0 +1,156 @@ +
+

+ OPD + Registration +

+ +
+'form','class'=>'form1')); ?> +
+
+
+

Name :p_fname?> + / Age :age?> + / Gender :xgender?> + / P Code :p_code?> + + +

+
+
+
+
+
+ +
+
+ +
+ Readonly=true /> +
+
+
+
+
+
+
+
+ '; + echo ' '; + echo $row->p_fname.' ['.$row->SpecName.']'; + echo '
'; + } + ?> + +
+ +
+
+
+
+
+
+
+
+ +
+
+ +
+ +
+
+
+
+ + +
+
+
+
+
+ +
+ + \ No newline at end of file diff --git a/old_code_ci3/views/opd_invoice_V.php b/old_code_ci3/views/opd_invoice_V.php new file mode 100644 index 0000000..ac06980 --- /dev/null +++ b/old_code_ci3/views/opd_invoice_V.php @@ -0,0 +1,516 @@ +
+

OPD Invoice

+ +
+
+ 'form','class'=>'form1')); ?> +
+ +
+ To +
+ P_name) ?>
+ p_relative ?> : p_rname ?>
+ OPD Book Date (y-m-d time) : opd_book_date ?>
+ Gender : gender==1)?'Male':'Female' ?>
+ Age : age ?>
+ Phone No : mphone1 ?> +
+
+ +
+ OPD ID: opd_code ?>
+ Date of Appointment: str_apointment_date ?>
+ Patient ID : p_code ?>
+ insurance_id>1) + { + echo ' Ins. Comp. :'.$insurance[0]->ins_company_name.'
'; + } + ?> + + payment_id>0 ) + { + echo 'Payment No. :'.$opd_master[0]->payment_id.'
'; + } + ?> +
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + payment_status==0) { ?> + + + + + + + opd_discount>0 ) + { + ?> + + + + + + + + + + + + + + +
DateDoctorDepartmentOPD Fee
apointment_date) ?>Dr. doc_name ?>doc_spec ?>opd_fee_gross_amount ?>opd_fee_desc ?>
Any Deduction +
Deductionopd_disc_remark ?>opd_discount ?>
#Net Amountopd_fee_amount?>
+
+ +
+ + payment_status==0 && $refund_status==0) { ?> +
+ +
+
+
+
+ +
+ 0 ) { ?> +
+
+

+ + Cash +

+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+ + insurance_id>0 ) { ?> +
+ +
+
+ +
+
+
+ + case_id_code ?> autocomplete="off" readonly> + +
+
+
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
+
+ +
+ +
+ opd_status==3){ + echo '

Status is Cancelled

' ; + }else{?> + Payment Method by : payment_mode_desc ?> + +
+
+ + + ion_auth->in_group('OPDEdit') && ($opd_master[0]->opd_status==1 || $opd_master[0]->opd_status==2)) { ?> +
+
+ opd_status==1) { ?> +
+ +
+
+ +
+ +
+ opd_status==1 || $opd_master[0]->opd_status==2 ) { + if(count($case_master)>0) + { + ?> + + +
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+ opd_status==1 or $opd_master[0]->opd_status==2) AND ($opd_master[0]->payment_mode==4)){ ?> +
+ +
+ +
+
+ +
+ +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/opd_letter_head.php b/old_code_ci3/views/opd_letter_head.php new file mode 100644 index 0000000..58c70c3 --- /dev/null +++ b/old_code_ci3/views/opd_letter_head.php @@ -0,0 +1,86 @@ + + + + + + <?php + if(defined('C_EST')) + { + echo C_EST ; + }else{ + echo H_Name ; + } + + + ?> + + + + + + + + + + + + + + + + + + + +ion_auth->user()->row(); + $user_id = $user->id; + $user_name = $user->first_name.''. $user->last_name.'-'.$user->id.''; +?> + +
+
+
+ +
+
+
+
+ UHID : p_code ?> + udai<>"") + { + echo ' /'.$patient_master[0]->udai; + } + ?>
+ Name : title ?> p_fname) ?>
+ p_relative ?> p_rname) ?>
+ Sex : xgender ?> age ?>
+
+
+ OPD No.: opd_code ?>/ opd_id?>
+ OPD Fee: opd_fee_amount ?> [opd_fee_desc ?>]
+ Date: str_apointment_date ?>
+ opd_fee_type=='3'){ + if(count($old_opd)>0){ + echo 'Valid Upto :'.$opd_master[0]->opd_Exp_Date.'
'; + } + }else{ ?> + Valid Upto : opd_Exp_Date ?>
+ + +
+
+ Sr No.:opd_no ?>
+ P.No. : mphone1 ?>
+ Address : add1.','.$patient_master[0]->city?>
+ +
+
+
+ + + diff --git a/old_code_ci3/views/print_format/opd_print_letter_head.php b/old_code_ci3/views/print_format/opd_print_letter_head.php new file mode 100644 index 0000000..cbea32d --- /dev/null +++ b/old_code_ci3/views/print_format/opd_print_letter_head.php @@ -0,0 +1,35 @@ + + + + + + + + +
+ UHID : '.$patient_master[0]->p_code.' '.$old_uhid.'
+ Name : '.$patient_master[0]->title .' '.strtoupper($patient_master[0]->p_fname).'
+ '.$patient_master[0]->p_relative.' '.strtoupper($patient_master[0]->p_rname).'
+ Gender/Age : '.$patient_master[0]->xgender.' / '.$patient_master[0]->age.'
+
+ OPD No.: '.$opd_master[0]->opd_code.'
+ OPD Fee: '.$opd_master[0]->opd_fee_amount .' ['.$opd_master[0]->opd_fee_desc .']
+ Date: '.$opd_master[0]->str_apointment_date .'
'.$exp_date.' +
+ Sr No.: '.$opd_master[0]->opd_no .'
+ P.No. :'.$patient_master[0]->mphone1 .' + Address :'.$patient_master[0]->add1.','.$patient_master[0]->add2. + '
'.$patient_master[0]->city.' '.$patient_master[0]->district. + ' '.$patient_master[0]->state.' +
\ No newline at end of file diff --git a/old_code_ci3/views/search_adv_data.php b/old_code_ci3/views/search_adv_data.php new file mode 100644 index 0000000..e5c390e --- /dev/null +++ b/old_code_ci3/views/search_adv_data.php @@ -0,0 +1,11 @@ +0) { ?> +
+ + + + + +
Name of Person/Sex/Relative Name
+ Sresult?> +
+ \ No newline at end of file diff --git a/old_code_ci3/views/setting/setting_main.php b/old_code_ci3/views/setting/setting_main.php new file mode 100644 index 0000000..0b15cff --- /dev/null +++ b/old_code_ci3/views/setting/setting_main.php @@ -0,0 +1,64 @@ +
+

+ Admin Panel + Dashboard +

+
+ +
+'form','class'=>'form1')); ?> + + +
+
+ +
+
+
+ \ No newline at end of file diff --git a/old_code_ci3/views/temp_edit.php b/old_code_ci3/views/temp_edit.php new file mode 100644 index 0000000..d811a91 --- /dev/null +++ b/old_code_ci3/views/temp_edit.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/old_code_ci3/views/test.html b/old_code_ci3/views/test.html new file mode 100644 index 0000000..53ff075 --- /dev/null +++ b/old_code_ci3/views/test.html @@ -0,0 +1,146 @@ +
+ +
+
+

Report Edit

+
+ +
+
+ +
+
+
+
+ + + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+
+ +
+
+
+
+

Report Parameter

+
+ +
+
+ +
+
+
+
+
+
+
+ +
+
+
+
+
+ + \ No newline at end of file diff --git a/old_code_ci3/views/testcode/test2.html b/old_code_ci3/views/testcode/test2.html new file mode 100644 index 0000000..9160503 --- /dev/null +++ b/old_code_ci3/views/testcode/test2.html @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#DateNo. PatientsNo. Inv.Net Amt.PaymentCash PendingIPD_Credit_AmountOrg_Credit_Amount
101-10-2017386193349.864314.955673.7728786.41207.70
202-10-20173989199379.6433671.1841470.7341116.151061.90
303-10-20172864211654.9629988.3311862.7648344.53476.77
404-10-2017214469002.4516697.8313006.6415528.500.00
# + Total72258573386.9184672.2972013.90133775.591746.37
\ No newline at end of file diff --git a/old_code_ci3/views/testcode/test_1.php b/old_code_ci3/views/testcode/test_1.php new file mode 100644 index 0000000..0f25b52 --- /dev/null +++ b/old_code_ci3/views/testcode/test_1.php @@ -0,0 +1,52 @@ +
+
+
+ +
+ +
+ +
+
Your captured image will appear here...
+ \ No newline at end of file diff --git a/old_code_ci3/views/testcode/test_2 b/old_code_ci3/views/testcode/test_2 new file mode 100644 index 0000000..203f9f7 --- /dev/null +++ b/old_code_ci3/views/testcode/test_2 @@ -0,0 +1 @@ +test_2 \ No newline at end of file diff --git a/old_code_ci3/views/testphp.php b/old_code_ci3/views/testphp.php new file mode 100644 index 0000000..415f0bb --- /dev/null +++ b/old_code_ci3/views/testphp.php @@ -0,0 +1,33 @@ + + + + + + + +
+ + + + + + + + + \ No newline at end of file diff --git a/old_code_ci3/views/welcome_message.php b/old_code_ci3/views/welcome_message.php new file mode 100644 index 0000000..2f73093 --- /dev/null +++ b/old_code_ci3/views/welcome_message.php @@ -0,0 +1,89 @@ + + + + + Welcome to CodeIgniter Custom Hello + + + + + +
+

Welcome to CodeIgniter Hospital

+ +
+

The page you are looking at is being generated dynamically by CodeIgniter.

+ +

If you would like to edit this page you'll find it located at:

+ application/views/welcome_message.php + +

The corresponding controller for this page is found at:

+ application/controllers/Welcome.php + +

If you are exploring CodeIgniter for the very first time, you should start by reading the User Guide.

+
+ + +
+ + + \ No newline at end of file diff --git a/old_code_ci3/views/welcome_message.txt b/old_code_ci3/views/welcome_message.txt new file mode 100644 index 0000000..abd69c6 --- /dev/null +++ b/old_code_ci3/views/welcome_message.txt @@ -0,0 +1,10 @@ +
+

+ Doctor + Add New +

+ +
\ No newline at end of file diff --git a/old_code_ci3/views/workplace/Adminpanel.php b/old_code_ci3/views/workplace/Adminpanel.php new file mode 100644 index 0000000..e69de29 diff --git a/old_code_ci3/views/workplace/workpanel.php b/old_code_ci3/views/workplace/workpanel.php new file mode 100644 index 0000000..c476f8e --- /dev/null +++ b/old_code_ci3/views/workplace/workpanel.php @@ -0,0 +1,46 @@ +
+
+ +
+
+
+
+
+
+
diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..b408a99 --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,63 @@ + + + + + + + + + + + + + ./tests + + + + + + + + + + ./app + + + ./app/Views + ./app/Config/Routes.php + + + + + + + + + + + + + + + diff --git a/preload.php b/preload.php new file mode 100644 index 0000000..288b30b --- /dev/null +++ b/preload.php @@ -0,0 +1,112 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +use CodeIgniter\Boot; +use Config\Paths; + +/* + *--------------------------------------------------------------- + * Sample file for Preloading + *--------------------------------------------------------------- + * See https://www.php.net/manual/en/opcache.preloading.php + * + * How to Use: + * 0. Copy this file to your project root folder. + * 1. Set the $paths property of the preload class below. + * 2. Set opcache.preload in php.ini. + * php.ini: + * opcache.preload=/path/to/preload.php + */ + +// Load the paths config file +require __DIR__ . '/app/Config/Paths.php'; + +// Path to the front controller +define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR); + +class preload +{ + /** + * @var array Paths to preload. + */ + private array $paths = [ + [ + 'include' => __DIR__ . '/vendor/codeigniter4/framework/system', // Change this path if using manual installation + 'exclude' => [ + // Not needed if you don't use them. + '/system/Database/OCI8/', + '/system/Database/Postgre/', + '/system/Database/SQLite3/', + '/system/Database/SQLSRV/', + // Not needed for web apps. + '/system/Database/Seeder.php', + '/system/Test/', + '/system/CLI/', + '/system/Commands/', + '/system/Publisher/', + '/system/ComposerScripts.php', + // Not Class/Function files. + '/system/Config/Routes.php', + '/system/Language/', + '/system/bootstrap.php', + '/system/util_bootstrap.php', + '/system/rewrite.php', + '/Views/', + // Errors occur. + '/system/ThirdParty/', + ], + ], + ]; + + public function __construct() + { + $this->loadAutoloader(); + } + + private function loadAutoloader(): void + { + $paths = new Paths(); + require rtrim($paths->systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'Boot.php'; + + Boot::preload($paths); + } + + /** + * Load PHP files. + */ + public function load(): void + { + foreach ($this->paths as $path) { + $directory = new RecursiveDirectoryIterator($path['include']); + $fullTree = new RecursiveIteratorIterator($directory); + $phpFiles = new RegexIterator( + $fullTree, + '/.+((? $file) { + foreach ($path['exclude'] as $exclude) { + if (str_contains($file[0], $exclude)) { + continue 2; + } + } + + require_once $file[0]; + // Uncomment only for debugging (to inspect which files are included). + // Never use this in production - preload scripts must not generate output. + // echo 'Loaded: ' . $file[0] . "\n"; + } + } + } +} + +(new preload())->load(); diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..abac3cb --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,49 @@ +# Disable directory browsing +Options -Indexes + +# ---------------------------------------------------------------------- +# Rewrite engine +# ---------------------------------------------------------------------- + +# Turning on the rewrite engine is necessary for the following rules and features. +# FollowSymLinks must be enabled for this to work. + + Options +FollowSymlinks + RewriteEngine On + + # If you installed CodeIgniter in a subfolder, you will need to + # change the following line to match the subfolder you need. + # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase + # RewriteBase / + + # Redirect Trailing Slashes... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Rewrite "www.example.com -> example.com" + RewriteCond %{HTTPS} !=on + RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] + RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] + + # Checks to see if the user is attempting to access a valid file, + # such as an image or css document, if this isn't true it sends the + # request to the front controller, index.php + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA] + + # Ensure Authorization header is passed along + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + + + # If we don't have mod_rewrite installed, all 404's + # can be sent to index.php, and everything works as normal. + ErrorDocument 404 index.php + + +# Disable server signature start +ServerSignature Off +# Disable server signature end diff --git a/public/assets/css/style.css b/public/assets/css/style.css new file mode 100644 index 0000000..69ff1c2 --- /dev/null +++ b/public/assets/css/style.css @@ -0,0 +1,1233 @@ +/** +* Template Name: NiceAdmin +* Template URL: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/ +* Updated: Apr 20 2024 with Bootstrap v5.3.3 +* Author: BootstrapMade.com +* License: https://bootstrapmade.com/license/ +*/ + +/*-------------------------------------------------------------- +# General +--------------------------------------------------------------*/ +:root { + scroll-behavior: smooth; +} + +body { + font-family: "Open Sans", sans-serif; + background: #f6f9ff; + color: #444444; +} + +a { + color: #4154f1; + text-decoration: none; +} + +a:hover { + color: #717ff5; + text-decoration: none; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Nunito", sans-serif; +} + +/*-------------------------------------------------------------- +# Main +--------------------------------------------------------------*/ +#main { + margin-top: 60px; + padding: 20px 30px; + transition: all 0.3s; +} + +@media (max-width: 1199px) { + #main { + padding: 20px; + } +} + +/*-------------------------------------------------------------- +# Page Title +--------------------------------------------------------------*/ +.pagetitle { + margin-bottom: 10px; +} + +.pagetitle h1 { + font-size: 24px; + margin-bottom: 0; + font-weight: 600; + color: #012970; +} + +/*-------------------------------------------------------------- +# Back to top button +--------------------------------------------------------------*/ +.back-to-top { + position: fixed; + visibility: hidden; + opacity: 0; + right: 15px; + bottom: 15px; + z-index: 99999; + background: #4154f1; + width: 40px; + height: 40px; + border-radius: 4px; + transition: all 0.4s; +} + +.back-to-top i { + font-size: 24px; + color: #fff; + line-height: 0; +} + +.back-to-top:hover { + background: #6776f4; + color: #fff; +} + +.back-to-top.active { + visibility: visible; + opacity: 1; +} + +/*-------------------------------------------------------------- +# Override some default Bootstrap stylings +--------------------------------------------------------------*/ +/* Dropdown menus */ +.dropdown-menu { + border-radius: 4px; + padding: 10px 0; + animation-name: dropdown-animate; + animation-duration: 0.2s; + animation-fill-mode: both; + border: 0; + box-shadow: 0 5px 30px 0 rgba(82, 63, 105, 0.2); +} + +.dropdown-menu .dropdown-header, +.dropdown-menu .dropdown-footer { + text-align: center; + font-size: 15px; + padding: 10px 25px; +} + +.dropdown-menu .dropdown-footer a { + color: #444444; + text-decoration: underline; +} + +.dropdown-menu .dropdown-footer a:hover { + text-decoration: none; +} + +.dropdown-menu .dropdown-divider { + color: #a5c5fe; + margin: 0; +} + +.dropdown-menu .dropdown-item { + font-size: 14px; + padding: 10px 15px; + transition: 0.3s; +} + +.dropdown-menu .dropdown-item i { + margin-right: 10px; + font-size: 18px; + line-height: 0; +} + +.dropdown-menu .dropdown-item:hover { + background-color: #f6f9ff; +} + +@media (min-width: 768px) { + .dropdown-menu-arrow::before { + content: ""; + width: 13px; + height: 13px; + background: #fff; + position: absolute; + top: -7px; + right: 20px; + transform: rotate(45deg); + border-top: 1px solid #eaedf1; + border-left: 1px solid #eaedf1; + } +} + +@keyframes dropdown-animate { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } + + 0% { + opacity: 0; + } +} + +/* Light Backgrounds */ +.bg-primary-light { + background-color: #cfe2ff; + border-color: #cfe2ff; +} + +.bg-secondary-light { + background-color: #e2e3e5; + border-color: #e2e3e5; +} + +.bg-success-light { + background-color: #d1e7dd; + border-color: #d1e7dd; +} + +.bg-danger-light { + background-color: #f8d7da; + border-color: #f8d7da; +} + +.bg-warning-light { + background-color: #fff3cd; + border-color: #fff3cd; +} + +.bg-info-light { + background-color: #cff4fc; + border-color: #cff4fc; +} + +.bg-dark-light { + background-color: #d3d3d4; + border-color: #d3d3d4; +} + +/* Card */ +.card { + margin-bottom: 30px; + border: none; + border-radius: 5px; + box-shadow: 0px 0 30px rgba(1, 41, 112, 0.1); +} + +.card-header, +.card-footer { + border-color: #ebeef4; + background-color: #fff; + color: #798eb3; + padding: 15px; +} + +.card-title { + padding: 20px 0 15px 0; + font-size: 18px; + font-weight: 500; + color: #012970; + font-family: "Poppins", sans-serif; +} + +.card-title span { + color: #899bbd; + font-size: 14px; + font-weight: 400; +} + +.card-body { + padding: 0 20px 20px 20px; +} + +.card-img-overlay { + background-color: rgba(255, 255, 255, 0.6); +} + +/* Alerts */ +.alert-heading { + font-weight: 500; + font-family: "Poppins", sans-serif; + font-size: 20px; +} + +/* Close Button */ +.btn-close { + background-size: 25%; +} + +.btn-close:focus { + outline: 0; + box-shadow: none; +} + +/* Accordion */ +.accordion-item { + border: 1px solid #ebeef4; +} + +.accordion-button:focus { + outline: 0; + box-shadow: none; +} + +.accordion-button:not(.collapsed) { + color: #012970; + background-color: #f6f9ff; +} + +.accordion-flush .accordion-button { + padding: 15px 0; + background: none; + border: 0; +} + +.accordion-flush .accordion-button:not(.collapsed) { + box-shadow: none; + color: #4154f1; +} + +.accordion-flush .accordion-body { + padding: 0 0 15px 0; + color: #3e4f6f; + font-size: 15px; +} + +/* Breadcrumbs */ +.breadcrumb { + font-size: 14px; + font-family: "Nunito", sans-serif; + color: #899bbd; + font-weight: 600; +} + +.breadcrumb a { + color: #899bbd; + transition: 0.3s; +} + +.breadcrumb a:hover { + color: #51678f; +} + +.breadcrumb .breadcrumb-item::before { + color: #899bbd; +} + +.breadcrumb .active { + color: #51678f; + font-weight: 600; +} + +/* Bordered Tabs */ +.nav-tabs-bordered { + border-bottom: 2px solid #ebeef4; +} + +.nav-tabs-bordered .nav-link { + margin-bottom: -2px; + border: none; + color: #2c384e; +} + +.nav-tabs-bordered .nav-link:hover, +.nav-tabs-bordered .nav-link:focus { + color: #4154f1; +} + +.nav-tabs-bordered .nav-link.active { + background-color: #fff; + color: #4154f1; + border-bottom: 2px solid #4154f1; +} + +/*-------------------------------------------------------------- +# Header +--------------------------------------------------------------*/ +.logo { + line-height: 1; +} + +@media (min-width: 1200px) { + .logo { + width: 280px; + } +} + +.logo img { + max-height: 26px; + margin-right: 6px; +} + +.logo span { + font-size: 26px; + font-weight: 700; + color: #012970; + font-family: "Nunito", sans-serif; +} + +.header { + transition: all 0.5s; + z-index: 997; + height: 60px; + box-shadow: 0px 2px 20px rgba(1, 41, 112, 0.1); + background-color: #fff; + padding-left: 20px; + /* Toggle Sidebar Button */ + /* Search Bar */ +} + +.header .toggle-sidebar-btn { + font-size: 32px; + padding-left: 10px; + cursor: pointer; + color: #012970; +} + +.header .search-bar { + min-width: 360px; + padding: 0 20px; +} + +@media (max-width: 1199px) { + .header .search-bar { + position: fixed; + top: 50px; + left: 0; + right: 0; + padding: 20px; + box-shadow: 0px 0px 15px 0px rgba(1, 41, 112, 0.1); + background: white; + z-index: 9999; + transition: 0.3s; + visibility: hidden; + opacity: 0; + } + + .header .search-bar-show { + top: 60px; + visibility: visible; + opacity: 1; + } +} + +.header .search-form { + width: 100%; +} + +.header .search-form input { + border: 0; + font-size: 14px; + color: #012970; + border: 1px solid rgba(1, 41, 112, 0.2); + padding: 7px 38px 7px 8px; + border-radius: 3px; + transition: 0.3s; + width: 100%; +} + +.header .search-form input:focus, +.header .search-form input:hover { + outline: none; + box-shadow: 0 0 10px 0 rgba(1, 41, 112, 0.15); + border: 1px solid rgba(1, 41, 112, 0.3); +} + +.header .search-form button { + border: 0; + padding: 0; + margin-left: -30px; + background: none; +} + +.header .search-form button i { + color: #012970; +} + +/*-------------------------------------------------------------- +# Header Nav +--------------------------------------------------------------*/ +.header-nav ul { + list-style: none; +} + +.header-nav>ul { + margin: 0; + padding: 0; +} + +.header-nav .nav-icon { + font-size: 22px; + color: #012970; + margin-right: 25px; + position: relative; +} + +.header-nav .nav-profile { + color: #012970; +} + +.header-nav .nav-profile img { + max-height: 36px; +} + +.header-nav .nav-profile span { + font-size: 14px; + font-weight: 600; +} + +.header-nav .badge-number { + position: absolute; + inset: -2px -5px auto auto; + font-weight: normal; + font-size: 12px; + padding: 3px 6px; +} + +.header-nav .notifications { + inset: 8px -15px auto auto !important; +} + +.header-nav .notifications .notification-item { + display: flex; + align-items: center; + padding: 15px 10px; + transition: 0.3s; +} + +.header-nav .notifications .notification-item i { + margin: 0 20px 0 10px; + font-size: 24px; +} + +.header-nav .notifications .notification-item h4 { + font-size: 16px; + font-weight: 600; + margin-bottom: 5px; +} + +.header-nav .notifications .notification-item p { + font-size: 13px; + margin-bottom: 3px; + color: #919191; +} + +.header-nav .notifications .notification-item:hover { + background-color: #f6f9ff; +} + +.header-nav .messages { + inset: 8px -15px auto auto !important; +} + +.header-nav .messages .message-item { + padding: 15px 10px; + transition: 0.3s; +} + +.header-nav .messages .message-item a { + display: flex; +} + +.header-nav .messages .message-item img { + margin: 0 20px 0 10px; + max-height: 40px; +} + +.header-nav .messages .message-item h4 { + font-size: 16px; + font-weight: 600; + margin-bottom: 5px; + color: #444444; +} + +.header-nav .messages .message-item p { + font-size: 13px; + margin-bottom: 3px; + color: #919191; +} + +.header-nav .messages .message-item:hover { + background-color: #f6f9ff; +} + +.header-nav .profile { + min-width: 240px; + padding-bottom: 0; + top: 8px !important; +} + +.header-nav .profile .dropdown-header h6 { + font-size: 18px; + margin-bottom: 0; + font-weight: 600; + color: #444444; +} + +.header-nav .profile .dropdown-header span { + font-size: 14px; +} + +.header-nav .profile .dropdown-item { + font-size: 14px; + padding: 10px 15px; + transition: 0.3s; +} + +.header-nav .profile .dropdown-item i { + margin-right: 10px; + font-size: 18px; + line-height: 0; +} + +.header-nav .profile .dropdown-item:hover { + background-color: #f6f9ff; +} + +/*-------------------------------------------------------------- +# Sidebar +--------------------------------------------------------------*/ +.sidebar { + position: fixed; + top: 60px; + left: 0; + bottom: 0; + width: 300px; + z-index: 996; + transition: all 0.3s; + padding: 20px; + overflow-y: auto; + scrollbar-width: thin; + scrollbar-color: #aab7cf transparent; + box-shadow: 0px 0px 20px rgba(1, 41, 112, 0.1); + background-color: #fff; +} + +@media (max-width: 1199px) { + .sidebar { + left: -300px; + } +} + +.sidebar::-webkit-scrollbar { + width: 5px; + height: 8px; + background-color: #fff; +} + +.sidebar::-webkit-scrollbar-thumb { + background-color: #aab7cf; +} + +@media (min-width: 1200px) { + + #main, + #footer { + margin-left: 300px; + } +} + +@media (max-width: 1199px) { + .toggle-sidebar .sidebar { + left: 0; + } +} + +@media (min-width: 1200px) { + + .toggle-sidebar #main, + .toggle-sidebar #footer { + margin-left: 0; + } + + .toggle-sidebar .sidebar { + left: -300px; + } +} + +.sidebar-nav { + padding: 0; + margin: 0; + list-style: none; +} + +.sidebar-nav li { + padding: 0; + margin: 0; + list-style: none; +} + +.sidebar-nav .nav-item { + margin-bottom: 5px; +} + +.sidebar-nav .nav-heading { + font-size: 11px; + text-transform: uppercase; + color: #899bbd; + font-weight: 600; + margin: 10px 0 5px 15px; +} + +.sidebar-nav .nav-link { + display: flex; + align-items: center; + font-size: 15px; + font-weight: 600; + color: #4154f1; + transition: 0.3; + background: #f6f9ff; + padding: 10px 15px; + border-radius: 4px; +} + +.sidebar-nav .nav-link i { + font-size: 16px; + margin-right: 10px; + color: #4154f1; +} + +.sidebar-nav .nav-link.collapsed { + color: #012970; + background: #fff; +} + +.sidebar-nav .nav-link.collapsed i { + color: #899bbd; +} + +.sidebar-nav .nav-link:hover { + color: #4154f1; + background: #f6f9ff; +} + +.sidebar-nav .nav-link:hover i { + color: #4154f1; +} + +.sidebar-nav .nav-link .bi-chevron-down { + margin-right: 0; + transition: transform 0.2s ease-in-out; +} + +.sidebar-nav .nav-link:not(.collapsed) .bi-chevron-down { + transform: rotate(180deg); +} + +.sidebar-nav .nav-content { + padding: 5px 0 0 0; + margin: 0; + list-style: none; +} + +.sidebar-nav .nav-content a { + display: flex; + align-items: center; + font-size: 14px; + font-weight: 600; + color: #012970; + transition: 0.3; + padding: 10px 0 10px 40px; + transition: 0.3s; +} + +.sidebar-nav .nav-content a i { + font-size: 6px; + margin-right: 8px; + line-height: 0; + border-radius: 50%; +} + +.sidebar-nav .nav-content a:hover, +.sidebar-nav .nav-content a.active { + color: #4154f1; +} + +.sidebar-nav .nav-content a.active i { + background-color: #4154f1; +} + +/*-------------------------------------------------------------- +# Dashboard +--------------------------------------------------------------*/ +/* Filter dropdown */ +.dashboard .filter { + position: absolute; + right: 0px; + top: 15px; +} + +.dashboard .filter .icon { + color: #aab7cf; + padding-right: 20px; + padding-bottom: 5px; + transition: 0.3s; + font-size: 16px; +} + +.dashboard .filter .icon:hover, +.dashboard .filter .icon:focus { + color: #4154f1; +} + +.dashboard .filter .dropdown-header { + padding: 8px 15px; +} + +.dashboard .filter .dropdown-header h6 { + text-transform: uppercase; + font-size: 14px; + font-weight: 600; + letter-spacing: 1px; + color: #aab7cf; + margin-bottom: 0; + padding: 0; +} + +.dashboard .filter .dropdown-item { + padding: 8px 15px; +} + +/* Info Cards */ +.dashboard .info-card { + padding-bottom: 10px; +} + +.dashboard .info-card h6 { + font-size: 28px; + color: #012970; + font-weight: 700; + margin: 0; + padding: 0; +} + +.dashboard .card-icon { + font-size: 32px; + line-height: 0; + width: 64px; + height: 64px; + flex-shrink: 0; + flex-grow: 0; +} + +.dashboard .sales-card .card-icon { + color: #4154f1; + background: #f6f6fe; +} + +.dashboard .revenue-card .card-icon { + color: #2eca6a; + background: #e0f8e9; +} + +.dashboard .customers-card .card-icon { + color: #ff771d; + background: #ffecdf; +} + +/* Activity */ +.dashboard .activity { + font-size: 14px; +} + +.dashboard .activity .activity-item .activite-label { + color: #888; + position: relative; + flex-shrink: 0; + flex-grow: 0; + min-width: 64px; +} + +.dashboard .activity .activity-item .activite-label::before { + content: ""; + position: absolute; + right: -11px; + width: 4px; + top: 0; + bottom: 0; + background-color: #eceefe; +} + +.dashboard .activity .activity-item .activity-badge { + margin-top: 3px; + z-index: 1; + font-size: 11px; + line-height: 0; + border-radius: 50%; + flex-shrink: 0; + border: 3px solid #fff; + flex-grow: 0; +} + +.dashboard .activity .activity-item .activity-content { + padding-left: 10px; + padding-bottom: 20px; +} + +.dashboard .activity .activity-item:first-child .activite-label::before { + top: 5px; +} + +.dashboard .activity .activity-item:last-child .activity-content { + padding-bottom: 0; +} + +/* News & Updates */ +.dashboard .news .post-item+.post-item { + margin-top: 15px; +} + +.dashboard .news img { + width: 80px; + float: left; + border-radius: 5px; +} + +.dashboard .news h4 { + font-size: 15px; + margin-left: 95px; + font-weight: bold; + margin-bottom: 5px; +} + +.dashboard .news h4 a { + color: #012970; + transition: 0.3s; +} + +.dashboard .news h4 a:hover { + color: #4154f1; +} + +.dashboard .news p { + font-size: 14px; + color: #777777; + margin-left: 95px; +} + +/* Recent Sales */ +.dashboard .recent-sales { + font-size: 14px; +} + +.dashboard .recent-sales .table thead { + background: #f6f6fe; +} + +.dashboard .recent-sales .table thead th { + border: 0; +} + +.dashboard .recent-sales .dataTable-top { + padding: 0 0 10px 0; +} + +.dashboard .recent-sales .dataTable-bottom { + padding: 10px 0 0 0; +} + +/* Top Selling */ +.dashboard .top-selling { + font-size: 14px; +} + +.dashboard .top-selling .table thead { + background: #f6f6fe; +} + +.dashboard .top-selling .table thead th { + border: 0; +} + +.dashboard .top-selling .table tbody td { + vertical-align: middle; +} + +.dashboard .top-selling img { + border-radius: 5px; + max-width: 60px; +} + +/*-------------------------------------------------------------- +# Icons list page +--------------------------------------------------------------*/ +.iconslist { + display: grid; + max-width: 100%; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1.25rem; + padding-top: 15px; +} + +.iconslist .icon { + background-color: #fff; + border-radius: 0.25rem; + text-align: center; + color: #012970; + padding: 15px 0; +} + +.iconslist i { + margin: 0.25rem; + font-size: 2.5rem; +} + +.iconslist .label { + font-family: var(--bs-font-monospace); + display: inline-block; + width: 100%; + overflow: hidden; + padding: 0.25rem; + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; + color: #666; +} + +/*-------------------------------------------------------------- +# Profie Page +--------------------------------------------------------------*/ +.profile .profile-card img { + max-width: 120px; +} + +.profile .profile-card h2 { + font-size: 24px; + font-weight: 700; + color: #2c384e; + margin: 10px 0 0 0; +} + +.profile .profile-card h3 { + font-size: 18px; +} + +.profile .profile-card .social-links a { + font-size: 20px; + display: inline-block; + color: rgba(1, 41, 112, 0.5); + line-height: 0; + margin-right: 10px; + transition: 0.3s; +} + +.profile .profile-card .social-links a:hover { + color: #012970; +} + +.profile .profile-overview .row { + margin-bottom: 20px; + font-size: 15px; +} + +.profile .profile-overview .card-title { + color: #012970; +} + +.profile .profile-overview .label { + font-weight: 600; + color: rgba(1, 41, 112, 0.6); +} + +.profile .profile-edit label { + font-weight: 600; + color: rgba(1, 41, 112, 0.6); +} + +.profile .profile-edit img { + max-width: 120px; +} + +/*-------------------------------------------------------------- +# F.A.Q Page +--------------------------------------------------------------*/ +.faq .basic h6 { + font-size: 18px; + font-weight: 600; + color: #4154f1; +} + +.faq .basic p { + color: #6980aa; +} + +/*-------------------------------------------------------------- +# Contact +--------------------------------------------------------------*/ +.contact .info-box { + padding: 28px 30px; +} + +.contact .info-box i { + font-size: 38px; + line-height: 0; + color: #4154f1; +} + +.contact .info-box h3 { + font-size: 20px; + color: #012970; + font-weight: 700; + margin: 20px 0 10px 0; +} + +.contact .info-box p { + padding: 0; + line-height: 24px; + font-size: 14px; + margin-bottom: 0; +} + +.contact .php-email-form .error-message { + display: none; + color: #fff; + background: #ed3c0d; + text-align: left; + padding: 15px; + margin-bottom: 24px; + font-weight: 600; +} + +.contact .php-email-form .sent-message { + display: none; + color: #fff; + background: #18d26e; + text-align: center; + padding: 15px; + margin-bottom: 24px; + font-weight: 600; +} + +.contact .php-email-form .loading { + display: none; + background: #fff; + text-align: center; + padding: 15px; + margin-bottom: 24px; +} + +.contact .php-email-form .loading:before { + content: ""; + display: inline-block; + border-radius: 50%; + width: 24px; + height: 24px; + margin: 0 10px -6px 0; + border: 3px solid #18d26e; + border-top-color: #eee; + animation: animate-loading 1s linear infinite; +} + +.contact .php-email-form input, +.contact .php-email-form textarea { + border-radius: 0; + box-shadow: none; + font-size: 14px; + border-radius: 0; +} + +.contact .php-email-form input:focus, +.contact .php-email-form textarea:focus { + border-color: #4154f1; +} + +.contact .php-email-form input { + padding: 10px 15px; +} + +.contact .php-email-form textarea { + padding: 12px 15px; +} + +.contact .php-email-form button[type=submit] { + background: #4154f1; + border: 0; + padding: 10px 30px; + color: #fff; + transition: 0.4s; + border-radius: 4px; +} + +.contact .php-email-form button[type=submit]:hover { + background: #5969f3; +} + +@keyframes animate-loading { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +/*-------------------------------------------------------------- +# Error 404 +--------------------------------------------------------------*/ +.error-404 { + padding: 30px; +} + +.error-404 h1 { + font-size: 180px; + font-weight: 700; + color: #4154f1; + margin-bottom: 0; + line-height: 150px; +} + +.error-404 h2 { + font-size: 24px; + font-weight: 700; + color: #012970; + margin-bottom: 30px; +} + +.error-404 .btn { + background: #51678f; + color: #fff; + padding: 8px 30px; +} + +.error-404 .btn:hover { + background: #3e4f6f; +} + +@media (min-width: 992px) { + .error-404 img { + max-width: 50%; + } +} + +/*-------------------------------------------------------------- +# Footer +--------------------------------------------------------------*/ +.footer { + padding: 20px 0; + font-size: 14px; + transition: all 0.3s; + border-top: 1px solid #cddfff; +} + +.footer .copyright { + text-align: center; + color: #012970; +} + +.footer .credits { + padding-top: 5px; + text-align: center; + font-size: 13px; + color: #012970; +} \ No newline at end of file diff --git a/public/assets/images/no_image.svg b/public/assets/images/no_image.svg new file mode 100644 index 0000000..0b3518c --- /dev/null +++ b/public/assets/images/no_image.svg @@ -0,0 +1,5 @@ + + + + No Image + diff --git a/public/assets/img/apple-touch-icon.png b/public/assets/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..78b2586da940aeea4661034925b3b7064ec38a18 GIT binary patch literal 1201 zcmeAS@N?(olHy`uVBq!ia0vp^TR@nD8Ax&oe*=;X`2jv5u0Yx`NE zltlRYSS9D@>LsS+C#C9DRwL~E)H9a%WR_Xoj{Yv(BHbquJE^Z1H zxjA{oRzh+i#(Mch>H3D2mX`VkM*2oZxhsGmR7ebox}p*%KL=rg0vdR(C!8Rg&}N+nS4?*8cH6`65H} z-lG?90xwRIX~=l#tq}D}R6uvRNXN8ytR2&M1$Et(qN0?duDO&HGAvT9WL>oMKJ&#* z9*r56ZyPdZo@>ll*^!ainGq>`ag*Aj&CCM2e}y`xeP?j-p38i(D61i3rIbRH8Lxn@ zyKZHM<#Ja3xm!8;by*AKrY)8QI z-=<{US+?uDZjPdBzG+*Il-3bJ-%-`2r~aHI>Wd^*a`q z>|MZs0Xp&5EQX6!8Vwn-!WVA|U93`BRO;+<-dZ8*varC~)xhxE#J=e31cr;h!fdpv zq}^XvT3hYX&pXxT)pRWTxSRRY?VnyBO7C@(erWXYukE?R3GUXv)Ih-ra%uYoYlU4m zfT0k<1d1I<6ijnvShSQ6Bc6aUqg%=cim_={M=tKHdu@0jXnNom340~cqVT&mZS%tF zt9HHpx%#EU=GAJ4&#uYS{%$%mezBzQGYq4q-IVD7MKm|#qSR{)7lTZJD#8zCZx%_I b8?m3^>6J5g<>xeOgR-xutDnm{r-UW|(oz7Q literal 0 HcmV?d00001 diff --git a/public/assets/img/card.jpg b/public/assets/img/card.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3ee97efd007f80c4fe8b35573208521af860fa94 GIT binary patch literal 165599 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%0AT$yrC%n{bTe3*sHzC7u2*&m9>o8 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 literal 0 HcmV?d00001 diff --git a/public/assets/img/favicon.png b/public/assets/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..f9bc1743c1d86ea9ccb5e6c8cff94be527ad4995 GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyegQrqu0Yx`~AK&_v0S zAirRSmoK8TX0E7A_FmB4@?~@AWR1614+yg5SqU*r@L*tIWXueSD2ed(u}aR*)k{pt zPfFFR$SnZsW?-r5%(GQ`zk9!uy`4>wRgjCDLPc&)Ua?h?tx`rw zNr9EVetCJhUb(Seeo?xGK4vJyzMOKNd)QD#9& zW_}*jkP5gVdBspS09~VBkyxN_sAr%L)Ky{ST$GwvlIjA)c18w9hPnpEx`sv}hK5!q zhE}Gg+6G2e1_n0zDC%tVQ7p3q@qsS4L-;E-FU3}=2JGXyi=6Xrt_9wU&Ou! zH52xJu8c_z6Arxg7xnlGu?fy~5?5PKW8m2l-VenzySKOw>WzhANHLJ_4=dzp=oBhXD Vwfwst-7KKE@pScbS?83{1OR@x-UI*u literal 0 HcmV?d00001 diff --git a/public/assets/img/logo.png b/public/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9cfbaf2dec1e2f9140b03605c27f9dca6addea65 GIT binary patch literal 738 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 MiX`3{SY6Ei7a~c082|tP literal 0 HcmV?d00001 diff --git a/public/assets/img/messages-2.jpg b/public/assets/img/messages-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d75b4e6ab019ea343deacd30abc771b9bd2ca35 GIT binary patch literal 5484 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

v} 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 literal 0 HcmV?d00001 diff --git a/public/assets/img/news-1.jpg b/public/assets/img/news-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2c77f1da07dbbacd8bf54d556b4f3e77ed006b5 GIT binary patch literal 83411 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 F|3B||{+j>* literal 0 HcmV?d00001 diff --git a/public/assets/img/news-3.jpg b/public/assets/img/news-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..710ec0ad807d51518ad67eb77f0d4e589ca8ba1f GIT binary patch literal 71055 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

ms*R_-R&L^=OjnH#%YAoy|RA=!JsasNbhT z%jtT$48=mGYbQ*tP+Q5>&0nSCOH;om&4o)XpS1iJ3spIF7C{Llto2xm2D)ShO+E`A za`pI9UZ%Uq5ddWel018RD=ck@IS+|(uuv;ZD&yM8r){+7>|%PoFFy+6KDRgISZd`+W8zHvDSWabG~#o{~-ym$oDd1i837+pOu9Yh!|jg#3F0V z4^;nOZWBOI2mc4qoo-2AFE2+e2W%XTALN9$bC9cdC6m|}tP~9Y`FenHGXR6fKJHo1 z((+VJXQtYhPaoh}AK69iGj$xi!OM4|CW|)d5@ZEAh7e8r2J~$suLVQl=D~rxdT9RD z2!x4xzcwXwmRID*pH9!Aurs}CSg~}<8m_plX2fFYd_((p(s==QMR7d8pnQ|A#(>}@ zqDfKr_|lRQ*IgVj93nh&IY8A#(m_kacaT&6qDzCHM!9`y#JOqmzN}a=RA-Fff8jlW z4eoU>OsY*cefT%ax-a*vl&hTxk=Sk{GGA&fP2~FY^T|Yl!Gjm0d;c+L#c}3#KiNioYUmv@q?dh_v-^Dx=vG3!2?;cj9S{c~RVKhGH43_! zm<*OG+>0Mb64o1W!Erj8>u3gVm=%dr`8!b&pqBf?G`=J1C6w6s zVPzIOg7SH+Y190ZquFXR!$Y0H(KeqC)-c$eXnTA9uy>aIWoyTM_^_jq{>DB3SdTI zwDp_dou*ZmhV;^Z0197ismCg=be_EiE6p#&O&FUogQqh`<6b0VY;QTC`@5B{k3XJW z4Ku<*ELqxVP)7C~vw^_DiNd@uOsMi)Q_cOkXc>ewB`R5_#mu%!* z`EuB(TfB^)u+``hq6v4Ua4)VS;L5-BDzY~n&wzp3T^d?#+owxH(EI-Y!ukr3Uxo%z zy;S`^$E!=W9nbU+6wVI%gv5x6Ss*32z($KQfpTC1f3|$o591Xe8 ze_feOqA^OEmxhKp%TX*>AII{BMi()*S3fRrXSXu$;&@g?sT#Tm#IY}&Xs3Q`O#;{f zUn#ZkjQmVp&rZvBx3$QWS3Gd9TVB-nCjFkQTEP2BS9SepncLmb;&fDpX}cHpFX=n} z#vmg4+%CSizIeJF&^fxecJmKl5`OZaR%H13!R0|8CV2o+8X=k%8QGR#9V!pj4+mGV zM7BmdC>hR|#YADOaBY>4sC0vOy5_Ph+5-J+i+t0R7TMIhx;cv|WA*Bep$K|rubR*6 zpEAHLH=n9vwi58aW)OxhKTwmuHz!9D=J3bX$2aRAWew!I+;UcPR^x^Jl;lv*=!ZMNc3OdmOeq%rt?U55N|prDTG=Uj^^nH;~7? zmM#lA^?*e>2lwTy71OBnakaBi_xZbUWX(`@eI9#vhanEUHn-blugeQ1%OJg(A(IM--o+^2#hve^C%L;knR`WLJ6kmYf_jFM zoC@}eTzR(DxgRPS^E03`Ser+!gOkT6Bd>>7paBES5Lif9XdT1aKty>45-HPPrfVl7 z4Cayb$88!S=9c*NLvrkg(?h6j@=jzF;V&Fd!Xv)H%%8Kr*JS34cW+i9SFlYtp(HgU z5~=7S(EQBvkySjJRq&|SPuFKYQD(4Q+I}_VHT8uP&bryM`Av(9K_T4WwXX#V!HV3K z{aK$Euo^ji)FkWJ4lVo|c*T-G+q!#Gg0WYO#^OvjhF{0Kwn?txnBCmU>#$`^oe_vK zIk;R}W}d9(PQU*-XLa><_Ec-a=(xJknPnC$|CegxBwxtMffC1lN6>KizF&r*!qdTK zEq1+S+=xl->99OM9*1LTD}8U79prJsWNgK9nstaNMdzj=Fq_)j2V#6dvM= zD3cstob?4iRRt0fbj5!KHiKvX=Vd@FV(`e&1UVQ&F+YCrL}6b>-@uEW%#nQ|#az&} zXEzWc-S!L%7p|Jx*l^Ae!kyG%&RuQNN~SUA5uvkJrNUKlEQn{4s988P!cBJ(Gus=# zjlo54v6R0=l*45m2=vyttg5Pgb@T5MK=o&;+O};)`OnsdqV7PPd_cn>fxjl8XtO=4 zyrE$fnY26=5iN&%A6fR;?s?2wH2>#lM#PA8Py6-h?l6mj;$I<6``{7OlO+i3Ry5=A zM=2^jW(c>j)Va5C=2wY3T2L3rB;pdI4SMeX^3Hi@BL!5GD+6;dtgq>OA`Tp{T!LXG zyO{J7*a#wSPo~wm^JP&&Kyj9zi0y70N1GwXifcsFgWjxTmlgy2lp#6XtvKS<*RYuU zmOH?4#dJ>Q9G(WQVCJ?u2ORSUr>AW4zsyfM)Ss?4kG!TmlK0E%&@&ijUi+x}JTqKu zwp9Dk^r>X}Lez7P)^6WcasOVIt}bgmsm`02PpX&Yn&JMpiX$1lnQrorv1bTjx2-L^ zAy!TIi=CaAw)+8L+ZfxBvNm`~D81qaO~fVdpXkMCTerY=bn8a2TYT5hb+MF2j6s6V zEAmvTg;+k3xI|SWBGXKXxVMBiTN^{&DC^Y|Y5V0vm%tq)WHT6p4=(B7e+d~#8+~z7 zw8{N^S9&H04^ik}!bj~5hO6qQ@r7=(GZ`W|j~ogp1lta!W`hAAub(?sKAzc_T79f)w|e@NOG_b>3*53Q)bWOsK}yBAEWE`vd>|qec2#Oo zUM>BCOS5AKGhl1~Z5%txfPvz}dU_FkJ2rNdo%u&U-~m`^7Wl;oO1~FYvm(KT${F#mF72Wz&&XqJ#+g`qz=THT+h9!-pq&LovUA*KB z{_2E0`m2o$!r|;L!$SrF!VmSDQc%$rEVl_t?G5O7sS&r#D|uVZ4kGuRRcVQM3ut+#s<4mtB1f3ff-0=QJ4YQ!hIQt{W8mEB`OoyV_n~`L@yocQ+V!SO*Sqkm|b($8y34ABJoej2cSq&2(JUIn36zUIujT{Xm55>@Y_J zFhxho%bHr-6q_K?kn2Lla)}Z}CDG0C?Z4?%)*OaHKRwk02RJz!w8UW93oRf3wwzBys}V0(GMjEUzT@K zxxND>FrxP6@7Lk4Aem7za;P#MyJzLw@@IOA!(Va3f$EfUc z$OIPQr~Sv z)fs}6W3(dO%|dM}TG-%MXy-`KaX;F?%^D*sHlVlB|EZAj61gEK_-A_~$bTvEFrj)J z|7wI)gABDak^t{)_%CEq8kGrFArv>OdeINi7jaX2Ri!zF%v|tU6^fNq?RvRD4ipAW zRv_n~BS&8c@yq)&ySo8l<^c!NN?3>NpKL}&FIqjY1 zcndD|6tBqr_FSx}9iImMSnZ_$G)=R~#;0;A?Wts@#Dj@n$G2*)bSd!pZGH%3jD5Ha zSt?vgFFBIUFKgMttob3H zginQ_#WOV9@{zh_eZuy3tL2SuNErV7)bi9Ckso`6ncM*KyUNM*Q>$Rv&I<~1i|$I( zi-8iq{{af|{Fl*+{O2;k_J~5?ozDObelIzb{yz>jjTo-}w!6&JFQJb<8DMTY)2LUivnzsOBSe19(1K6@`jM~{Yvky~PHEuHf63$gf<9t9^&KvxKF!GNL?21Z zw5KRj31t1ECxv;H@{j{%Yxfc(`N_t}+gVh1ak~Ei2AZS`MNT>x;D+y~OP=RxLv3Ta z$FCrzXy)3`&A{>SsDA)E8HGlM$1ycK2#c_<8(}_p3}kQR^f$~e7Z2%0_i9AnU>vw@ zFE3kdWBypQ-_tJ{JYh!Xkq9<>E=h(m_9AKyedo0U^6@fPp-Pf5c07UD zgsltXEmYyKfF6DTgIUE+T!nl6{;_r~pEuyr?g(q1^zbN)SySKZhipf{E$Vo7$!mNP zMC(EMFOH?m#6Ck=x*&NAFE#ni5*NLEYS$&)0p#>UhAinwUgr-%2awG!%wXTpf$a)L zR5kGHq@gYD04YA}ID?Tz6U^@%*fo!#<%6-)tNEP=A2Ds(KM*ev#b^VL+Wk|!J??zA zlw$z($*b_FY53Fgqp+LVDF0TY_YM8bcV@Gl7jj!ARqRGX#M?xAu1;ZY8-GGCgp#Tv z`%W5Cm05!R`LZRa6XytpR@Ik{-5jp5WQ+oK4~eE`6zHowTs5VZOt^d`ty>1Y^fLhf zq9H}8onZRR?tHg$2k^vzym)7;aOCbcM1c&t?(FD5K0Npd0}Fx zRd0XY5`*hn6u@f^W}L4P8G0uv=N*^lYuBtw!bnULZg|*@uB=}Y^889BCZL~8m@-Z4&w1vJ=DDJ-Q%@uvJ5(D}N-3m8d1tvx#>UCYlxjuKVJM+#wNP~_Mkkkt zlT{?C^!233DnTzj^VIf^9&AgJhLmXn>ob9YuwT|kIZXtrI@X1&QU~)l*LcM!?*3iraOU8Qgvw7Wefbf$(HwPc z*_$bC7@YZKct#y;c3&edCkEN<=*7>No0;YIj63O-xl2KQ9oHn<@KegZc19Ft#AZ8M z=jl=8`Zf|f^9gZb*s8bivmJ{o8x~R6kiL@7@yl0hiKd!OHJ@y-Yzk(u)&+ifZ>hO# zy%IuF-DxBCTjA9?TrnW)8OKPFG+d8P-AAfOs$doX)^C6J;+=%E)Dl0#%T>ZIua^{3 zMiTcQm5wk;O-!5nfy*82cOuCU)CUuC{Y-g6Wq!J4WuJGj*vIK3zs5!<{_vw?51M@} z^h&iZ3fsVE_!H63zvWxkf=_f4Dti_C2Z!(b**kcZ$}_vlcXcCR(J|ga{mBNn1kY;> zI$(pPxp_*bhpf`wdr7h9;?)9%AOw4*^du584V2n2R1)S2TmF0jJb;gp4QzqTo?r)r~yD+O6`&0-8-Tf!Sm|~%*>8OseS4! zKbkdB60V#Spd1QIn{zPa>CJe7JDG98H+!t4W*eK8WLt7yrv9FoG$^hsr~H5&-Q2#C ze%Pwm=peT!N>!Y8sc><+fl$nNElFYJauklK*+p%4^IvT}ii2yqszCa3aU`xGnfTF7gM{Tn@K!3qxvq?qYh8h^ORJa221J?8_A=y)N6gIr`oD zcbO=vFQ>=1EbrN^JB`ma>jJR{8&TFvQJpavqDPH6(ylJ~4Lc}Qm>iw(52M|1{LjJX z$CqQ+BDz5nW4~|m(Q>V}p1uJ#*f~QDU*<;F-nzz5b&I8_(N#pgRKWO^%yxuKU<4F3 zxQiRHIcM^ms8P?&3fz_W z4}DL>g$MA#eU;ux@a6c+B}>SvPwm`n}2?g56mO!Thu|!$kOC%3M~55Vj##a)|G4-m|rL?UCJqXWIt{%lPZr8}oQ-RUk#^A{I_X*GL)xaaMY+9PK@=fy1HoaMt(9nxW* zT3_thMaaNCR`2M46DemlS1Hj{mW|sqk&Aw`Q>u^2PcNZV2#2)jJ3X#rc@3!?9r=zu zWr0VbWm+J^r#Y)-lo;6}RBu<`$oV|-bEj1Om9@rsH{xXGDwa}`mqUnzJVJh>aOPLXa&{o^ zkn6dh!p(uW)sD=S=e{*|=X#Xl&RpO$w?TYI2>3sKt3;Bv;^V7xR-Sq36^d8nM_MrfF6X*bl~ zEV#g_0e8}~6&gU6(*V0LIS>)p?oD%ZFgx}0$`iTTHw5!7Zwh|DGAQjo2@xM=QN-lu zabzDwDsF6)PVV%kEQAMLLANe9>uTr5HT(5`syCFC97l#+?Rb<7%A`g#d9l3vq_pyw z&%DgRPiKCV%PVWXl5H(6 zP%UU`SEvp%DX@F~Mc^!=f{ciu%Hy5pLd2Z+cr|0Yy41vibI{DoS;m*j^BNNIP0Z8* zwhG`E^NgTG(Ro{+6?FgE!G4L%W=_!#8Zm(1iiC%Tw~HOFZ!pW1D_+6FJ0Zml@6q8V z$Vp7E%;xkwezHDHXi^@xy6&LfBKs;#VNr55_4jG_>L>~~ZX1;0V6&o_(S}e=_B^Tk)4Kj2$-KhU*#o$i@oR`gA1B@a^ZlQnx1Xa zDtzybYwyDOV$t{MCFbXdD@f9-abpDR+vPy0ZEY#c4)Y*#XQPbrV(w_?uuVz(mmQN^ z$z)7qoer+qR`w?zI}_P=Fa+01+zwa>|Rmn#HIL;t3kh}?Mn`b-mLEX)Wtc?uMg*YIAOUkpFSBrG0o!gzMnYP0tzZHP*-~+x4SnA;48qpw0Def` zM;iYYK!OsoX`axum@k8ddUaEzGNb_kL^{nzweua=w1AsoVp55Cj-4fMEcftc-Pyr{ z|DyZ>-M0%-)A~XSxu`n=t^@n8yD=JoqodBwXRztF>9}dulv&8h973&q9wT`6H(%xe zmj2pc^Buk_!{)D2S{>%{IcwD~$UlJ1E)MYw-M^_jYP*@TF6_|sV@+|#u>Iy@Xe`Gb z^%HY|YgT%^|LSkT?jH*awCqn_CX6sx?kwj0uxg+FDYL9UOPPa8^dsoH%*xozQepi< z@r(CniRytL$w5;GlTxio$Wb-OcLvbGhBAqkg}S zjyB?lyFEDHfw49GU*E}C(w{O{A~F#{QMW={QGSCo(Iavc;u(E43CSK91#zcVIvk#J zOMd7P{AytJDn=or1s3i1pHRu67YpXn;YnyYI@^mQhXMF(l$fG)K-pui;M2{ zX)Y)(v)h9zJik&~#Oa!7On6sv^tZIAnsX3oNGybXPph+?dK36fb2%-zP^Pm4BRNsM z{U?x(hv5wkQcHqftYVel3ci@W=9@)i;gRQ^34A3cPaA{f>RkV{uOovhmvWB&Vfh z!*I`E@dU6*{&22{H$=#wC~PAayBQJ1usmXh`#WieLSb&(cQz1j=`IbM@O9f!SHqt| zcVB}SXJTIC{$^bXvkqTHwUGT6by8ykTeGqW+lj!;D9GU33|Y;vm~F{6tDUJu>-efA zC(m|!%ZfCbK=tY{%is%7|l?f3!chPSHex(hX`u=TC*_#~O67cu6)9-i6Eon;S+AbnH2VvK8pPqfH-yUwI zAKcRMS$xr)A_HF&+z(~Kn2A6Fo3i#2ARRkFmmNVk82-!I^?+YFw#Xn98_s_5N9^~c z;`ElC1XsVTCuE~}WAe4IiuiU^Ouq5?%*M{kJ)0Ylf zwGLS%@hK-GVzNVztOG@%sNtUe9T&4NN+SJ;yS8gC)ok%z4##I3%S0O3BUEu$y?^jaBOYbmOu==-YQg!Xko9o4bIb~c zxm7g6_RsF`=2H7|3U8c|5gt#>zq3A^N}%@f9D9DvOXAH}7=4d=14PW8{6iG0eEh(8*5`QNs!L z^ge-%=(d0z$y9zHGJ8+LAytu=Kd2vpD{19L;%#R3J#bse6N*C^(HC(53KueE(#A4e z!r=G?_E<@-{1paEZPEWG!}xhx(Q4sv?IWA_^SeGKTE|c>tK^g1vulU?cxb09e4Rgb z_#Z&YEgW;ykX|hFqw~3oQ`B)cON&P{$D>}Bl&EV1h@V*d+(Fdt)p=BVTUnH!TT$>q z6)q;h3^z=BcRmywCVpF{7+T9W9U?2xeFh0_U%DuB!~WQ{WoKP|&?!hv^EPm*nD=th)T7g948ucV? zV)EHUONVm_&-Y5|J`J6*CE>FPx_;M9xsJQvGNynPrn~Q#NZr(*om{#* zH?iS?l2&!qe-*sD@$EpotgTE3hYlM!Kn7rZakxzl-0W)oWw~0#Y4G&PtngmgnSx?e zS&0p#B0)bMZfUcagtm)1L1MnkU&Ze%1ig5jcQpG%o1|SK=yrK6;@}SQgu(rnk=M`i zcCovqAqVN9BMM5>tNeQKKl8uuYFfeQ()T*C6}7rF?NFa|_F8IfcEw^%ri^!0Rl+)` z(h?_<)7tH7c3`3VoA{^Qy`lrp|E^R>;#pys-q`?7iN!R_*%$T1^W^MWiN~JUG$i~2 zt$>btR=y{vnlo0)08P{9z*Fpv`*3zeiH5HNu zp7>dzu)oJHn@*px!=vHD?KxP?TnOa)EX{v@v@+j~lC=R>Gqcl+$j9wdI8)X(|V zWPjkO)e`3|!;;bPQ$4%9kgKiLcUc_c>dMk*Q8EW2HKFKY*N`MBTo;E0qq&B!Li1Vb zz9T`kP396#AmD=QhsEGG?j+x+<%;CWr9-Y}zGyDcFMLA^1&x$PM7++oyD!Hp{-oA9 zImLVm*=;`)5!WryF)m43(lv=eF({+*_V(p0slPIB?p2bb3qM zrdTZ5E#}iCX$Q(Yy^-fQ-l407M@Vhr}7qS98H&9Z}8!^&In+4p0xcQ-4j_y+YttY9A zSzFnrL7C$b$rGu`zk%x@oSJ0zgn6T^g*yZ#?np1l@cowQX7}fppu)jFQu|UE6nrpX z>*nIQdjrzb_irV(&~u}d1tW`+cLV#iy`W?knDs#JukeI28@?w~m5S5XXrcFO#N)<6FbIJ)F=Z zur_-(XKN;>lR2H&K3D=>_+))pFz--KkN=jfOLi7ocR)+0A`spq8R>g05 zlFmw$+L+0yMw+PQ(Fjo;Giz*Onja@e7E0MhyTNWBXFJ&ll?y?ttBlNJs)64Y^LV|c zQE1&~k{f}NrSKjmuj9}%)==a>0OMYAeZgvpk{j**kG7_U*e#QfgDajsRo9Yi$qTBZWg8HU-ntd?ok__g)2-o^7zMmTs% zNk26uiz4+HbmnkOvpus}O0!8)m)5*-i_5aoJk5MOQsf%L`bl6XRKc(zaLSXMP9)j$ zq4=3|u=Nh+_JkMy6;u0t|7-6?jN8Kbr&6qIZquWxxT7*d)ToKRqJ6s3r|gra1SC2` zKOE(iywu(^pABcnom8F7id*jn*PFZ$(6|)dwdAgUeld0V+Aufx+tnvRn^}g_*6nSc zLaq3$7C|xD{^R_TrNI-aXumHxvgwOeoaSr~Ghb8%2{-{e>6%_VVx^|6j4Ir_N_+*l z7>v1_Ea^Usq<Q_Zn~g_&pF5^Jz-?iQb@g{?69YIG@qc&gj_L9>m|0NbGW6&5 zW$3NEV%|`PP`^;e0mHo2Tya^)&~3=DZQtLb3fG|`rgOKlu2A@@c#W@J`(Hog+}3Kw z#o5vDCMD<85c|-)?6{b-xtMi#;ry#$wDhoU%E@avS*G7ln;BZv*n3387Lwm{+k%b0 zjcH}8hDr6u=;NbZtF-vRk>_?Ni$l1Y313|Ss$XDb%k9MEsd?h}j(N|MiyArDIm}_w zVxqDChp4ZPYO{I5r7aZN;_mKRv^d3!y9FyQ!QE+br?^9L4Z$f6#R+a9xVyXe=KI}y z&P~qAA33}G&dxi#^X$&-v)W}5sBPY?XXs7N)%96wY< z!CX`5YG&GIvLq+Z#W zu7}gS=2QmlQ`g!^g5f8g_Sa*>qJy4OZ7)YF9Qsv-LobncT_Z&qhQgqX&kmX+MPC~P z75!T})3C2^{~;i=4~|VG_QC@e>2->&8E7)P5F#a61j|B9u6<`#zEHo?wc{{d*~&SO zwYn=faQRS+Pqh&)j!P9aZ$=}3^tPX8DB}B6EfI-??iI~%6f{1{@$m8M*@u_=>MSL9 zBcn`>&-TW)9)r-FK+xtDM&VANvVV1LO5v4HB+Ev^gx->*!#{-heIMx1joQl2<0`zb zxhEq7yG2K%H&=H7aiWk3GG$sRtT$+X0s`ia-tAxP6D{>MW(|0WPKfQ?X*9DhueiV+ zZNOe0sZh24vES*M5$TwfSb#=)&|hgqrh}xppKYUO0Y7&JtGwKf7Y;)7`9cs&o3u+- zvE|Ty;xU`T!8q2WL`>Pyj_8^-*VGF~k^8|hxu@O)F*byW4E+b3hhR88YR97>C2jbmL$*sy&-<9xWtNC_hPU23*T2f6 z|ICrht_r`X+(-wq?_ElvZ7iY&6$4%ZtFMkyPZ%EmArO>Ju*P13{05{#L&d3@ISN04 zb{i`ReZk`c;UW?;Tq#`1)$mMP%UWO8GvSIZ*uvzV&|i#Ot&7+vq6O`>DdKk=dX3d9`zG z>xK2GDo~a^xH+lTd10Il5g=VI>yesZVa5H0_;1_PN$i>m-z@Vr<`NSuym**k_;Kn% z#6YDo&+NJrJxhRi3va!MH6yj6rMxnDNqGLzqVeRF+@AqW+!b>)MT&%$!rBNpX;s=Y z@)DSJK#~2_9=Py8B8p*@mb5sFFNcktUlRpm*;2SIUKY&xQfM?YVfYUL)pmEZ8vPsB z`;cnc4}@P+=HFr^#vDYsy)w1B|3OiUm@IadxtakBQotI}oQBQW(yvaPemQ$Zp|LdpF;*cV^Om%9w#rS*Ym)ZPYfH-j617NIF4!zsPqH~G@mQmDO{x1jx`rOx zL>*-?CeI(k9n<(KplGpz^oO&)KAF-D71PBffZm%A5z15f&Y*xqAZpJRKaC zHxmYzFMn9!u8K65J%&nT%Ss-ep4FAvIZNNMlVcZHScaBJ57ilL!w>d>att$z>vbDcK< zRlvTj2X}hyUmuMLS{7wm$(A~f+$kG;acJ`%_y1)q1QxJFugR!xhw2$Q zF8D3;2*@Z&t9~A)Y2qyVR`qVjsV~M&awe;h(L6snZ%JR-A4>i>$Bcptrvay4P4#?NJfBmwu~=D%`y^6^c)wes z7N}*u3Z;!fB~x#BqqF)?+fT0hQpGLtI$hU{)Ru&+>s#9Iyr2aeKW98QquHQ2(Cip8 z*T`(Z-vhA4^Ed8?yX)j7y628N>&EyJ`?JjL9Ko8JCLv#^`E2t>X@r$;%_pdc)HLH3_UNL|AVni?DmR zKj2RPbr1?9Pjoq`BxsJ!U1q=OJq74gxkj!&SAw>h`I<#Oj)?dUExD&zB|sVYb=FWx zV#;S$+Mj*N^>y$ZGZM?o65D6(q`A)P%2?Fvx*;~Hw0?<=)Gg)sUzap=COSwi#Z*)@ zugifd#t zla6M&cz7454mhLD7F&3KwQ?krnMim0)tSFimL)Pr?a0xa7Mtp6E0kO2*%M#oDec#0 zl)Oq``8RkN!A?M)%iP78>u5-^GR)%xZodsW-;hDxqlE?8OlK%FtD*i5p~;s=p&?!# zQ}|Swa!Qibzuz+GP}iA!W44^u#pG|~tG}1;>Qz%GkIU+eSffd+g@q>t|H!`kP+QJP zxi_6A+Dd41#Md0r$hVxagQk`uOV#2ZTZnJmiPzKOR&kb= z$w7wT=7fW~$Icf;6*!3m*$3&Wgw&d-g0gQF)LdMIma_O>NgvZ!RYa$EPgm^@1jHmU z%wko>7k4T;1kHSXrmwHTGu0lg>MUvOp3Q1oU7hh_Yr92l6yZnKh z+Sf$TjcRwWlHX%`jL(t<`XNk@F9$b;45Lhq{x>fOsk#;M8+uoluTtzUR^X-NeN(U? z@S)8^j18aAhw>KkJL5b5Af3)U&5!iVaESdc@~%Z3Q>?SrzW&tcd!I1i3D{-xCBR?h z-42Lw)Ev3aVbSiday*z$Vt}4Lf4q~#F8}cfBW@CCf_B#VsV0@{%JXsm3;4>hsnvbH zK|8f$5WKsODhIYJ6G&p{ejHPh+^g273>@-n3MN61z8lXkp-g024|Duw?a&o$l(l#O z1|5GA_40gtYB-3J{a*og!M%r3HEU#$Qi*3L&Is!5cK}&L7}ZW$Gx~1 z1XNG}+(F+hGz>zOgl4{8Q*@I;gTc93B)ZM#)kM9sLnS`eJYN8S$tN3vTc~m?v=^{t z%y|Jd$`SmzFG{mX3KOLQMSSsZLGjf=`*3K!{kMSxynWW;hBn{$U-N+Z#tZ20Ex;WL z8*tK3w%ZAlE#PJdXlmGe^$}r}R)Yzb25=3XO?(LpbBEV}SD2oj|HDW*F;VhMG8Xvr z>O<#NY#@rzDNHgL5!hUF&ntn9p%JM`Ubt7JV}FB+I^PIl16DWuuj&kST%iqdeDyxW z{aNzop(yeU;DL8atm$R&FDE9ch+?T$SFi=J)DUR22qm6|3eGngQ{Z7-bQaB7RNV)P zX1>1ZzJWr){T1xU-9C=75`;lahZcgB*Dx0}cy~Z-Hb4afVC;XtJ(^N_G)BWF{#NsD z=rQr)XVttQA4L3y#v`!g#YcAJLEm=<-5HSN5qFg}1z$s-BLHB};K;xR7|RBnXz zIw0RmD#Te&C8&u*uH7?62p5E2N`!ab27jGzsUm^Q{{35e27CYhX5B>=E@rh`<3Q@4 z)yIe~(W0Tdp@&aT9;b>ymICbR=_grPez&3^AT`000EPvx2LTrk3fT?a3;y#END5fH{OaM z97BmRUJ%;!Yjc`3ysnqEN&Ki7WFz#eU>&`6ooZhMK$EE0a!COX4&N$0tf;!rr*?$H z`}UuWq&_*8MaV*psbR#osW(&D$Z@2({Nz7ufH^+<&ekC!Z|!1gAa7NITRvhzH!=6* zy{p!iG~WM8qM&aCy#WEg0)L5;7zT1uC;^X3!y6icd;4OYq=m7%ciMqpeK1tLhSG5A z+$g4lgQ4>?lc6o69&}o5e)8a)$M7Z(J-a0~afzt4cRwfWLnetqyIqp%S|mpTQwp2` zVq&svAYiP|S&d=f=dnNqg{0u%q?rVE4rOUvnP1nW@e!LAVv{~6bzHr6p373XvSdv^ zP$=m#Z`E@MSX|-zG)7GfnG&A3_l|UCFP<=WR8;6~-}d&k#!OOlbW&1kLlk-N65yIt zSA$~f7^X*yzPM%<JE|%u5+Ivu@SL$lwxom;I2(s&5EzB68BP-{-DwyoO%P2Q24i zXBR2c;i?fcf+!mVrYSH%M21~Ww?FJye9`!93vk&h`^wWyO1!g=vv-0}P!waS>u+9gmh3iV3-0JKIXPL!72Iq|lcZ{T}@z@^pw6 zOC80yE@*0KvKgbKx5D&z-Wr}sg^rAXE&*q5Lvg`W(Q89kch;=X9z^kJsrx|kt30Jo z<^3Pq-fx3}Vh%5N)g1x67UjY!C_DrEMWG1+%CVyfNt`F*7-~J_e^Ry4q=jMbH;JCr z7$kTcRI1Jm{3w*+ROoMQQCwEp#%LQhd(CXRXT4k!z7?A%*L$&GI^iMrj(3C)`nTNz zj-W?4hhy5h5M+tLzYASoWbW5UYav+H525hW+7YxPNA=rhfV64Cb3%xkRdMjoA#p^^ zZ5K?*pWPnMQ66Bt!I_HgS-DLuYGJ)-q4>nl?p+kaezMh1_HY-tW$be~m5JQfI63(6 z>JWJ$%4C}P!Ib7lxX`w13~%v^APMPl&^&cn(+t~#!mjz)PIu~VH))QLo! zDcKlm1AmyaQ;J_`bI00lcPMr_&ymB;GV9?>?%w~zm;4ok;)G!R?pIw6(iZzagwD|= zhk$tBW59UVSl%AzgPF^n($J2f#D$#-*x_aJs}H#Z#gKv`_SRn6z4i~NIw?6h9S)zz zA4HKs#MAW3cR(08RZUiMU~S8rl`LJGxrv?x$6H2j03DeM5mR3rff&v$OEshtU?QED z#&b01;-zr;g+t^>O_H2!p;Dt>fGljfix%_#am`@~098fqqk0ZS95ma@r$t9`(TIl3 z25FBElbi}LR!K6~Ccvx`Fo^o0<+K92E>lOnHuDaEafcaAVRQr(s%~rRH;C|;-`K5J znL>4b2<67Vj31mCfus{SUnAY^uGy4c4sLR@K5vo>^MZUaeys=M1ii0HhgHf$-|{mJ z5BF@!j1DiHIS=jvwCNfX{4?qudo;i2JVai`f9hj&90D!*B9eywMzDq(?K));X$Za* zT97VQAn6);{?DP=V1nJ0vH?zxzSZ)m!dQ@{L5*$sdx5++-S>!M2|YuME77^xQzB(f z;x@p{4a$@zBFeQ&BwNeuxuSSN7AEs9%Xe`$U+5td-e$nf-z^*o%g(l;)(G&94Xwk+ zAfiYh1%>%SZD?31pq}G%;TCsYc6zEwNiY`4xS}j(>Mt>b@IFe+SG40>1R4V^?T z{`m-3BU0m^^eypHmiKtm4(N2I3|Q+iQX^e5f;`#ACG<>RZCD9t=zU= zA4b@jGU5?c4C7?V((wxme}m}@k&C<;{L)d0J%N}$-(aA}uo22>VQ%PsMS=NSCjn4* zLmXiZAN^E^BFI7~OU;(dx-HKp_rw7Vu|cB`z`9|Ec%hzx9tA{@b^C#_(sdQ@(#DzD zO)>b#x?dx-RLQ3?LGm77Gcjx36~{{$cm1{_anK|QsgnjTCP|5PTFrwod?j(|+_B;b zeMI!>P&PbhrajRUlSa)a1asX9Qyi)DA3~}9MQJK3ZVX3a>&ReAn@DEOoZA;ic35}qeix|yXPM#EPafj=t&&LtqFV+#@t^2o z0uW}7p?Yx;bKo4HzL!Q=E;fYsELHg_NO$Ew@9euc`TaW_q&l?{G|Eph4y&EFL<8Vz zbG5K9HW8XeDCH6jacALTLaV!8=&x*%t5*JpfSzCV5?vR9D=(({6Hx#W6F?gGr6bOM zZeTG{;8J#It5lSR)8ek(m&{+@oG6P>W?RpN0=Igw<5G@h`F^!RS%i0{R5`~Tjx8RK zWc~!<5jlB**_e(LNP;72+iIP;v*I(xCDRF|(;)P?)9Bch>?s$5qfNQ{-=p6S7hejw z3S;JTUUcMlBOt(MN?fm!b)qe_3%>hcKj}_}gl-e?>m-db1B6{Xp)(7t>+C(T)URMD zGm0cmdqt!%gNu$wovn)#8L0g72aer%!Tvx1lmsb^Rui61+13(S~}Y?tql8Uih14an$eS*qE`p^9wr9!T)Bwb;<@z())e^m$!FM zUGw&V`SpvL$NWoEOiNbOt{QTHO2xs(O1+4KiG*mDZybv@>8GcujQb{R(&n!P-F0lA zg3gCfe{^zu3YyH8Tk<=AgRTz50&NAv&>12_#OqV7KM+B|32%*))nU7+0O3G@DF;csHxX-l&RMg=%hTOUp!0VCK~|!Jszp|sgQms% zuLk&H%Bz{{j0Vter9e&Wxq7lfo7=$ey2L!UElINXbCsm{MD`PJSuK1puRBKz7_JhD zkE<$5_3Dlr*=@>N{`0|<4I)l|x-LE;ocV543eWH%9S0uL)myGWN$`zK9Dnh7T?`*q z(#Lsi`*HJowR2?$7YiOis~f95J6GB~&Q|I&x}41oiST#yGaT$&26mUycNsq4q!LKY zp(czyhD)Mq>FZyx{ep1ja%=PTyBRX`nNn5ZZKR{drtDNt=}oncW!CK`XHTm=!r=yG zcyr|BB``h9F3|q$hhJzD$SVM8YBc6*f;N@j1(k*upK+k_Gv{$FZjGegNq1dOyHU`5 zv|H

xE{-~P3cuZ(_7V>`kW;c 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%0DVU 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

O8owz~qo_}c`O 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 literal 0 HcmV?d00001 diff --git a/public/uploads/20260224/OPD-2039663-1771956114.jpg b/public/uploads/20260224/OPD-2039663-1771956114.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6d7005f89b3ae3175de861ee52f9e96f84daaa2 GIT binary patch literal 200295 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 literal 0 HcmV?d00001 diff --git a/public/uploads/20260224/OPD-2039664-1771956306.jpg b/public/uploads/20260224/OPD-2039664-1771956306.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6d7005f89b3ae3175de861ee52f9e96f84daaa2 GIT binary patch literal 200295 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 literal 0 HcmV?d00001 diff --git a/public/uploads/20260224/OPD-2039664-1771959964.jpg b/public/uploads/20260224/OPD-2039664-1771959964.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83be91565e80bd13f26b8da07c1611e2e0dabacd GIT binary patch literal 132057 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¢pVXCq9+CzbiPCXi|sN5V*s~rK>*=XSSwsHf(zUzwpu3N7$S8!Zmg~K$pT5PFI z?;Db{2?j!MA{-(>JFHv>6Klk_pg!wWnBO=8KoJ@q*C|0i0V`4tY(%Wu_(w424S-g= zTphl;q*Xbl}F!BL&ucA(-9C{9_?k@uBW<`fks{xhV!6=f{6l&8gblwV!L7v@8 zyIs4)pnyY!$Fd7hyC5mZF=RK>Eg%tfd^0WM?t@*0q?j6@CTI-@!=Y?aaC<gR>fJgp>r5cw+D6LtFlI_jl|zPD7%P{?$i>vK7twX@64FHJ?zt>< z{&C=gs>_q8H^Ink6ts<(u6`P7wx8mA;ej9*KOa_`a}HSY9&UQ-2ENP5Fo5QXlPlIg z4Z!~Z^)>LqT*kGy=fMQXCX>WK){J+*v zpFf$b8(DI|g?zQI7X*}#^DgASS1I~pV^W)jk5h#+hc4>d`+ zW|y9ytf2wSK_&#p{Gx}P(m~qfsA)2^O3rU6g6@H5@z*wohj_h5(RL+`!d03;S>r53 zdLOd8%-Ml$%)tnC*@?tauS*IV+SMt#m~}%fxH_yeQkpurGK|w_&Vz_xI8ejjMk*GkP1gCzwY^gCxWiJR#2vx#)Ty=D+PHV)u>`sG z9>CE@g*9cULn=T(c0EDUTII#}v-Usc0{ zSVBH)moM1re0Sl-VmOC{aXD&M!{L0Ijl)!NX{}o$3nb_uj*IB8fi!F4JROMQxXdZR z;&HX|vVe4khJXvcw)!s*@g4&UgT(N9wb<-Edex~jlM?5U?0^7HXcN#cfA}Yb#^8Pu z@GL$*7TzI@4y;{>2JZ##jddVG)9_M!%|3_zqniH!Zjw882_!_uqq;F+d%*25MyPFn z%Y8-38X~ljB%G#qy!T&JkC1jqf*C*V>2LT<34jYp17$45&IThfuqn$9QeAKUH!RJqG#C%QbDX~5)NI!9Z>@WlaywU zno4r$bb~Ja5(Y^oCSnm{Bb1${1cc9EBdLpxFZ~f5+Y$jF-)R2;l@|*UB$0D(?bfEsm@sA4dK9Y+y`t1hL8 zp;C*0Hs@&<{T6cum_OMcnY=}feh!P;($MAuy~^Uar75UP5Pr+Q;`mqK{{S_Fc^UB4 z>d|z^@VJ4$WyEoIfJqwlUWPLXnPj6Tj%uq(Dy!QEw^e$%hjj|2Mj0n$-Mce?Ab^w5 z^jcU8Rd23~J)maRR<93$;nbNVCGbvA&)ZyvoJcSGN_M_Ou54!M=gbbsL17wJegr>^pI1)@ulhrX9q0RtwjS&cIAM(HgK{^tP0Aw|e0lV&+pc#Rj zz?C}9AcL_sn<2f1ovjn>kPJghj1?NR^BDqtwF$@)VWb(c0U{ur;ogI)HUt}IOGuq1 zLiQswqi1V$SGO@b3tALlw3}RN4u}A5U;^_XNI$A#&`1;V-4(!)On`g(>FT4cptO@W zKnxzha{-veuL&BNKpC?VB&P$*()Y0H65oGql7Jb|OSx|rzR5byvEK4#6SkOa-e;|p zvJ8X+lx-tKSOIOSa?Vq#L9fjhHq?y~p2B86QZ52!laN7>Epeg*LX#TXjbcZ1Du94L zgbj*3Nf3S1T*4v;Ta%&&3B(A3I)HCv&X+)JkZ*Bfh#55m2(*bE^i5O=(=RpLIwTMQ z_i;0pE@eghqT|*#M|%MoXDB*I)T-r$%(#L#{`w$H@(;!D5d4?nU*eTq#7_(I!@8Fk zUzuDh4dnQ1gfP1~W(tUy=)k{6zZ{s4Bk+&$8Pop&xk8O8CN-=FZmaXWF|>Go5sVPl z(O>}VGKJZ~zgaxo)N?7gvRq9g#;(tY>hZ9Ih({-{j z%T{LMC>+K_5ULTD!dAv9fZr(eRGiGj**PU9!OE^r3QBDP@!trJLT zBu=(1#!2Oc&+!~#CD7vmYGPfHud(x*{5UH#5lUw?yAz75ofu-8;Ky|jc90qHWdZFE#5)E%Y=iO|KiZ_b z8)_E;hsL#)8X92E%dO#ja+W26jZ+Q)29=voX^Oi>prq1a);&^vEQVTDI{3<%XIuv~ zn;ljB9y*3Cpg;$HiAQBM=!;zA@{$qQ!r&yCM|B_efjt$9ZHgl^KzT>dq2g7iRJH_9 zs9HE?ih#faqO9yGi62EaI8%_*BG9CZY*0(&1--sNzrpPs=4pXTqo5^ zCAMf{vC`7$D;B;swQ8=(EojnFYSwO2CLvW6Gs$WCDo9wS_KM<-TCO>qWnIHkEvb|` z$YIW=%b6bQ%J=el5mbkFMjI7z_c`RN~xu*t(^x zBg$>9y3a2)8cabctYFg~Hk7jC>NG%P6B?pWspdqS)3hqAXC}W@XATWGEpBgQ-YN)a z*uc|k04@-&z0(d5Kw0>DhOrHEVQ2ta(n$8%WZ;)tL@MH-bo5n)e>Pi8A8UX55 za`FKhdLmYZilFA8q(gzsIu&Z2en|pC%giZ|Od{d&fH;E$DuHE-dN;5RHJl9DPaBC2 zsgyX#=!1f)#!z$GIpSqfeN$GkAOQ#JrqNi;7YWYYebJ~k2$x@?rXEGew`6)XwLe6Y zX_X11dxxB@5bvQ|IDBjAIk`zamobK}8t`n@rp!iQ4uv-?a&>r4D%y^UmL+L1?W^*c zTy+}KZ>qnB#nh$pxVGxP!X)XO({5Rws1L#iI$N(r9v{UUSccRW>aOBxhO|AA2cbj? z8I_2msE@L$>SeLhvfCLR(jTGFg;NoNc3i^kIzr7T8kI#VZUpL3aYAk-TXj66K|PS_ zw=-fPH|%<41_^XRv4(b6z?djmOCS7_e6)uPAu^JcM#V9inon|ti2<>x?4JuzK9h49 zBwjW}t4tCgCg2jXm?T{2k441X2t#-v{HkUmuT(7Lw)QKW0= zurbuUoI`;T(L*g+P%<4S=!nQB-=aibL9&}!E(CoNUfE^JB4e0^ag77IsfGY+3hqM! zE_#GQY@3kG8-hpkTz?QJ^VJOh021tIwa;%gt+vaM;spM3ptR;HGe-PDuy=Hgdaq9W zIaZIv{{X`c4qSV)48t%6o4_D@$GYXd_Stfk-gD!rN#^36Pu)4Elw63{uD{VlHNc$4MWE^jWZevrZej@`(Y}{c43@|eQsRXl*9c4mpII%C@qyI~T-ocviPFF^_xMNry44_ZK*rwqi*ndM;Pu6Y4jEx|4W)d^I-WslW42 zr%jEhL7ajen3JZKU!C)>{Zsos_bk80qtU_f3T(sSo=i+c6Bp>Y+U;kbhVu?^>Z}E% z!1;t+dacY~JvpfW&Vyx{3_L>s$H1oiMKE8O44lH|f6j~PxN%tGcp2q69+l!eB|5eE zJFDX=xuU%@ho^{R7~e29(9i)SUKhLk9jnAEd@1nD_@xnt;!mSc)~4IE4>9mPV0GPi ze~WNcvDm&A^87E6M-bdY9Y;BRK+ttA*uwWegt+h9KMTAwjPk1ComPv>X+5R6N0{Ng z`}!>Z00n=WC>Q#Jf5D1_uN1=skbhE9!vTOMb<=O^hfT&WuYCu)H8%#it_C}W^!T4J z?3Fh)lR2$EiforS<#9G9LDeUMY+#K^8Wfz{yZA)dfvV9W2wp_VH$2@G_9Qd{dI?f3 zZb{X~z)4Z&8DNNwjmo4U3SrPWi550Y(FC1=xhi6y8<8T>x`SjB0R1)Wo`g86K+~97 zdWl-1LEfh{f+T2#e6(BD{11~_5w1Feq(P^ypN01 z%QJnhzL5M?@YdiyHREdn;NByFqgky#DIu^(`!AjN+XyZM07Tp_-Z{$>ITU1aIFLig zvZnh;nU#MO0DnStg+ifdm@1^i1jGLTs?x#Lmk28@?j+5<5%85|;3}w+kKE@10U#6i zksZTRRGY}x(tKYWr3j1aSqbtMp;m)1_5z#1`!Tx-VVhKnS6pR zqJSds;%_;3B>j|05+gx!3X_XKJujeyiwWi+5_ADE18}kHt@{4}M9u`bo1V7aNPpCDF_o_N1~B~2Gg$Z?vu!2bByMl zCqkGNT`kRi#2t_-urwPZ&;N5kFOL z5;=_CbyXcq1FES+z)ApS(m=YiP#F?X@a&!S*%{iKiSCsqCefRW2RYo%s0Eo!o2yus zWp=)(8B8jA8grmIKr^>RBFo)P&4%=ik_^qENNg9E%@eO>YL*u^fEoIwOAa$clH#=} zVZ{c|@pn{a*aqR-M(_)Yn=skTks%qFd3>Gwr^Ir|Y31&!l_5!9sSG(2XHPQB3GST($;O&Tm}L*nb4O(Njy zfdzAzpD?~nf$Fzt){;bvs$4>Vcp`qONbJRRChlT-s@3qVkRA3$sM6CH_f;zr!gCU) zn4$Jnt4XxnM9*{w(`jt)>Z}&FtF@k}HE0I^0LmzrAPHk!CsDex2qRncl}*%gxDyxA z9j$1*izP(Mdk9$qN&Bd@5mrf%P-<6`0Lbi>I-$SCuT@E;Cwnw%mN~FY9)VG*NEhax zs8Fq4*SL~&~N4l%5U8^CX*WMgh}odV^@ozGb!{P{k`(4pnV@@8nZ_!|W&Z@^X%zl~`uZFJZ4RMka zr)Z3#XS1xqRTUZwj0n_~8u*vGrG!S{tgJ0(I@zFfT2zHM0hpOdq-vbgFVZf1E^dy> zRuCYd(|tBDiMU6jU9}znGYMFY3^p9oU?gkqsc{@Bdy3kmIa_N5Ul(yj&DzzTx z3FRF(TTa5g&X*WKt$|~+9ZHEVVBmO>d2zSbMV4t)ahA#TvhFyB2ABtw5_>GyVH&{W zvR+UR{!&GmU(J(uydXY@IY=tZ!qs?M{QL0xD=G3TF zq!{=PowZdeyUKV0-$0a9lPy{$h^vr8fc8}0=M!OW>idN%jG2?&1IcT(b-E!H;@yE@ zrBK7}RjL>YPrGHRqp-j@Wh1K4!qf7^XXWUeuVl2-gF=P{l&Clda}m1Fei6-iEhF7r z!_>^<&oi=T46ZG40QFGamyGDCNtIpmI%8mt(DukJkJT2FTba>vjONCs>9}KeP*DP zrp~uSi{6dOIFj4u`Yn716@3@9IoaDc4qUA&&SS1&U89MYYh)%Hqqt={c-Cg68HLMG zfGj1ZZWDr*Ja% z=K?hVq}ay{8W?Fhl4Uy>){z6!+o-e_I?lXh7oYRd6o`N{7w(k;B;w&M)ElKjTZ^Ln zrNlgP4&TWp<#2J4dysW1cxu36sS+ekn}5Q?Gi)||-@&{+!~8n_F;0zV4?l_5#?0T8ls~#I??FdyIkD+fIwC!1#P{t|iBt`Jc{Le-y2VeOi>n zw7Jq44Cn!c#Qbi=SHt*rg+>a&^s2~ks2tE^{i8sB>)^A0`j_SG`>e8#Dfl=XbLtvy zd1+`jBY*f*@OT&Fc<%?GYqFWCjiN;}6H*=yP&%0OUVFqmO~vt<+h2;;dmLm2kii`W zP$6o3J;7GuJ~H7I17C>Ai=_9yr9(LZzVdyS*I~f?B>9}V(#b*eH;gd&s@zY7mf z7;I6gRrM+~kk+)wXl3rb-{ICX^Pdj9H;8N9S+%G+;-G8-GnlcsvhY6@;^+=B!hDw( zF}TdQgHDs_hEmAsE+kxNzKifJ96c`sZ~=!b{JU`Ew6Mq{G14sy%=`#k*+IAGztJ01 z+Ajyz4yd%wSR-W$bj3EvZd5?yA{!Af313r=kDh+XwV=3(FSX3fA~2je7QlE{aFXUyN=S z<@kfb97s-D*gE)Hk1exH91DK3zE$J2h;yz8EA4;9#|VBi;nxSpFgQDh@ive^0vhl` zfjfoqj~}HkCUqMKU0g1pT&iK59zBJxFl@6bh;`v>@hVwfNY}YpRa$o|XK2K!R6#Li zEIj5Osj5hJv(ZY6;nqod8c>hjG6^RrvFV~i<_&4 z$gppgk)&!#-9$VYIbcP<&*X~XEtoBxeu!irn^^Zs03AkypoYOD9=#Cq7maVQ+@k!a zDG&~u*l49-9i`34+$1nAW>8=To~NRXVBkP?x18T(v6yp=!@ih%se%ZRtY!1Zpro`fF?mU?H}M# zIZHvX+B>O+wB=-sy_30;S`W>yuG92H0T#g^Mpo$&H&A^>xD2)j=!heDnAB{cRJgj` zbly9r1Q>H>Cc?t%P)nj99gz(%AZCNGof9#Iz{s~*(MZ9^F+XI00njyxJrSJZK;{Rw zsx77obcvC%xJ*ERCYc5SKkZU1v5}Vc2URd#21w1nRGnf7kU-HO1ymNa28oSs#j?=-AWwb1BjawdlO?~H-m5u zmYqv9!1R?%2r}Z@YQz>7*~4Ur(Iz2sQvs7*;) zxz26?LdasnP0?yJ%*vAki(yL~MHT$HJ<%!By`Xxcie%p2ip3gJP-$cm+eGlxLoRhT z(HX5SjADl_OnuYxL^U?FR&+tP*$BCy-K2V} zFQ@<#LJQbl*??50k`_4l>H?X5bC@}%Ac81m0;lDAyRe;R_xqxV;m3Iq1SMA<^s!hKBLHSBQCIx+-a%~ zW`jKu4`j6k{2gjk%*>w1xQByMS^*tG%ck~+83@N4Nrv!BqbF`qTJ8kEP@u*P&^^dO zb~>4Jh>qn-l}M5xfvHO>P$rz&FEr*mx3bgW&23lQK{|I-nD)8Tx#(4@1XFak+@_yQ zX*6`0P8`aO%nLvtRCjRD91C45KL+Q$ph+^eFzs_l4mpnLwFb&|A%)D`trG5_B4Kd; zNhdAzT68kBwm_9_)TzL?s#XjJ8xU&4O@^9ig~Y06CK@eeevTD|+@u6Nb_JyT#`>ph zpDQq$NpOoRjd5rZB&#&AED~HqqIq=K=r>Ns)dHbS^&BmAr9y+8$%Ps;nIM}hbtB6K zyI#d;lOeezXvG^HHGr~ll*?R5Xl&}WTOybwlhzeHLvx1%bTkQ>4Mbx+{Oc?w^t3@#4B6_TcJ(XHRP5_}mUcahbUlv>lE)mgXvlP)1 zWo8Uju(c`HXEq`@L1(I#Tp z`j8=FGZYJ9&uJkRjW;>@fw8)elO~$Hj*ACaHn2RUTEu0j`G5lE+}ALOFjdo65c+K) z(gvu6?9n9j%~Mgd!EG`dJEmieNRu*h3W*-d))mnFr*!0pZdiKFi-Tod zvTXu7tCavDS1oXK%953nV9X;#^&>8c^5*QDf9i)}r$!zkj#}=p3F$O}AX#W*@ZMmS zwFZ?uun*A)(Q1NGXd*N!(`(*S6@ z_#^-XlWwJO81^5{)sP^#>3!B*og485!W_VCy;tzi$NvEJQSiGVfH5_mKtC}QodZSX zcrnZ->({>v)C<29-wj;HHrR@;dq|Tai}L$QIM?i7GmL-i{X?k2%uCz+Qfy7aC?_b7 zo3^SC%yD%xI1&sJG$&K+jg{8=9oLPY_GhPyp#WqVh%%g6#Ka9JbYLZ>Tw`>NGUra9 zb?Bp^gYw=(hy=7;NblV~Qa}JnPd;S2<)FZXc8S~(yd?t!DVYY>8zMLsyqL7a_1QhZ zv>)aD(A@t3E(s#{?I}RfAjyDY+m$LH3`H|`knn5)-}Fq-Tr-G^@|&k=EUd>DL69UY zGP7(yvGdJ-6^w6*d`Rp?f6TS~Qmg3GYshP9LrYs7p!)S*aq;M|_-lsKnzR~f7dfm2 zfWZ(9ScU1FQQTV*;|~)uv%HE-;x26_(+!7G^4LS?Stflw7n^)`saSAK1|5}JeB$!z zf!Um34SIVohIp)hCMUD)xnKBi(erLCzr8J)8ZNitTVMYGUT_0Sb2k(v>=Nd;cqYTu za#h${Rlt&9<({Xi?tT$faq;&8pyxc%saec>S|m7Sw1KXj7u+@eC|-|_pWP;V?}}?Z z+)o2V()MF3x`An{nb};|8RAm3H=$Ahq^58)02MfD$8(Ze>LcN3VN^RM?`KmMMY z=E<|s{O1@bW}86*&CS;_iS$-!u(_hf`}FRj%4P{Lb{El4Er&_d`Y)$Q@LMDpBV64C zsbu~c9)(TE>Df4BwV2*0M(*2(KSE_yM^zh zz(t6FYhk@dbvkVT7!nTAX-ELUEtxkmf5=h}F5E%yx_<%KiyA<H4*BLh{%bjr} zzSI77PWHPoGa!TqV9Xd9Ly6r}#5Cp*GB;UQJiXjOCt#}L8I(YX7m;~MjZx;GANXJG ze}eufV_=*uHsc!DxpOW^xBRbxxXVN6QaNG8fStDQb^2A}9v*n#hIr==EXv$g3biAg zbzy-E^J^PSoE}{pNzS7ig431{(QCn3G3R*w948cDYss-a)(#*Q(s5cu6E^l-{vyX^ z)XWU}jU*UQrtGiQQ7bq!%&P4(RQ{nz)StXkAenI=?kWaE#AW?avI7JN_1#0uya8#p z-peCc0Ow@@88Rfc6P5@&?_@&Q1;wyniN5L(2pif!0R)hI$jKKLJ9;R&!OqI#0Eq~W zB4ms9LM{c;*cZ|_N{0f7zG;ghBXq{!3&KFJ7RTG=D$R7n7312pfrl`uJ+G&c58a1hLUZBy?xbLWfLZ}AJM{_MOf(sTBH?JI z7Sm3MZh%A^4w`x=0vXNHTb2i`p_b+@Ii<#IHJ?OAoeOR~cj%@d35{(%6pXC)YA_OQu^)0VEzu^U63}X7R6U{UL+98 zAY6CMzER>4Fbu-_bNxx{Q-6;B4B%wvV>pf@EX9K<59q#P;tia}Ezx=$Shb2goKswx zx9p|EsWP4-0dWM9OPpM8N#ASOXa$4|Ejsk_w`f#2S@SBF8g6742y|>s?KUAvTLJ$N2`X_mYqSC{VCFdyavv`LQWf^M> zlcAL0NTI~4L6;Z{6A{Fi!^y8wr^N9E?UH?`MT=G7iwW$d#GB!dvFqa8_fBG}zNFll zPF^o>MOLLi)756_nk3Z^QRSrG#Rb)~Z~fA#S2&aOLU9DZQkif`&WBr0r7D$k0Vcr- zt}ZdRbk$s3{Q^zcnt`0))|4kZG{Lv(oy3;D14kY`gr))_*k*kN; z5QjpZT9GQpnUsMODnZO^oc{pg+p=m<@=gZCmQkgwl2&$5_vR)iWp5Q)ok7eqDi5sI zxH-P#qSY>pJX_FLVVq^nJieN!erfbcZepiL5=rK<*acS-mcx*X!Ay8{8 z%_(Dxo(LomyRQxLk3N8+T`)8%Xww_Bc8w=SXE-(x>f#P_bqCfa*FBKx4r_GKrv&dt zpAV=_cqV%*c+-{RHp;gJW5a4fiM~6zc$F9g(PGn$TJ0!E&abMLs;S zDq=B?rs4r4%qY{XEQ9lEWh(T+ad>HWcvag_l1XWul{Hj!B`RRhp-fh6{G@f!YGEjW zK#cQm;avNxRMh5ceIZJgF0)Rq%h4z!J~x%1_<>EYcQ7%mr0Ueo5ib%pS@o*D)d(#i zx}`Hr2!c~;6`FX|7Aj&aB0h;4jd_O2ot0`-^A2-p)gR00J+)HNUMW##lQR)w2s%R9 zz&(_kk;M9yoriO9%xEJ~bthu!RBNHc5zr`W(aD_UMvZ#m#APaYde6*xrWQpkVRNAR zEnFQbW@kqV{WZtA`%kZoj{YC$p;s&+Q%x&oH&rcl_ zq;p?TM8NCa8zB>N4uwEA0l1EvselN%xjJ>|r|hB*Xe=OT-{FmJow6bhR`df^CmzK` z%`Jcc1l$A(GA0^q1aEZgA@_)jfK=MhTy~8Uf(Z=(Ze)+LP76p;qhOITdZug&%nr+t zxNR}*DdZQ(5+djOD2_*me4q&y?y$)hhR*`V@d~)l8+f*e!9NPjHxx95O6)H4e{{!r zfLKMy-$mwMAMtIY!?;5#w7#?5QLTGH0ir}e1_<@hdl!rNXC1+OL*k;B&lSdes=>VL+3I-Q1$rKJ3^pRGs#C38;LTdO znA)x`AnALPd#|T_BFc>LX9E@LnzfD?sYshCQ)Ij8JqyurONVu2ZzTulF`-q*{qU9whWCR z2Q7J(q zs*w$lM=MRije4gApg<5o=!OEy3qc?O7azzcdqaUTLPD7@Y>j$sI;lr6%H!E`Vh8(xK&Tqr&@OKsQ;MOYr3L|urd=Qt8o)9a=O@Gt z5I7f%JW0Zvt{)#&*S4}lymUMFPUcO+Mg4$C zHbuaeiwPF>?v+AIT_gc{GyIbnFeJ}Hr(p(3Z0IdzLK)*J0D}=Qc23|LAlQ-oSCr-_ zDH1mcwFgleo~aB&LIA%&f0~hC66u{FbtxGTZvxTPBG4KLY3116AOld4;juqO3WT&c zMhXjN*IoaaM#yiTbB z@IU&B*M2YKzr!3ZQfc8hMk=GB)@gBMAO8SEh4ZHnaSph*u8ZG)9WQPt@j=5FUjG0u z1>u@a4K09N`j6K7!&iZE5igj!_0wO+iaeZh^2z;!;b6L}`VDWY(*Qm2F0(i#HnH_u z(&7g>WT`F{s%A{HFf^Wpb+^x*P|ppzoO6>o;1Q z`_MOy(`7wm^-?fh0!ir!K#rja*#64ck{Rp0)kl)&Nmem8Cf4;pZnB4FiW(-y{YOP> z4@lIg8+hFTts%kzpVew%nkh17=VV10I#f;ZO{Jk&z~R7mnNaeL6>4Po~_x`>J)C0FVw}R6P>f zU|m)Xz=S%OmjVM~1@%LF%bk_69ngek0R568eoHLIW^BJ*)A{Xtp_VGEq0iL7?W#L! z3N8@ReU+r6LT%2%zH(f9p*RC@eZn|*n8FOGI}ZG^(E&^(O!UeRW5b**=I%n17~*F> zQK~4U_RL&b%{VWtPl;fS8(+UNW2Xa zn}NbdqS40r%@+iesyMc&xW4NfhhlQmX^nfWVsn7&p6bUJM?t_z4tXv&5fX{SUNe#b z1ZxTSH6cchcN>wW>O4ilTxBg8#mPom_j;=|=`_0Y3Y!LJE41aOSrUbM8FGVK(K{=2 zKz>})3au#-8Z8Vn4o4DX&6be_c2MGPA+R8KSngw=cqFa-O&sT#0-($=Y!Cz~W0a14 z_$tp1Ee3ZbReuA0cT3D3#dQ_w&gz@U5&^o0EVSh0c!z~sQLYVfzNK>~;Z}K3nxGk>fla zl}2I+-XRMp*t~5yIU4mSNP9six`C|8gE7=6;tV)oVLyvMXyEF+;4Q$ z*j)wMCs3HvfFXdHnCcUd9_Y(5iuw~Jp!%H^j6F6z(Rm5VW%2U&nzJnJg+82l7@jGnhvW$kP^#9u@z^;uqX z66o4iK2IYi=dh-*ssV^XB4!?a5Sfee2F@MAyMn1l7;Z9@(oaZjxG940ZEsU_&&4=Y z$poFs*sFo1PM?_9LZJKusvN-bqGzGtyl-f%DjAZ}XSzKa#yb>NVB9PlV49sU$2c8! z5R-oe_~R0`6^^j!+}%mA*U2;PfD9Wt=^1mt7k6a7hfL6=P#(FutxPRbL^qn{WMTgR zcF~$;TcY9|4ahqo1j9OP2NZJ*KHzsk69-~~teyc>% zDUBkRGWHSMMNWp?GcK4R*K)T>uJ`V% zd1O3@Gb;5ak_2hEP`#AcNAfh2dk|NgS8;V`0O0GvE!}z^A)qnSBmh^RR54hGT+c<1 zD^zsxDzfelU63zu{1-9UkHz9v3gttSBYH2m6|=&aHaF`1y7 z5AM8NuOq(TD@CRUTh6LX*t!m?CY!<6x|3S$&WIDN?hzv*8)3N`l;FrPZPRaLKp^GK zZNd8{aS_~FQiQ-1xu=@*spyI+jY~lZnnOUBW|MhFiFCJH^nj(p9E16Wn~hG1K8bNI zaRxj8097(3VCIDm_UC=mCZojjnEvY9itHoav;w6m17nA^8h<)OgI zGuKE@s{$@L-EkJa^X`FGjLhwIWRMtLHx`!f)dHonUP#c&1L&iO$|80;1@dR(KZJ^2 zH}J0&ZeJ@GfvZ8^?#|b?E_Gj9)@gW?a5~yo&i??7ZW>+SKMwI?B;fd^I!|cqmdX@hz>WE zLb1Po%R>;r*K1{+ST`}gi87TRz1edS0D9_%K<0tUHU5aXdhSUxbq6)U+jNoFs=(N2 z*xJ@9vX~?QFS=ssj=GzqNo$1Yb_Y}vhMU9>Kp{YlZvu7-MXn*e&EVcfiZDd9yVUG~ zjP7t;K3I@r{IZB8(nW;GpVdg5&n9zoMz>N8kUe)d^*{q7nBQKX&!UMLgaHKf8><2f zxs9~x?wB-cPH3I==zuDg5vG97x~Ixo=RoEc5{%}Sv;%Ycp1qVRL!_I3Bml$~y`+v| zxwug-Ae%tg%8_IOO~4UkBT3+gKBjxgpV0y*A;tl^lm{KPvL077kPHzbb_wLg!6tg_ zff9^_LAjD=betQQ2;Rhgi9Pl)1QQzWk#{i!hLT_%zq*hfBTbXciyxw3K;<_lUg^t& zK_vUmh$xBq#12w7K@PAcVqz5Pn+UupG`Y`{Fm?X`H$(_wln5XQ+7)VmKC2;t!guvn z3t*5)a2*h7wTBT)mou{fXZ1>i^nP#tG%=r<{9N&BZ6u5@hwyauvnACGN59#4mNe#a z^$*2nCZ;3tjpOG$%V_ZY1t!Lmkg-)}hNJp+*U>No)yO|d^ z^;*Ok$SEB@iJa?C**=8MofImNL6VIzZI!D$5;l#L7|=}plT>jgHd3b2OihxDHBgaj z4^HhGE3SN)RVaei>nEx!NiPFZnr1H9dk6(0T{qY&97?0ARB^f5RqUdZ3yE1ALlj&| z7ge!$MH;USm_CY?dVrJ59nq>dKJJtUxET?389vRCO0$M(3ajb^GxS#LGV(;KHJ&M( zk?0iBqTC{-N>WJ@LJ@|U4Z5*Y7{M?v)>S&S-B6MU6VYbPERm{QAlP~!yk&HQ^h1&j z%#|$qg5*jEFhaF)xm9b|AHyf~Ph5r*xjofaH#Fvw2SkGu+OlS=T+;#%bQ+Z%Isll0 z(?6n(KrMLcskjG^a6#3H{w+33^KWjBQ8{y8`lvfwYr0-t5xRh_#MF>W;aO)9sSq74 z^jXg!T-`Wz&Qa?HHv20Smqvw5W1XQ9*dZKzJLPEf)T*V?Z@Pn>a%N9d(<3J(gNhAz z%B-`BFtyElBo3BYbs9+rFrQUAMWOKHAfjM8(P-79QP9(t+ADY(Z30;iJxa;0*6PPc za-)aDJ(eyodM63mAzJin@fvj<8BB$g`enrCneU>q>{E#n8hBU4=1LJZEhXL7}6u`i-y7qk0u}mn);@_XlVfN1#V#)8;8BsHA1z~xx?sE z@<1Am!rH*o4|`-10azR=scR!q`Yxk`x@rjm{ZXO(ofaDm1v!u{Wmg}CX&*53-DtV- zNCF09bxRXhl-gq2ts}B6narRXMasE{q8x7_L4dwUA5>~p932pnR#TGYI!q1_ud<_C z00OAd1XSumzS?97R%YqgIQ8aX`$@z0;3mnb_KmofdUY zY1_KFiy&2pI3B?0sa2{4fg~M*jH^bftP`mhADRN2sj#*Q`s||Wg^e;*I_`U>4Ev~X zJ(PHpSSKNy-C<)X(s(C0TUF@iBshucRyI0;p_#^V^#mJ@QLV>x9L)8jb^5_gZnbloiL5bdYCb<)j7=Qjdh&k(8ZE)_x_mS{%oLB6VCicQ&AX z)v7r6F^=ZAwy1cfbLGeA>MK-xTbQ>n>a*(9^WT(1N!)6)#~G+7WY0a&DdXRmk|D=J zP_Tkm9$RL`sRAD)?3Na}Wk489X7^MX#6ukqY@VT9rNpQfo>ClkIwb>Gz6P{ z1sRtC#@&`a3mP2(&un&D)E`Q-vdAZO4Kz+KDTWZ@L9+xXJ)z=c1!MBL34#dqRqEKC z%FX;5O@SC-^Cr>J5}p8;W^9Efwap;J^$N>skRil@&?bqGMPdtI6AIND*+9`iI5?0^ z`=ep-t*LA3i1t@ivgQ)8F1P?K+%0YMLdc^*!obSAN$zbx4V21m3z<6}3ygLh>~M5A zXje~*rrcWvR_bp7aM%j40nK&S@cQNS8qj2c0#1uXY{Mkxh?a_!olYP{iCEZ*4iyNC z{g&InYse-^-BQNV0pPdYJd}wz*^~jM=!hun=tsJGl*65}O|^-LQ3cu@S=z^CVvvTO z{gqfH!(XaBHxbLHx@ilt%K;A1k+QbNG_cLPs&wD1nd^0BgvPL~B44tFc7|6sfhfT4 z41zT&@wE4pCOE(ivV>Y}o+7XApBDrWLi6XidFBnLtgi1E=Q52*CSa}>Tjm&-4y4Ik z{E@VE@aWLO5L_40Ux17_#QrO>h6DVs3*txzX{k>)*3s_1dBL|c+HAg({{TSNCY?d{|$mX<-6`=CM3DMv9=!V!LW0rL2 zj@l)zxg@w>`mZ6|Jx;7UU6>633T36l47sxHI-!8zEe2-8Qi#@)V96V%y@4uh89{N7 zCq#g8m>`Il0Q#v0kt7`k#WAK>=m0uKpzf2g$q;$6m=-*}eN?I5(Go5vRVRQab3JrO z64{FfSfRkIcQ(>UCrRn-m>3!vHxiiCIizi9>X^P_O@@H#6trBFIOhxfxxw*#IrA0R zS`5TLWA$E3Nsh!}aW88FD>y!tR#Y6N%>+0R?7ggl37fWa9>==z?~N5Wzk}+3)EqAf zUme2nPRosqwoqmyv>5UjL7)}}5td+`VD(O1ONhB}5jv#< z7?~jHmclnx+{1Wi7BCB-d-q3k%U#SPZ~@&#?FX2=gA-zy6l;vlAiNm{;_$qe@iW7J zYJ3jk?P-SL9ZwiLWHNU3)q4e5bA(2bnR8w};Vt8S0P#)$hY!r~`pg5V%5I}fyj(PX zXK`@HQKndVO92tRmj}f_&g-uK02J3hhEvW#b7q^Z20?|y@tR;fk*e=bQOevlj$ac6 z)3VOQWfRqDVs%;Ajo}SJc%QwtZ0X+eqT!Uf;Lky#A#PU_U;$Ar7Z3&KRe_)&*A|SX z=eEh?lnI{NDP@vD2G=7&^-SVt<-byZ99h~x0uZ2rZy=c&LU&le0G;78p^g%4ZcrjN zB=_yIkR5(&%#{!Y^=Uc_{{WDcn@;g#8c9IO5D9{FPNaysC@m6XbkY@Pg6Y;Y7g;<@ z2a3d02M<~F+70rHn`o0@Y`itOKr%$xGl6S_>?Rd_A*k8_Rdl~7lMqU<@&Rm%1EBp; zv1o-xocf)0>X^C&37syaT_-SZUVvZfq8b|EBHN}iFEBwMX{@HpaeH))6XiJp1lwRW zP8inM#7x`1i4aB1o3z0fBdAVT;r`MF#A>Epcmy8uqSq4FPu&F&cp==k2d=)sNCE|o zh&Me_mX}E++9cgEZk7eQdLqI|pO6Pk3HJ9;E#?PNf1)Fr2RsQHY@Fp6(Z^B}kpX#d zbB1VexM&}$uS~o1RJp8NCUiI5S#fDLzFlpsrlJAFuvp9=OQ26j(@z>HLDIX(1zgrc^V=7CG zKwi#o^~dP)xYQ#@!!*q{)Dq_m#Pc}2Qcn9`!(jkG04=;rxl2L1$?&tET8rFT>SH^E zIyNz}-o$#|4VIoPfj_EPT9YjQ0I@==uOFyDe2EfMRe3HbIgR#OlSF_rLJeWcV9%;f zd6}?LsZ*4KE!8rj9$83`;sbiFa~sAQ*=-?WAd(Y`qLfGES+DfRag4ZXYo*Z)Bf^ep!({lKKf`No$0Xp!#`UIiWKsR6j5m zx-aGVu9S(k4b;oGo{9uzFl3&J!)O;oSoA1WaP=7TxK^iTZOWn#0qwN6xkCVE)_S8F zWzC3>Wm6}V<1$BNU$J8PWtvqf=7*9|pG~Z2Gi9Gef~9>dw171mls4*`ge>7QyXpe$ zr47f+Fv3!;hpZpWz|qx0rCM~J05?^A65G%U&vP!&Tu#bt#8jr!o9L}K4A(H!wr!PT zUB&KcrXX}p-2=uJf?@H^bKsCWD^A3+l_vlR9TqKSfb!yUm1_v`SRBs*R8W>REV;v} zvk_X&hZVhs!o7~lO@^Uh;VHJ2R=S&wzKf%!RoI$fe-}`beus*2MurXa<*jR?_gzN` zqnXVz92YynxOuAJObK0&48nO(Nr9z;HYWX=wM~QrmqZ5)33lgV#W`pM@I1RqEk^aI%TAjJoa2;&fSjR*caZoK2(AbbpmC z)O}V@8Nz04f&fW^ZcY=6Wo-(8*lbsy)uWdXTwR(Dp?97w0*x%7!-?4FxXN@zSCHc} zY_9~>nqZzbJy*890(B!xLZWGq=^|%!wT8ja6>>O83V4h)3Rh!nRry(X<>RDd)1{nR z2cj32TK5fh)pU4%8%g6Z09iu64a2qY#*D-6hm&Qj?W3M`Dw=8ziq#A#Z5bqjue%1q z@Yc&`phkBF&rg-)Mv}96F+9KM!>>$KBIFUWX4$Y6`rIm`DnKIXs_=T`$N&W`zh(I+ z*_z-0fMR+C>=4ohr&(7A4=#R}ZovT3b1D!S9iv5}au~6w(>BaR6*|ph46vVl(5*2M z2$gBH2AhfdCoEmq+1~RYSrAZr8ct&!6e$5P4T_uI=RN^cnQ~2xc!(r=tvntorW&Jj z)F!~dyn-cWmk68Bq$Z}~UK|hF$Z3(1O-ee-JZw}D4dxZr)?=>c6WE2$aK~n?89?s~ zWYKGY0R0y}N)BwBP8q31)G9bZ)4H-L({qW_xma|AFy;fMc1CV7z{oHL%6^AWMyKUi z(r!stC^swt3nvZ41Lrc*!kojDf;tUSvqY%Sp!>nMaIex}agr4bI}U5?wQ%&@IiTGr z7;03Dh=(0vblfJXrdrp`n+4C%B-Cxd0c~I^15{cERY=b_M%6}3gN?yJ#W3WVS1Qru z1-gCJEJ*#?A8@W&jwJ#cHk7JTuq~3L#);SLtYx-RKpj-Xmo`vnzeH9Eb?&87o}r5#T_HDwQHhGh(c?k|5ZtC8BjHij<7lfj8Y%q|Ao%?5<(mnZnXK zAmSJqR$456%3SG`o6%2*%W%~R{{U&ZTswY$t?AkR+EkLwP%@)LT7CAH*gjs<;6S zBPaxrbeJ2S%gJY{Aj^pZFaj*;(r0C1tOQ7cI~`NCp{=t(13}e0oGm(RHAg^AtvQ8* zTdaisS$L74FrzMbkSq;^B^j+5XF=5(0wtp}pj_%oi-2)3V&=rzNP<8nLwgMqmSwQq zS~o~!e6Z$n>pc^;1B4sJS+EET#*CK<+p6L|92Gt~okl_F~?S$5RULO3lLghcTlR=PcHMdf=YPQNzG?j8r>>>q`AE(d~e+E1f^!!e?mFLRGGL2;9PNnap;s7DUsRs3u4 z<@gRAjmJ9@>R4(_!eO0J)hdilA^;#jAZ9lqeW6jVf0HaNcb7~SlLT@$XY^X(AI8!# z&E)x|>Iu^&r&3116!|1hVKX;Lv6@;Si`v06iPNr;`Y3|zV%)Ab?J932hI;8CFmTJ5 zNC#Ldd1f3m)JdBp0NFgmNE=S}Q(<>8(=qq-3QeZhK_SC^Q;-NQHV&{e{Q9OL+S?18 z3kXO8!E-R}BI(=&fMkzY1G0TAU`2({0|S>*NFP$7#}L5MVb_~R=^MCMNa|Agog^6R z8zVqXu_Vs$ND2J0m;m9J4G`N0l5_-+I`s8ZVKYQbZhJ-j0zuFL zCM3kR>8cXfNSKSoul$jrm7d(fK+Cp@uxP1J(x~jrs2tZce;9%wg=)KGW&&F}5o6g> zH8NFZU>kWPTYVIM;qh(KDRN#aSHUq^vpcN1~!QSdG8uw%;+}m7rg!< zct7kvjh-*V3T|aOkELCwFDtWC8hS4e<8$w&BQV#YvP%e zk2?gWrXAbUbZ#EBZ4 zNkbF`Cw}hRl6NR5MqCLWFx;nn%;n5`>YO(#2)mDaN}C%FjljQ95)d%Un2fV|-7K*F zgRzw|1IV}rbsCiWovl8|6oU+HHnsqRx@?l+BusxaM>N#A4KdX=T%!GFL=-1C<$`_A zst=|JGTFYmqdBAlHtJ5E$Yg;a`l3Vtw9;vV7tklew0?4&0tTv10D}xJkedY`nGj%Q zCdqbAU)7(Eo-@Q8cgC-aIHwna{{RzW*?RyRQNTdzx%^Z4iPzO>aST)OKM+15)o^Qb z_>&y`yWXp>@BG$oF3vG;RqW@apQFvgM@iwS{G7yscPidA&4|jWcx8f@4*{jch0b)n z#m44HzS`SBEFf81#k^)Vx_BJ9)=bI77Z)CrqO9U%lX5jyaW{36I1p;akRH6H@~mXpR%)_?|3jRsB;FiD$V zwbk~xVDQGH@|PCP&WgVd!8} z)k)M@8y8eL;_|6hc$n2@@>)7^NrR|lYN}OsS5C^y*k;1rP-`#)CgnqZjSBT8@yd{( zOjrp<^BXYHZpdb)QwQv#B&~%QR%z@ zsFSMCHR?U)=IRc6+U>~hgCz_#S`^6!VGY=LJgyG(QER-xHzRyG$vP)$hKO> zxODEB)Tq{Q89*w#F%ET0L>{TCJ=EM>0J12_yhB&PQl$2l`=WzNh?a>yt3BAK)OR)2 zx(se1l1H*|v^;Xfx-7gm6GKQ`?k1S0Shz44{{SU*ROv%**V0; zE~w^mfDYttgy+0T&<$m4P{HK^t)?5qS7ux4ZhflCioo9^2!j4SGr(AJpl zrCDl}9WM)GgN5XNi>JcYAhaDu>z&~kdWN22(+gt`*D=M$LwhP)Gs+D*xR2fzm?@58 z;W{k;05#dkGYb6}a1NhkY1yA;ie#3-H$*hZB2!ajb6oo)NhDh8q)b7#My5+%B$x@s z2RiX2ebFi5h>mFPQj6RUaFEcnE80U_b%tg6e$I8;Qn?*+l1bXp_KXfFhWY&|(8u6Qlp@TG}mDomEt z7B>mZiRU#1$}eMKjARsV*>1%WNDU`>Rrpib>Y?6X`YoJBDw`P~fI^l<&+2B51neNr zNOOsuW)(bEFtx>?Ws6B#KcA^tu8M;y$gN5Ehn{AUt%_6Z(w#N}rY+pLLrc1nrtTv0 zA@MzmdVDa9#0?P!7*jWBBhfbTDKx00>_MX98X?E{wM=TZdBX@g#_G|+W_huVlQ#lh z;M}?IDXfzd$`*z=T2-PL+wK*Lyf%d@LRld7)T^{`^ziIx0{zuaAZpdCBEz6lPKZsj zAYkc=jjy1ycqI!!xNi9S&%pR982s`Xl17*$8_y zKV&B6o{)@2-N-6~C?Z0t{{Wl+03~V1G3tX-nFeBaMn;3vfO&y(u*ZT(fU8nzaWQDs z6`%+p-3s<65?Q2L$$>uVRpzT_E!(<_EZrekqR%p!8udeDc46^i4i2;n59^PRq>9tYqa3$W-Qp#S+DB;ipeaa{*SroLqrlY3y3PsGcC*^ z_KkH_*c>f=V^6X;1*SiU4BfR}JCo6X?f}3MqGvEWQwOf9EpUB^(2-(^1WzQ|HBanB zSi;GNLCXck+cD}0wB4qhYjY(?wQ0FiHAm_ZV?Vy1QQ$1-H@C)j0u?6K!Dji#yPbY0S_dN z06hXDm|r~8BVNh`d2Ap8PVyx<0ohiq6JkIjHL`g%49<`N>F%CO&44G;$p#1@5py|6 zNC&1lh&OhbiIS$^8s2CZvOqXA0OO^1jPEHKxVRB;s6G9MQtc>JKlS!v`GZt ztReva?SZE-&K#r?Iu!s^%ph~M=kqwasHjV!P zs+Rg3!SP??8-}+B@neSLoDOa$!-iOq2ARrz7tK6si}OBqv0r6=HaJU06Ty6DJj}JK zU|jr@l(^;twZ)gne13=Tp9iS8*>&+X;{@`|qkzVaX97N(teWkDL~0iI5^h(Jv8#;4 zfEDEiX~Fxz-~pKupjZhFAZkh>O#c9s+WiKroY;+>11t{up^)f+3H^WJOcRuoV-ifL zypRA8Z6~d?KoBEG3jkzB=|G79cDAKEzG5{4VY-V!Y)+?G(EvoloMof|a#KCPkR(pS zswY|Nr}IM~#5the@uC1{HKoPcZEL1!1m>|bWhXl^E$O)yQ7ng(s67xN$pyK+tUsD^ z+{AzfY5gTPmg5D)fvuGEzwnC#-2))`WQIx5iA*3D4M%Rh5ga0JCTFr^XGG-&{I-+< z64_`m7M(Rr8fV&nvYWvTGXb&&y_86~Coly7CIc>!BWV()An9YJ!g2{F_cxiWC1} zai<`_Ch~yFqMcU~*@|wyn_Uv2kl^W(V#h^O5l_pZh^ez^)Ia`-LfSIqaf4^$V{11N z$9!8+uFmIiyknm2%Z*nXp1_5lj3g5wAA-HrM;Na151quZHD`Og>THFGbhz&;*yMJP zGlkC@XG7uFI;Rg~iw!Y&4~f)?u{JOW-uDAVZyNCH1z&=2zw5n{DjBLE?rOfF;BkmC5l}OU~tVrLHt2 zY1Er63}c$tn@H-fLQ2khqYK?H9i!BwnXv>==6 zHCCTZvP?`NxB%%UJyKdO5CckFEJBf`2jw29hZ4$SZc3?(;w8hCvFN9J2>2eQIGM7k zS&cXQpj5_GaWgQ2`o+yM3Q++8ol%W$lB?9lG>%bjrBRuZlyq3{?7 zbQjen$1l79pjfie)}$+WrvpFm*0 z5Ul2aLDy+hbDrQbnLRooI-6;{Op=}Wvr2M^3F0Q!#}9K&{)iQ^)f#y>*e0t`!7yZ? zIj(sHgDLe@<6}v!ldp@a(9#Xl(Z&jf3{Txqt3l?WF9%+z^r;NQK^v>0vPv{vHD8~R zvJ@-v46Y3<`>OS7RKvTJ=AN4&x}dH`Zf6dOLz^;;eHs+&(Rh(#-DqHg90o^@<#X;0 z1j`8nqCE=PTmY7i$->ybRcPv8EXqTKbWyJlrxBPDD-D>3(|8%a>h>QN=Q<+Y2I=o% z6OFMkAS2{SIij6jpnR=y?9d4*Ng z3yhzkS-LlRfS9an7)fJVCrd6j#F(nC%m9hjEV^7nfG|b7EG{Nk=Vfq~^$R!fI6SY3 zImZy`s&OH_$4chy0kjNNgS+pkSyP8)*m?pI!A!NhGbtflCd0S!2|# z&6_tW6Kszr-ilQ*C8x`SJHbJ9cT+OgI#F>YoX=?HDwcBN1lcU2Ba9l%tr0${n@ot3FS<>kcw@fJ7IC_!#f@-UI9@Q;w=?Nw>6cZ4D7r}v zvasLWw17mS6I4sVWNsceMc_+F9*DGfh902;B$EI|*EIUicPo192!YjD0R|hn(oy1& zyb;=A@l9(;Z6G~URj4XB6HE!{xja5U6H2CLJhXKR?JhG`m(FvIWiJRLE;Ojws_6iV za?ntpO^+=kM_5&dA8keePFd6`QpGl*BoP~=lSXYcEJiY%hK9^(vSC!b5*rQbQBD=O zntA>W)j3JDt?nU)$VE^AY20b(y!!=+CbM?{%=BJ^!SO>M!wm=B%(%RjvQlA| zJ}yDw+vl*c!th9w3WLC=;ttD84nu2!2coaVX|=VSTG$6m$_ZP8J;WWMF>E(kPFtA7 zD7s03_b6-8peC4q_yV%h!K@DIxp4;j>WCn>bbXDgvdr4b#R5T$q$+F09}Y5n2#*?KpKz#KNXamq_Wgf)Tv7g6zWNNiLKcB-AzlonRdI^-o;9vHl!K0h>#)#7J%qFIDOQh-bPY1B}g>d05E4s zw`C(TPT*<~02#cC4IB;P*VEY@juC&+Cdnk9qLBi?4R`6?5CoM|8#gg~fRVb4$RP6*sVP`UCN^Bs z2(~ux}&2!u!ohDPcqB4EmXp@_;`qh<-8dG=oqapr>>X3Hdpf0DmNzBurgaleBeHoykwu6Sj7wAks1YjX?x zFV3u358-%c?rAqL24KLED{db`0F6Zcpd0u9e(&LkTP_p)*THaqT^f@FOzxsAx!ObP4RL9K#F=Kla}l` zflv&~5^io`0)aTgyGHP!47tEqMZ%NvyHk_2SvF&z{iFP{1~zV|bX!aTzMG*)Hvmqs z4v5!m4Yja95q7z?gJjR9&_n=xPN^MaME!ztZve*ffEY6RmlM3EE#CLJ6S7VMBL)Lna%0J~r5-DFacGNjKd=z%|_0jm>B-vAk7L_-_eu`m7_9hvG;vp%k45vT9pKT$h7i z2jhQ-L~yK4LhRmVCac=%)E8T~(MJ+yz`#qwp}+L55$%V0fVj9YG&|TOToUU6^j^Mu zN1OQgta#FAOTsC#o&uN|+(<6wCD$aK&vWQ3AXz>s_8@8KpM?p*Q<`q1M1UO~b+I-& zjo{n^WIR|ojA*YIW;uUmjNDb5)GCYzINe#rK6KPt5NX@LqN!?;Sch?e5q`;LC%?Ku z(|8ImB#)L8UnH{K7i6Uo_eaBF-Cg1Yj_6n_MyxkM7bR%OWHpT-Bx2cLh}X*2(_w%& z>ac6H7a4`GkC5^rM^%}PH0U(F@iC`WPer6-VyTCi>Dgu0eL5uOGYGs(i8{H4Hz%N3 z6$7eX3@n?2rxej)iy3YQvZUfCTa8t!)eGHm^i|v%btCAP(Owh?xC;x8 zsBg;`w?$>ZW&Tj1m95*^C1CNQiJITFNex(&B#0Rrn!E@Wb{<@bFBNGpNy8WMc&;VkTN!m?=07 z7+{Wy%}fkB8vu4v!tmO&EoNigN@C8GqJwKWwHqT%ioHqhB)C|1M;sRsSjndYsdtp<+E*(u$)S@CqO>hg<})K>QZqP8bXM`3uNV;x+9?^*>aXX zo6NoeMX8EwzEky7so)JcB1wdLI7*d8f%+!kGKHef3l>>hSrZF$3s*f*0MyFF!QjuE z%rcR_%c8*06C_F6$;k21vxRYq&2^(m&mm@E@c9g_3KZQ=#^+?ku%>eeD$NQ-&XIe{ zg*qk9(g$Fy(`S@5*F~Zws4lg}oInS%u*W)}BoPXoGB?p!rDJFws*Kq@?qNEBta*ja z6RHcEOgQWIPQpvFo$d-Om@C$(=F~Sf>W2Jd+CF3Hx;7=e)|FPHNNv+86MMYo^(v+# z3|z+@dm^xz5!a$6T@KQvl?E%Y;1WA(gHsGcEw5#=Xvile)ht_`O}{Jw*+eEaXE}_c zSjhp)SviObx&3rYs`zD+MluK0`fU#R9}N@Dn{Kp zt=jnNbb)IPyXdoP7SuU`xzGTbZ)M|_Sruy3Wif5GKw&i;TmrJ{EvPamZD= zn0PTv=Ujs^4yNgD>i!prVkr=1z#U3Y4#gOyM?%~a+|V-mt9WcEY&4s73qJ+M`Et~0 z_6t`JU6nxc&bu8{=y;@+7jWcZ#q{c|GAaoJ>Zy!9M>gg=D|9IuZfw{n+Z&`6v__(2 zb=@bp)0~zbkon&1FnnE{6|zXht|z*TNvGWa)#=bKHE}Gaf;_X}epSt+(0rR#7`>(IR(54q*Jtx^P8*RF zV?`_a4V00?B5~zDafP!~dK!P%WPLbJo=V2z8hL{Z! zNbII=!gZ0U(G9G~8?Le=bZ}ZP1RmO3RP+Q(xpe@YEQgmdpYS3Ffh3Eb(HGH0hcP9h zK@ei{Qn8Ag0d3q3=3Q;kYF)%mU1A`nq|(yc6AhRmVNWi*6aLY%b|NjOmq8?J-8{>I zx2$$VbT%SM`Y5=xIGEnhfRYs^L~W;Z!o+F;J1200CnyBiLU0CP2pPS0{-_E=8ch#3 zcQBK@C6Jaj))okbtvOxyJ0>mx(`bT#A0TN4Wv-FkF(JfS@#vkbE^!SOI!cJRH=B?M zObKjsXxdT_=GWE&XHq1$Gtfnk zSVV9RHXsso{{S{iC@#($euH$v2mk}5&BeB|m53m^#6y8ML~CK70~^kzOUnd@Wr8m@ zvIYUbX0W$HR0|=_1V92bR$Kuj2|0(+1==2wFaj7A>IreoV%D8dD;Ad*HqMG>Db?fr-L92F!jEqzaf!U0gO; zHVt_IdVm7`MW*jB7ev9!m~C@)`Q7n~+90TqL7t`|0wh44CJc+AxRTktH&OjkjHJ%J zQhzgu1i-L85HT5&YyrNz^-*_Ozp9aFk#DVvXNhZLTar)%5q(U0%7cjvk|Dc*FY1a~ z7~mou*nc$}0Df%S$^<66X&q*5Dp`n@%y%jg4)hR4%1>)RXa?ZL&@qiXro;@R)kN~T z#M;L4r&Mze=R>3@%S&4wB-sEbI1wb?BwoQY#JCbn?qNA$f(Zk-7DFZ05Sa2X9NOdk5rsvTc#!?NF9&>hz;6p z5|ISYFg>+Ml1LB?TJ}i8WLVCMSc>iwb1jf|(Q{uADhfXjJX=}pfZh{{yG`0Wr_Z|S z>V}pH1cBFe#C&6%FTtN3Rn#+sVypz~Nx@zhk~8G~to(`ajc4LK8N(_NL!U$(qi#@P zJz@)hxIL77AVWMA!XSV6wK=^1008aTPN;*d`ma}!Mn?)zj;9DR;c3VFZYE(>#kwZ) ztzhYSSVpuL5J7h{i?uVp+Q85Y2o_oRz*_Pq6=9>1!(}SKxXg$ej;WdmHYPhJEr%U@ zA_{8RaEa3rCQ}L~txy2JbvCdxYb9R6VZ5fksk|6!sZ7bhMgfJOSZsHWs>T|Ts6jGS zHd8h0<{yQ)>3SnpMXM(SM;h;gUWJNA^(g*W0`K-t3EdPOhGQdF8I>UhA*$1u!qQ-sS)ltOL6%LnG&1$twl3-|@RC^2?j;f&( z1B@{`oWALKZ>CQ+Zp5I}t57&(KU5cDDli*LX?hiVF14iC?wHXOi6n#FRix_qNdWy6 zor-&4IlAmqNGZ^(Q8i410B8aj2AFePWDVsIIK9M=c~$XMA<>)ag=mEKN!VI-26sebL z;6{aA;cP9$wfT#hHzWO4SFsSFo?4QIHE&d`=pN6Jc%qvs&M+0>P*QiZjKtIHjz-BH&F809wJTkM0zL1^kz_?{QS); zV-9H0qC%Y%vaL0q}J2cO0z+vkWKsUr9z2&L|iQ#J`4tfnP`l1a5G!w>o@9}s19|ELM!P&1RHFE zX*ti5Y^;fFl`{<1c2+5oH#h2p+HG;Q(Hh8bRT2_irtm?V_Dtr)>txg^xW{#C$S`+F zq(s9g8fP?zN@|ozg6-AOL7?k&&!EuV(}DR(MYKTdP>W^7Xg!6jw0o@jjJ=9fQezlx zjLNTx0;4j>Go+MfxB&$HRXjk0Gj54EWhQexQLWDAKkTwRu*VzwLg;v_0CcQMkD^{i zZ91%4G}%_ONfHJ6sx`3Z5L^k%9aa2BDxEmWNm=-eZbwT6k5r&=ia(Kas#}}7u}1+_ zrW>J9b}+E!Y@t@;rJSH5T!uE~8bb|LtenIF-98>#=&D3a-so5!C@Zi6g~hS#!_y}6 zM56mC<8sX$Ux=w;DLJ&mb3q=fiQ=4EraGbX4r#WkbupprFMESpHae{L@f`>52zQ3lVG*+sa_B~n@(TH=0)hYL;L`*p!m)LSF|%1>aD*1q$q zYJ86&;z`{Sqp4AN0Lcn$sxwW1iMdT!{Fg$gOij$_3Ke?Ka|j?b4(ia#`-edtN^ypD zU_onMKIJsfLYp#OP|R*o8HHs)3*=70S*e4{OjC5AJ+(7Ln4R`lPRp54nP#628D*l< znXd93p$F=XP2NQdhdz6#j61OeIju5wDMXPT*-o>ZUzk2l>FHtJT$dSiY9`BOpATSY z^BN1i6u%=+D}x=BbO|=#erqZ-D7B1u507&y=q9GGnAjjy!5VJZf}adr*W7!QLXDaD zHtC0MV&Q!i>@FbFxqQ5IDxIGMyfqb>Lxd5m%FU(F-Z7)0;rwyZ82)k9bXaH8#mARZ zF+ajh!r>WEGV)wi%qB9UUK|`-9pO3}a`tzupy>dfZ&hKT^b9)w>j#H%)-|A4HXp{e z*;HaiW^)7G5NVgDU&FLjGid0wuoO!xwal>wd#sEw$zrvzFLPefE>)zAGSRn*abrVW zGok~Y8qyupRilWb`I;f_BQe%2u`yuNmg-a43)2GEXQ)J28+Ao|2$MdFr3v#1oAg#m zpHvUJB`{S?OJ|u`$ucI&52KjGl%Wkoki)+DWO}U{Pv(HL+e^!Jv|2bo9jVh~#N(qg z#E&k*Vg-bbx(hEqY-cx*y7V4C){HJ7k(-iY7oH2$=x1fknoXU&Dp9M0AG~j>`s@8M z>1FYM#x{_1P7t zP!r5=ZTl%kR-GneO%MQ_A>77J_nUM~L);nx4!EJlg)$so3Wns*z)l5`1Z2*7Cs zLx~X~N-~?04$x&YTa*U~bE8y14fl-`7$%qyKjlccI!SEbPv)ffb6Nn16A`kD344hW zB>+50Fm==?X@L<0^irlyU=Fc9y_7+TGH)V4NdV4*;7z*jq(L_kDYbD8eYCjQMb7=? zT$tZzOjb>gu`!ofBUDE?<{%DO)a~ws1Wl|&DHF;GB4YQ|07cF*1nJbkAq~z2z&PzU zQmG7+qk#Es0_b2#CC8)$Y-2nZTcEk=-?FSrgBm9}Cv&PjMqQ^~mjocZ0|bb0+<$c} zWjslT33gIRk8Z2tuf@LwZUf_6vF%}FIHwMz@EaV(jmqMFr*-zmB9W;4fzn59m&@Oc zZWP*h?*wsB3FNJWc2V<7fdKklJ~tUrO7UqQA#u7=_dxotOBmd<&~#nz9K#&Wv=AhP z#$%|%{TFjcVgyzFY(tzttinnbh}Or%3}E^pz4b6BoXrO~4+u=$kZ+ zb4|OT0T*Q>VhPznt+a-MNt>d*rNHw*I_{uLxuztTlmM*hi;*&7{{Zrs8<%alJ1GG% zl((&uK4G@gx&VC)NDbC{CwV04zKSetlWU%;a2ozmA=+g>a)28lh>P^AlXY-SV$V* zRG!;_d4Q4-1Q>HTZbhu5Nr9A>a|8J`OXLtr}bnOu! z-J`@A(a%dBkBCe~1J zCa4w{)q1?Y-p)L7oMh_o)d9mvYnTMIW&^3ciLtR8!MFy?GZI7Ic3Mt`;oD*@?y_r# zIr{z8VsXdqBuD@NnXQ!hOhNaRFe2M@RFPc{*dz^!*=$vBm4;(uZ*`r+sprIkZUxq+ zCLY&M>YFmj#3DR8hbNqL70t-toEH` zCqsx3bd@tuG)cKs>O6-?A9Od@aU8@0(H#ruxG@bA8uUYTT5xk7>p#siWf!=*cSR4P z=*3ZJkC{Q(&_RF)s;0)d<{(NV={z)@Jyl92YEX|5s13jasuQu#sPCE&WG4c3GJRA{ zI5WCVjN6dLtDJ7=D6|^-$L1we4$5xW@2V?tSr03sG%AuBU7F0pxwL@JN21Tf2eIUr z*l8*sv|pHq5@&QOl{3Ceq@I^gLP@I*-XP{UW`{R$6F(JBqlqn!fmeIlColx4RjM2b z*lvSn<d`ggQO~y!)g;JDO754aKn(81F2JHKAl-0f$oVYxc9n|4G>4wTf)0DK_(V` zI>Eq_;C;~renLSII;!Yq%^X0i{IMV_)Y(bKBPzq;xPtn&Xe)mVa}zLAMsAHdLbP@+7STVBgPjz$0r$SV6PfdQ@rj;hgyQbF`NP0iJJVcZFm04v1j0Lc2FREd*u z-B?H}RJ^hrPN<{@8(Bg@-9^L_48ZJ-fulgk7Z%v7A<{3l!BfK)f5}&x8U)Bako^&r zXn~MMQEmGsb3rCbm1h75h@064bd&c=MAZPS!slrNWm>H$E+W7ywVcXqBU9E^Wqj2w zFghT#psk9o#z@w5g_nq~?8hhtT*Ohz^EZvvYV@RNrJASc=J<>2KBO7?scRz0}G@ zr5&8-6v7NRb45rio~ZUU@LhGe#c4gYTwQQo1R={?UkFbBGW7zUsN>ZeM-Jisk(qpGIpc{KD`Z8y~xkPYS)+$CX$0j1Cdv_Wn# z)d8S#jYR69ip7B7*bS8{(JFP8jTd9-=+Yot)e4?k)d3~Fgei^&DeG1M(8b`c)sQ*h1kP9vkY z;n@0k+F*kZ+z_^KbsX0VN$9-)01Jt8DgxU_Mc437EZWa)I;E^J^D0(GSfjSX)Fz8T zAa+%8n0D8=Fh+qJ2IkeFYsRKj7)xq^bSCNcVSO0%>13)w`lA+HkQI(0hw>|jM286m zP?|~ABCLUv+Ech0zu8EF2__V&w=~#Y76c13?4?DGMqxD#eywwtaEtpcGrq|U3GlV^7pjVud* zcN^GCcdlQ3-_V^`Kc>5At&;)lh%J1^z1`kB64 zLNQ;iUqj?qi}^nMWY|MTW`$y#S{fWl2cg*lmS+$hH;oTZ=B>-v32!mj72?V1iLE4v zHqEKi*eN!iQ$7Bvqz6b4W2$iS(F937Hb4p>!GSge>ZAZ5n2>k=X^F}vB=!>%x|~Qq z!cSYLpdGT~JL*bRK#ai7-Nwo}tZf#!1rUihup%TMbiii33q1bWyY2oNT8ASn6S9T`rO z08g@*sV4C9ZOd?m`g!UX5o4@qlb{}(fpe})iI_Ho{%cF3bT<+9Pyj(Cpq}PW)i?1A zSZW5TNChBQ>!)+h~-~5p;ty69Bkql$RFeAc@$i z8$5$?FiLRlkT0N22r`$=a?`cZ9Soa@i(2#Qn=v4D0xVM(WqHg@?sY&3rY*S_PTokc z2S5$)-9mm*^}3L8lO|^NKXd@KKdc0t14ywVNRks-(rz^pEw1WDn7;eT-1kbs5qQl8 zU~2(0j$jGY_1Q=UmYasVuT+R6i=4A@)i5Ix(>6n?N(m&H={7|M9WZ)In5UW1terqW z8TDv792&sm{{WWD!~Xyn9v^-?;SL`WPK8RCtREJj`c0usz4=@~aDlWhpp6hCL)65X zLE?NGmmT34-WiCNw-ZdVMy)#$?gE8QN=N128{nAlIvvAtV>X}m?~Pzy7YW69O?p_0 zjHyPYCk>v$-+QmLxX%r%hNoVIcRS3(RDBm2yn;v8A$;rcTZXd@#A#J!H-=P@=gffM zH1sR04Bk!*Rvwx9u17TM0^JgE4U$g1QfUs7E_dve;GJb=XfvG>KtD}XTnPRsj*4eV z(h%(81rr0AbD%1Y8-}O`zCB4Mde3(D{5!FOVFSexs6|VpuVLdlV#jR*D=!6cl0G-as z-0Z+QH9z1$5;u*#lRHvde^kbynT)p}f)re401@2)Cjdo>-`OKzNY_YIv@uC2{$*KyA;4QiPT)r z@=oGrGJ)JE=p6(I+oAwO3(3COM#>L>NrFV_I;q%@ZJIX+L^lkkz=VJkzzrbWoq8`H z{90n&g#0u7M5y9g2Mu#$G(a}?E7za$+=lYRgDb?C2aK$F!m)t3Sj)hI zuaEn$vybwp_;QV(nfNBPoCAllo?MN?(`#VOgGbd zm^LR{5!l`hk*YDR5$csFW{;+l{dO>Y^+mv znna*bqzy434(RQs8tYvIQEDI<8KTRa;#5oV9ktPQw5epJnc5Kx4~o=j4r@S>rL;{8 z9i07t-HQh#=QB~|hrI!Aa}xK56QisqYI2riOz?yA0+&n42;dZSxN z<|cg=3{8CZ0tcd&YlyU1_J{{ z2abpOA+C(*cK`_zXQCV0CSXWXEts(7!; z&V7V-OJUF|&J_$3_DDb>x{ir?P6QI!33((L8trvbOhuAyHok5`XJMeod4!ovx8_%9 z;NMyt8zCKuF40Z6B1ke%Vo_T}#!+Cj>0oNSwiy9vGlaFEIm9>BUqUhPm=`#LOv=^r zjuIr#s?x(?DFDLI+1Tt-$KV?GHe4nFBpCzy{{S>xkq&6*aqZ0fz}V=kGdl>2c3SwJ z7G#{#sFoJg%3@W}DIK`CfEzG+t9X1<*x@H$suZxTbVL%b(7*u_1dfQ2G}&(fiZq`s z7t$9=hQ~SWkO1~v-6||$ms&L0U8RaGG7Y~})sM!F>Ug(#fRa|O9}%0G+pc1kDbIUL zMfxqgHBee5x0QM)EKOkizbQA}4bRNtFA6Pib3`9xg)lTXT0xu+O}9)ZtSONvM6wey zW4Z%d4MD_4;-`uNDqiYx_27`$CPz6fuYuPt3_f;!XZd2E?)bdP#>J|ZeHT}Wpuj+dSka{B9gkkBT7uOhm~|HiL>TIh$B@V-M@6e! z1x=R+O#-I+P6UDkER7SIFnFc|^K^^De7G^pM}O%*-EsKLCy`XZE+eA!8m)MCRle;)lR<*svJW|zhpX?3gNLn!3`pkb7ponxgbD>_A0$LbLQLC zSjAwgxw%^w+$z**RcrE+N$eyol3p}wsYvyywc{{yt^f}rb4JpMUE#0F1h{P)C<>At zk{ItrJ~UP-zoO0^-cXwn2({R148ViztI*8$49*9wm4}N!e)=hC`4I7ai^~QxA9R|+ z3tBWlHAs9+#i9{f=MVt6RUMTPMW#?K6PUZQkk3WnXBq-G*F+Y%&1^}Isl`^Bkag;l zR!&N6ze5{Rk@D(UJ`~ z^o4T*c%Fse?l5Xj8l%C@q^-PjMGDp)%g=ZXcVY1?JNI6bj>(JRm~2%sGsy4;hUQAq zU7XEBDr2zzb_unFW@&+DKD%8E%kH zmPAdJj2S#l$M$w4IEcye#t~*8*ZLI(=VXpQrFr({-(n%Ae(F5TloQp6B?8LO0Px-TRJlWK8nsz;g%#X5uTXr z`J~&jPGNKaNOVkPyeAF~?-qa*odRXR+HI*#AR(I|03D9sRWc4xbm$JLZ#k|8`y_dz zVg{pRz=(5%5JiOF?58el+mk~GY^3bq-uKddk;Qxty;ZDIJxz)56t&^l*DK?h1L*H zLY>1fEd-JbTlG;g)`D6G^9k+-XBZs@-KTT`46UA4{JI??REtZCfIQoGOj=|EVp}sB zrvmUyPiaa37^PxKB=jk=WdIAo`rR0dy4iXHCK3RblQLRhm`B)%fZYzlc~pVQNV`Fu zZK|1M$$$asZlVEmhFx_%5n~XLLuSK5bqSgzy5Iq0XtI!iMY%+q-8DhXTF^lz012QI zgy}kNoz&%|ftV3;_q|jRcnHwD?M4X_yAji=V zG{8Cs36vBj+<`DO5)!*bfXg?Ff67obl$z2V7LKIqdISKAfN{KmVF4#QA#{>r-rk6f zsMk5fnRHwFC76&%7mir{5CjV+Qw-_RIF__c$&n7#I3^lNGU3b)gR+s(>RN4-1XzT| z65vRSb=&;9vqTBPYxs)wB3ER@wNJb-969Z(NEdZE=Wp|0 zEBOBa0^C;%#Zu)BsY*;6j#Z{IoP(q9QUTSnIt0<7B{l3CszL?k_2xH785Vq#v$tc~Nk=z0Sn|Crmg4VRXcYLrZO{ zLq`%bN8Lrv0ErgZ9nb&7nW99@8zv@988aH_fEzKJ8MmrL#pdEc zx{+utA}%#OP>BNf9gqZp0k9eX8_m7?sETr3E}1qF{#h}2FBXC{9Z?`>X&{Iw0cDGT z2s(C601_P}3n@Hirr<$?x{jjvgaIJZ(R=kWoH8O{&q9!C4ggq0!AaRp(r*PQ0j%qp zw!o$!36pW`RKpAOHX3(O%F{c}q^1NM>sUi|)kW4WzbTFMFp4Qdq;pNZ5S|DwBEwPL zAS>54+rIF=ef)RU7=OZtjU7;a?xDlec2f>;HJfPv0403|QW^;PPR1pC(f*-0mSKMi z{B$~ErauDHCI|-*%lB8sd83=3{x*-#y3QvBLP#zwY?0O$VG&)cPZ%5ddO#e*C?NYR zt!sI((W$us4;6~@ss?~V8!#8Oei$&XrST=T zn^*GT_!s{4n;4E*yj-1^A2x3cUR|D_m!Qg1Lx~?Y^ zQjr*=U7&ND z1;b)jKjU)c%%>sp;JEobQODPyG(TlVtuhH3EnGtjUu8@&{DZ^5=D&bZsEs|S}xaRdz{s5+k6Zm<4Y z97(WA^u*rfD7yyJGmaU~H!4DtT1Y=tYa?@NNj((XhG-Wgs&q@TvvA;;5hQY3+M)lG$s1+OFp7oR5d?h{riPek2= zYuy2$p6gEwfpZ!FXd|FhaJi~f1_@mz9+Qg%1K!C;MC74Fk;2hy1P~8Zpza?|un&O- z@T<~mvq1|^h7H7P3eqy@&8be63u)-8*CFBnzf!faJU>F`0*6}*Mx%s4v_SOLQxaz} zjCEF$(SDGs{#vz1W^i3AuoV2s21KeHMa`m18}>>XD!VcmO*)Wn0=rWalndL{Rii*X z#m)s*#@q|`ty>BlIY8=G zi_JGT{{Sw^wMVt2fRr#>gkfVToUs5As?4tOPIC~t4j{^9pbb_IHw@W1-c++pWD6gj z<{SbBF~qcqj)|F8l@kHdHAf}wFI zQ@L9|n59yg{sSaLgJ4Jo-DCQ!{7x!?Fz3jaL$@PaGON7Or0+1#qQk{uSmT+l*J8SS zRu2yPMAEIAbqfy}!`c`~e>TE(NuxtOxFF$oGo-DJ0ix|K&*$9>k96~)(ki|LaCLb3kRrOvnw1Pf`8jWhy^JN+1V5;Jo5YyRKwh`1vBoj9U z0%{OJVF6zAGqzsG1J)6|%)n%(OGjko>6$#BiIy5%E+eo{P34C1*=W+qQLby)TL+?p z_B1 z6)Q#gDY5**TxVr(2~RL3#wY5BQy?~BY4lJv-r_(60Em&l-9jz7p|3fd9Y0jnDia_A z;nXNnXlMn_CCBWD+NGujos?S92|!FcU09sL0PeJCG}HbvRZJ{Y`IXqi5# zCg#D+{2KTkEmDyTc`t85v`gq>$jIQw8+QvD2^^+%|CRdNaZtPz7_Q94C2Xo zO>uy4)ltLonzY;+{{Y@F2q3HN#Zs!trDq+A9FY;B!+f(7C1_zBBonHoNv?CXBh_4| zLi@-?jU5LLb4in^-FhDbio7DD9O;82y7LSS(=FH0dOwBnU{VYw#AsFH+0V)BoeG{+ zLIkx`$1^S?B={jPB4{7y{>dzF!`f>*L&j}Ya(x?u6+HTj}v|-o&xRyC4FQ5nGK(cKNegGEjTPUD9{|eJ(tQDAubau z>p%3qXPNN_;^kL9a?!&u5u|0(J12|%a{4EcPFVe;@60%pmB9Z1xJbOKEo|Jj0PA@` zW56J~T;L!d6c#a)A&o4CX`t znn?fwi0SH+Y(xTNK?KPOfW?B-VhAMfWjw<^wlSva zIbq62$_(426fhHn5_NFuf6uChT%z{$ z-*m>n870@eDFRDvAutob4u=pWK$6o3=IAa_HV&UzQKmA}yNHrt5P%{Z4xM*5Qq7Y$ zFeBAUoXzB0ak7J%F1O2jbw~*Yk|Sbf$L^(+wX$Kof6l4}!tzPAt#skJ9M~kdOo9B< z0iG{me&&C`oS2>OGrE~@YfQVCUAEOgf98geFY?JU0O~hAQpf=p zffLrr3*4D$ylPNT;n$eX?c;y*RPyJEB$F}#DWjV-8SA=nX(B@f#PvW6DX}Kq6q?ci zZKqNcDTd7d02cPLENJME;BE%Vz=cu)fFjaB(L_@%jMv*=x+8>*bAS&vg-0QR8t5@# zMyP?3FafcEG#aVNb3|BaF}Fl0Ie>Piq|NbA}( zgo)R0RE$iSw{=4iP%drcfTT!*hDn}d19>{22hP{T^q$Eyn@HD115k#WK%ZZtnRV<= zuz(xBx;84XGlH7-`PwyYG#q`-&F7#Z*X*yfEHYy`oRAHEQhBk{Wel0v_LWr z@Ss2gDARk{07<|`V{Y)Gd23rE@%v@%*kVw;r z?o(yYB4nPMAO>ti8x5dq*)zo2+9{UCQg`T7W-|f+9k)OcFUkOcKB^BniM5I*SR*h7 zeb62bXlMX#kO9OK9HceE;Qs(6@|XISKl0y(Lrf7+VtDQWocn(Ceb?25e;bGd>gDnW z`kvy;egybq0N1&L8{!-_GC=4_nb~c@{{SW@FFsy4+3_b3E^`N%251uo%PN`w0Jsxn zr^Lt-HWmvv2+74ZZ|b|A&SeQ3I7)=mCnK2-AT`l@kv1mA#BT=R8!6Nz8wgURNW}eu zlj;8elD9`Qi3Tx`lG}R4)SXzkYm|B+y?{FRDnX=;C$e%XW|sw`*E#i^Ia^`sw3_nz zgaA7P*nBy|@Wwi0F`ac!!YP{Awl&QWtP`q9_GaC(<|U&Ih6VPKzKfg1V_k`SOf+m3 z*NYtwWhR)*uhDb#*_v}0Qnv5e(wUTzva{{U6@-^NG0cmot%e20opG7M!A zzd`9M;SUj0Evj>we9N7hNw%v$!pHPxKaqT`oK`B4bB0l`MN*{)G;P_Cmsyo?!hz?=iPgH1^vb(9lfpDwVYwyY$I;)_D8;SK* z>k{dga-v5DYl$U6#!1;*eIReD1x7)*S2j2BL9J*4E_*99s0Ymcs`rMjl6hZtXQdo5c10~Q8R2NZbu^@LUqw3XgB$Ow;&eYGU2Cz=e0r_@Qg5f<7#aufc327uO z`|34M&js3{i!4-{48~Ev?yjQzaJdx34yu@G%PHE|K1IpyhwPZgq!HMbk|Cn#)awd_ z45Ae=P1&Hg-Cv#Xvg07-66%pj5FQBe?R~S`Lu19RC0{(r&BcYGfkgqO{jVCDS^#@ez!} zw={#Sg zKavdE->Ow9fFdvYCSf@x#{RcZs2t-Nij+sdd@UfuuA`zUaHm#wK&4Ez%?@}ova`x` zymeHpoif!o=8xo~QKUGy0)15IG{CS0D%A^jzf{~0Yz}ZWY|e@gbOU7Ihg(jksts&T zQI)L|)l0C82Im&eVIIpn5s7|c8vqWf)?)nGfRm?1QxMrP0y`9@%@a#Tek&5^SQVd$ zYpM+u+)F?%0zeveKy+o+N!134vlaM92hORVNH*oSTBOUe#46aDBpY6PsF&Gt+cR8c z#nA(%%9bZ3eFfF3>~%0$*}R=exg_p;{{TxW&BN3Hyn`D`hh^gZneG)SW+P68XYmQD z%+o!kZ`W&TQX?qLHSV#UKxZMq->O;`M>~n9nXZEl=nBWH#4F+I7Jys_RoCJ;Zg-N# zk==8ATLAi1U2+FN6HRtygI$!J#p*l^)Wc_F%zYeWa|S${NQvyJ*AAxNn3YM+c4Ffo z`mGXAM@BqJ=-0+kei@bxzxzt5MAW3>=C%pE6;YVVjej>Zb-JBQO;?*)HHV5D<9N}q zD;Kl^06Lz^-W8#SNf5B9RWc>~$8~Yo!ozBWTTrvh9+8{JtV_6>?5G^pHz?~0hIcT! z9do(|=4uz2bjj4KAdv>d_Dy2ZPxYcSCBj@K9-Vela6Vl1C}a@(yI$(eHn;ejZ>*%) zyjIy>rFK?%IUsb4p}N4uJywQB83D6(YMvdrXF?QI4p&Ai80I_V5OxaH7qP7*vzyUr zeprZrBe_PUf-fdOj

M9kYVXy<$6oS|N)4I?{+m5P`lNw5HLC~d-%YsX~hxP)32 zDEWW8Y?KGQ)^?U2$%QAd7?J9sbZFj zM~C_vI79ovW%c*^T@1c2_{C5bfKm>-@X>b}4K084fnoPXmzVqAaj zFpU|VHuBH(Rf_)r9$!YWBkJNf+*j8VS$^UYkI6uFUJnGbJ6a(>3F1UMbud z09r|r37-N1cxz7QWf19a+=VB&0RyypqCjk+pcn^Tt^RaUa{y?Ae6!G~HOAAS1a%=! z_Y&9_gaH=_+F-~qrRHle0K62!0WE|70Fru?!@-v32Uim)k&GG%2S5yo(4r7p(BL_4 zeN;fWfG@8^M*Jz)>k^v+VPh0My_L2#L z01`Jq4^iapr%k(|9$_$KO!iW7YX#jS(_ieIlOj%Hb_Ya&QV9gKj`6SdNbW!(x_hQ* zajCX)W!Kkh1l1~1HO(_EsNSH7_k_@e1PRf@ab%o%ZTwoDk}UwbPi7OLFAawq!L@Q6MH7qmgq-Q5~5sh_q0L)BeLrn2t5<$6aMbnC;)BzBnim8J-vo%JLOiEy(oen%U zh6@WxxBc5oj?#5T@Vz|v=e_P|6xv(~+Q>NeHSKF#Y@#Jy;2CJM5pdG>7E6V`pV3Rv zi#hHwU-LMpxVq%di#YbxTE|i?uK1CCtg5|%pzeAo%V&2SEK)A;+77JY1_aoReV5h$ z0EWypCis7eVrn(6duoO^A{<{{WWPiR*qY*nf^?t?(W;tun?`G|L$>Nsj*j!UFhr#LQ`~ z_qEyD;bPqh>b}|hM$*aP%Jdyr3T|)?GaiCP_3P1mQR0e>{K;clK>|Sn(f(|!@gL}M zbHDO7aoEO*Kh0&-7m;EB?hpsgB0izu|k&t;E}8R`-`u8Ev2-c_C^7Ct(cl1Y%_lwA>}MNBO^l`1qD zg{O$ay9&`U?5a12j6Eju%Z`e5v2`(Q6QIy5DvGu7uBP}GQKw%ygJo9}Cb4M%c1{{W z8+R#m3hcV@)6Ja>az8M2x*^qTe7vnU?5l?vo2G?bn)I;`1QzJJ92P0ArYGiH-U1!V zH(NMnHQkD+CG6?26%9uTyH?dOX%J?|MbB`0PY)Y~(lw>fKa!-3To!QE9hwP{c2)=? zKcZ|E21q5cv?^iP{{WGo0kA6jG04uTS{#IH856p(Ukxsp_9#M=TJbP@1nC5#bmY2s zRw=#-o0KRS$!Q>IWM(iJ<(`OJZbHDL%R?_1iiL3iBzP@erq54$wKk5-gUAm`68^ zq)SQFzKc9LtPr|fRRa2Dtrh}SRbCv&dh`i3CYa=mz(b6Jp;Ak&qPlo_XeWM(wQMuy zKSi5HlxI|9oC}LGxD#mx(qP-u`l`;T?1iLCyNROlA`Gez8C`u;`~qcahba^N5bEHY zS4|Ufu#qiA) z99n&XP$@{@_>Kvbfp9P;VPcwL)nqs>yNVh`gg9Si%+{nD;|#IV7P!(nINT{^XVN9o z4yX4S`478}dSbFpF6F1(#00 zlx|CVt5k7~CpDyORu6O^*u2VbH3vnjgrP{dW-x#9Sk0(wL2oGRj@qwpQeio=lw{!0 ztwcVd0wb~2MU+J%3$5(4saAVmn3a02DV10Z-?9xd@l~?yVd^$ZLq}zmk7j4XK3>W% zsP~+q*8LFP_tSVW17fAibV_)jK2}YBh^=4^B>l>jN4B7s2s;pjMo|eg&3?%??tthj z-W+p@(Nm_#bi^z4DH#M@ZyP6MzZJG@@a#jdwE;5fg{Pz{oE4HW9r@^J?720-ezaoNqb z(;>vD3U3t$%Iy$nMsh~0R<#ez;GRGd-e3>tvnVu^uO$@j4L2mrrUXHN(<7Ts>TPH_K{Dyv zdnkx4Gb9}(YMfOzA*~IY5&9ue4$uLO06HRCqus1^jgY|r{G@DD!_I3EBV7{$Su;A< zaQ-82?vtC8*a(Z=Kg`fN?LX(;F*5J`rXn;z4qFG5nEpxNhJhu$3XXe_ZIsE_-$aQL z;$R81{)hq@b5srkFpv`in=pQc&`ez!!ZQM3k^b-U5X@&8h-e)}kOFARV2J4!A4KGm z?4r({5^Hm4N$ESKQNKJy2-idkNQR#>15LIiF%bZ`!0WPSI1+h5BTxiSqG^#N7VngV zFo8I=t;%(a4T?=Uv~xwSNZCcfrKcTA1wZjVk!o^P(^{U_f1jFxF$`GwhAxJ$_RnA(BAL~xCcw_ zh6dr8jk>58WhBASnJR9!iVimsa&8rfK-|rYY*b5Uzgww0Q>p9_laRdmx$Dsk)2?xJb<# zO_P?~$vL_vX%5U}%zGk9Cz!C@$TmOb>6}YpvJKAa2B8G)*+@JVo0*t`nL-(^1Rmt+ z{Zo<)q}=uBhWA6-0WrK4BH}I^ZjzOXM){!j>YAZ+nIN6c=zx;b1|(i|LUvhk127v- zs2N(OX8!;XWP&ZK{QUm_Q=Dn3@r&T@2)`($gU8n+asL3cB74W#eu5U4mI)1>qepI6n@)xNgHWLJ9j7zXF`jPIze}!12`yc`^t@@c#fdHRRp7KI*eXn7l77#3k z=0l)ebfbr|zDPY$aMZx8$rA=s}NG^C5^b4WmOeUd%Bkr)nK&x@h z-9}5%)yC-C;H@pg)$+@H!p9c6pykaLp3=VM_*=uM(C}{vHA`w@MG937Hi;D7mRtet zJ(tA(8mRvO%nB@yavPoi022|d%KP8Lm}g;MP_x}JczCZCbQ0ndhp{Lb-Q~008`6B^^t690~){{-M z11KinW%5@aetPdA#oNf)b^b5w#-#JIY39yn6!!-?WY(%lBGmP85b7{rB8J*q-oB9RB00~fHp!e5u#NIB#D$M2eNPtdn9VMMU#1s z5^V~*^9MkfP8joHaGV*_4BF61C*2OULr}WrJyV8B)>O*_P3}gCv<<;pOkPR#Q*}8R zj;P*QaR3PQNz~k8`XfSlCakLFKQ_{yjt%u3TRQ5k(xsW!y1#~|7zBtYmP>I+qf3RF zXPfSiy!jAOu*V_DIs1s8f|QsNkOSj zl{OIAB{-6184*dZAeU~naL)~BfEFV%x}Yv3nb56K%FMt*5<_>e*sOV=&SwBR0=djz z5iY3c)RbN!Q$0+j+^U5}(=CBB)j5VYj3FA%dFZTB#Z_<0NjhBxn0CFO$sLNdN}E{n z9P0$yB_%dj#WnACXFw`6=v1q0(yU^uRk&Ol=^$I7S=>IGLx2s7do2OT;mbGOXp%6>*{ea#3~2-z z*dw;7I)NPutA-q+GzhP#CIAZP%WRE8(0Po?31BYycUDG9fC!Zm**4R<9g0fkL;%?{ zd)ZE#UR;gjxzC7|D9Ccny%Nw#Hf9F*>O!)|0TU_|m~JjYu+|L1L6fDEmL5_fGl8t2 zRKvmfpmfz+bvPEf3+RAJy!s?BBED0c8Hn5=;^qf2i0X`KneEaPF*KpJyldGVjLUnS z1RHFr)g&94R&i`~@`E8~)TrjR<5XF+O9&h@a}T<&T!%lPQ1eX2=ye^L@)WY7LAskn zunQA9les7L{+2*~6d#xedMhkr>M*#pwhU?wq=0Sd{cfV>hMSd}OQMlT@YX%@1Qc)C z*=?FTsfT4U34~fw_klLqI1M8&7sD$8=x`RY=kZ)I^&H_-nRnQh647m=)na1bd+z3JJEI*QfDpD8ztT&^xYMi16kC01?$GX%63K4T{0@Y67bI zE)Lo{%IWLyQs8x!Mz;g0NrYu2ozBYBl?ANQR&(y4=Un}gdtFF?MZHzLT?b(t4>0!C zRy7@1!7_V=Nt$BbL8#RaA%@76C^Qiy7ar=c!nv~Rpt`XKQzLS(*>mAb;KdLn; zz0MK{Jxtvmkq`@t#$`_?2p+1%bU_2rS;FDm=O&cfVKQ5G7Mq*O0CJNk`DePY z+&Lmcq5>^CSzXj679^KIX}Q3U(P?1wGUQ*Zs+BPEGc?^ElZyrJQctqq!P9bABFoG;J$#sk5_g5^u6yym9;H%qK9jPGe+(b$x5m|+`6RL| za5|rwuG%Ky)*uy|h#!~4)MJD}h(_R#@-eKbqnhaxx;Kd^vX>I5=Gat+N7CuHW=Vd< zCO9}5v~G<^nGh}2Riy0BfnnS$l!vM8rP)i-kK(ow!yMyxW&%4d9+-)UmD_m5xj1FX zyTDv!Aq8{i4W5S=^+vA_X(UPa3+*5Dz@k~6A?or7un1D3a zebAcH0Fr$X1TYw|Gj6NL(cVZno5aQQ7biT#$#aX2gxDty1P%HCHTO`=bcyLVKnk-2 zxQIJ;^->_X0C|bsOt&~K(=D%QP`H;D$cQ1o=BNTt>R@O`RI*E?lI?U+62Uo#T`p6! z=Wt|_H#$mSKkqU)6C{ZlM#?8Js6Tlv+z>xhCP1;1_fBL7e-Ijj zWEcg-vo6?a_CN;&fg#x2G()b6b~tAYl&z!o~loq+>m=g2pGf%b3o?SHB9D% zBmzLZYMI=|0J)h^eK$45`P~G3pjaRRKxmAhW)W}INyG^P+Za$|!?||?b4O(s4stIs z*2My3<0G%B7P4{8X(o0j?xGqT9MBG?&e}?O0zlYB$7F)U<`ZB@lP3D7yNnB+0Zs+3 z;BEHkqFr;Si%Mc5CPs((Dg2#>WYMf?+$l*K8TL$aP3<690!PrLn30qaBz(kbnhT&1 zMXVHWN&Cr2WZk0o&lEP5%J7*$%4+H;5A>`J;x&*Z%7tO3C#W)*5j?<4NDdk%ae!ShymeEM4X)Vc2KPa!B!F+; zY!Jo;&|kF3Ab%zKfB5ml9B1Q3qjI(|UK*glb6jS5I&`^TsEsc3S^>Clu=Uih%Advc zVT=4{d_iykwucVk^o;8{9j9)-%U&<-Cm-Z3GH<|0JKi={Mj zuWYO-1F;^+i~-ID07S?$UPNf5%57tNbm)pGyM<_T+TA?`*8K{3X*vW5iCG*mnV&IW zH9M_(bsWYx0ztjOQmoG;b39#>Rn6bJ$o#n#CKk^T9%V-zNjL7OR;b!84HtjZq7IHT zt?(umjczr=Lumt8VpvHn%-|#wZ8qI~x57(C4uvs^H9!&pWMw@L$JKmm@S6=+8{-ZS zNuo)rY7k5`<%=0QU45T`r&kK&RMVu=&^DH~*N9#p<+*7d{{RY(IX-6mP+}ch#5^jH zaG~Y-&dT6RtQsS*@94f{;}tX3dHF#k$4<-W55#sYl{{rdul?(rhjW_Z>4#<#W7}2p z&lGuk$(>E?y)G1&8a!t{O_*4MB;V+%R%{Ev?5<)U5_Kw#T*lKYdO=93S=m9q(Nn14 z_dsd&SD%D&H#Rz^{Fx(29;-KHCXClmbB%;f>Mp^aqIOrF=F_lln)gCA3=?3RLT}Mg z^s-ol!j^kM3UypTk^xh0B-3dC2|KDHK$JgiZ07hH&QDcoZ*ho5*I)^KX)mbYl zhKnw9T+w?g6l#W^QYWIRN^0t4^hf-&+VOkqWSo^LY_`^y!5=a9S~w<#^An<@NI9Y$ z2`a;D5Q0)o7OP^3aA;_cMY+NQolFuM(7Coemy6wWSO>eyX&n_w8A7Nx@YS-%^jg&3 z%B=#xtc(+y@h;QVX;N&71RvFEzKn7-DG`*k5Iqv|^IAfU1`_82JhTwo0n}Y&R>f2UUAilHq2@fB zDiw@4f+b5gPKY-bQgwviop7meAtJ(CXcMXpN_isp`zVl-=jW_sSoBC@X+M0V^;Kyx zg{7lHWQiwIPxJnkL}fP8ml6>pqQj{NHtc={A_v6)|*9Q0DuNiz^X?ZX%n3ZOZ7uWk!<% zd#ae4VwlX)nD2Ex6r3D>BM9s}vXL8$EZlRmm==ZBV(B)ymuuN(;<$YhcMdvsNjMq7 zaduRw&y+yyu?t!a%oW@5J{eKYEk7yVRt7VIy^lM}q}OJ=dEmBSzN6h{=$W9FxVp#D zXnsw!pAs77H{pE2cLUUgr;>rbOjRQ>tS#I@zoIodfDslwNwT$D36Z2`k=!co02mAn zfwknuzgzpJtWPX*(FWBnbDZa^7<$k%G{oyVDA2?HVn~m5W{wbNgLv+$Q*g^=EvY5Dv~4sT*@>Re zt=uu}%AgK+-<-P98nUZ>&Og0};E zdb(kGjXGtn%m*s;UkNyz3tJ%0{Z{z;IeA}bCKv`{f%|M0hlvI>)$4lwo+t583Pv zBR7~J3urp7LWm*4-pjD@nRn!9jFJUOopvjfpul9h_t9gVc6uCjf;G5tgCs~7UvmEd zrac1RfZi#^!Hj2#u{8lEOa`@}9`;`kV3`n2hT(nn{+n1qPw=gU#25z^#_{zWS}y3U z=G^}P`JrW=Npa+mlgs(BjUQ35?IsBpJBap2&LD^bw&)?JC;`_XdwQb)CM3+x40CKF_HnsnvgWhXn7W+BAwH%OTvhMr%#U?$T9<%uzPvXBt?uo0q;Zc9X) z5>gL2a_Jhzr2r>BTucndl#Npu2Q2>p`LPhB4tE@)2$Or1)mlM~B*`M^0ClRii(Kb9 ztpH8*9ni3N`Z(+>F&Jv1t{$kCRBy`R*rI&XFl63u{sh94Sk|$PYZ;)X-5cnb1k5uG zxw-`h7a0&F-?}54A2r+u%eShIQb0Mh>-AG0M7S3aTLwBU4{{X;-8aA+$M}X!*F+0jxZb>@mKh01P1WSk` zar`E9NCA}WMz`0xlr+I{p0lz|b4}a{H-o&!s2KuCFyIp+FOvn+A<;Q#^rYxHY8f z(I>WEOF?Ydol{kOFgObf5wE%c*>H}KI-!Up^@4~b>LCrzCDEt(`YQr4u2M|edZus; zacCCUq)7q53wP?7&KaW8E+cdR)gD~pHEFc_ryQ5{ut*MTa`gjY{ZjzYTttJse>4FS z*E!CDZLj<%cQNJx#3>LOOc^76lrsQCh_rg32?m!ynF$uduO~#D%f;uUD7X_KNZ9~5 zIdz`hlK??7L#}4p4ypy@G=R|Px|_^^TWLUq_L&wkZ#@$LVnHF@lFnuuYwDJ0xR8*> z^1uMeBe+cB8JOh`J$k3*Aeb@J*F^3XB<-cp0%$IM;24C!5a@%iRT&oq3w1~rO`2Ru z)c&Y|B>5siH@90TfiAV;Om<1vHZeMXRHH0|W9XEC?lJ75;suGF3VhtsAnzyoA=QJJ zkZdN~APEO~m1*oVbYGDlh%O*_pW^=j;{{SnjT}ZB4moTZ))B9+%k|QQtJ46)5JjxN z9X=q{{P*HN<6bC;FYz5(LDOes8ANR>ukrTIPGp=IH5eqV&ks}O%mIL5W7KCkvgtS_ z7{h7;-fYJu`kK@zv6QuW5>GRWwIuFzy@r5TK(Z;N0zr}#F!fya^HVG##6zP=H?cN0 zBX~Ce*&ir&-r;I;0m=aClc}}{7xhLo=TMr>8gurx+<<|G8-|~J!*n)s;ug}0)3Gv5@S@zAUF?Q z)he`FCK6gd6y8=%h3v{ z$|C2oPji~+i1tye{!;=F+mRG;wZ=)+W7Mb|9l+G8mhoW*1!O7kgwr{U_g1kua9i_jvZiqHy_Gm&_7K^0o4RMLs$&P_W-?>dby&^| zRLBNO#jnGjBsdW&m!v6179x&gnoMpG*@h*+mqS3Anc7wCMiI>AY{2Re*wLC>>VXB7{BPx{^ z5uqo%D+P{ghHcb^0@nc6lC#h(T0)~pR5P0U_eD5TKr^RQR?rl$mOCOn!^;r>@7YAQ z;SU%Dz$t@y?yP6b3D5){QY<8;P0cp9q$TppZf&rDlIaEqQjE+~n&}R>LA67a5TskU z6DpAeCmF2Q*F9J|9;z zK?EMlc7-um5DZ$%piGVlxt7Ld`Qn?mHUm`^IEVgA>{l;`1fGL+zvB1i6hr_gRfR#L zF|y~+XQ7Q?jhrn%-8>2TZIr=Zpug$KNVo8L;b%KqoI{AdceXCDCViLZ&JY&^4uWl_ zi}XMJJE{3UgP#T%`SF}Yl0W|ddbs>7OwJD?bfNs(BR0E8JgP4L$*d*f2 z)0~4a(ns=9`9;G?HXf#<0@2ZJOLs!m~RfEtmel2k|pQguLVT?B}j{{TG`0XW4*yD$*ZvWuOpL!B}S z*&+*C22pV_)g}TjA4CA=Of(piBoVKo88Ie1Uvi5CkQ*{?PFeOH0$|}Ya(0wJ5e)&( zCQrT8%Xxz&p1UUyWR{ER8ig4J@L)m&D{~PB3=k87*UnpI(M7^p1C-1qP48=tW(=V0 zQ-P8IxXa7|rM69&7ZU;jl;p^02Kw1PqT&bphUo~40dUd|u{$O zAOt{`>3vhVrpKVveu;npNiplFM2wzX#j!3Ys*^!;%n(L~6huhAVI0=c6c~KjrXVH* zfFBx&I-UBVmJr(+1pfdPkqL1&7LCe_&R|19osV<@s#}!WOk2~usJl{P{q$0Et_Ydf zAp#pV&_`md2r%aaKsUA1k^u)O)@3IM0!95{M6f`)*2M0BA6&C&*SS%6A)(t}L3BZ+ z0HQ!9NG3Ft0GwvpjjotDFo_%92vU&UL?1*qMTUTh7S#X~F!U2*OxZ&_bG{6LsZ78~ zY=CVZmr)JN4Y>dy371PmANWx&BJn+Y_e|jfF^GvB(+zDUy*j1#1l$MOB}LI1b(v5v zjIwS9*i5@}p_l`#5Ax`MOt?;vN)c?yGo%x|Cg=te{{Shf6B2aRMybF7wj|GF z)g0RgNS%-Z!NJ9V2`6~belu|_aN^$*z9?eLZCAydNC$tqE4{Pyh5Ijrc3eZEK2rZT3gnLR>{I!&h78Hg?}=W%wVo%X$kfLK7XMCB_)&PTD_ zPK5iZVd*;&ilt0{6UVTbNCHK!uW&HdNPFu9@5b7K7!T9JsyFcL{Fizs-?xNT>%E>^Xm0Cdq^8T=eBBrw#B(X!Lw zj$_|VvjCXQFb8#yQO$Kp1eol%coiI#SocAjk-F#2(dhBVXVQO$>?LMlxP^R}YNXW- zAiFb*8#e^&+%I;<)M4TE84b-DvgRSM3DmC>_yk!)g;dLhsfZ%6fZGrYiOjIteGFFK-;bRCqYb(T`Q&87AtjOiPS|ZtBf< zwV>PH6&jUUCV9P9iIl!TVjj@wb>~%1r9clY$5dz5Y{tH-wPyy{Dan-)XcbECXwZ;^ zD!JqcvXk>TSmsHT+~^VPrf5y4OekwyBQ9gG=$e)c<|V)@G^mU?&gWlsUlqg|@~{$B zuai6I4kr*Ok^l;mv6UQ2A_qkE9p*TaR6LVV*vLepp(V4m zZdFR}1;b=H1;2vB+|Xo+9c5Om;PPFd=%Jcm{gm42BQ?U5)|qghWHOfxESa+BLq)V! zggvFK5|2ZL)R67vQ%M=+R6YrTjU~h?n99!&I!ASP6w^(mph3}5ICELrlif8COr)r) zNzEqZU*Yt_pC@jJv~W#nh>{kr5{oGt0hsKX(VUF&QIw>560&R41~WvhoLj>f;C1L$ zE8607INQ3Z9H+9aYME>y0ioITxz<&R#ekiP8(aaM(7|1fAi5rO))mK71%S57fGsZv zG#-mv3c=-A&5)@T3&&+9v=*7UMxp-zxpvt&q8nD%oqMeeHW1bMMb$}^tu`A9^7pl^ z8BbN!@aj)%1l?d^@DHa{WuJA_@Y-RmZemFt6IMe>BTj&E0M9n%YEWgg1p2B}YEof> z3%jj41ZW#?qTgCDdK)%Z^J=G2#^h+FQh;-Vj++G#Aeaczl%kbdrNjYXQE39}5DJlO zn~$P)vI*!DZihVtZ~%+Soi@qa>Vz3_3f(GZ#$_dAm?qabx6{#CrBV#U&Y=pMbHhx1 z5t_gq0_IgBU1)bSxz`rxo%BJ_2^w@pbsV6$2_ZqUMwbaa12M7mOUcXx>t%(Fp_G{Y zS4)hia~eXx;x2}mXGW4JMZDe#qj3UL5gtS@i=PPFoF-0H1y0Fe?PNls>U(tDJ>?TM7))IBRdO%M0@@e$eQx{8#xh0@VMdgo! zp^XY)F(jPPlo1U~3#WJj6w9+46U(_y>SHqiI)Y%7fB_QeF3b(5RI@n9%1?fs)QGVH zOiFJo>o=GHn-oY8B+cRv*-mX1>oTOk97V`GTl^`DTL$JuwN3y|XeX)E36&^xn7IlM z5il$PFbb1MXql2g1nNzY1PcKqhd@0o{{SjLNdsHPx~6awc>*k$kkDe}*dCu$v;hkR zyBo*(bqu1NM?4#msQo2Aa33>$HM&8=Fa(bM3Sc>KYlJixMbGk3beZ+~q~~)N3Cl5b z)m(D4w1Raq5CUl=kVIe6Ddr)~u&^M&Q7<{AqWS|HdMA#C0k?F76Pj}ffHeOAKB_JR zwCYI^k#mcIFi%aCNez5XU^TK3$hM(yu+2L9r)!2|8jZ}UwSc;G-`PdQp~moafwE$O zoLetBgJYs{OGANa8=v#4iOSatdJ+`g(DA;u*#glM^JWrcMbSYMb6`6B#Xtf@4rF3ZdkEWFw#SyNZYaiPm^~vMuPe%mY8t_L_|%|U&>3IN%b~NT-bJ7$=h^*&~G%5 zO||}s5Z5*g8PJc>F#=EV2#C~#@eJlaZB*-bAOg2oD z5;}wci5ma_?IAHTNYH5@CpVjIHVPmT@0)OBpa&xRTJ}(N-FAQlq~24RxH^BEsJdni z~Yqa>3SypHJrOy4A2#F6}v+(w!ksR;fnPU;UcBX*tB z0krIPy^yM1=PmM$kqd#iJ8Dnp5UORk2Hjh-Km!qqI9v`cxgmv=Dm)0ino9gq_-#~U zd?GP`L$P?O_1@^qna-%=EB0f>*ujACXNfUze{sU`RSSXADLDTCCHUL$;+K=)4hv?0 z>N&^_%Q=kc?z=b@HgR&`yw+yP5c@~fb(}gIfTSY%eyfpjijV^8urDpcHb$f9w@JyK zdM(hb>a97LSp~oY8xwmIV`4Xha1E5)B-kKQc-LO4%Zv?mS4ib_#%tkeaFWo<$1FJV z`h}2P4)yM}czr@J*C5|*Q;}qgL7NWC#R;Pw2Mzbu(7D0tK#4 z%MZlPoI|2ZL4dWzs3C0Rnafa&pdUrK!HM%k#C3}-QX-_xpH-!RbNt4JH~``^cO4d4 zIXw)oi=s_Z>taVDb+3qxs(0nl{|!u*Us$tShE50CyaQK;V+ad&~4nVQ;c zCSunzyi1By{o{aW23NOyYQ*O8rZ$NWG#f>ZVE_g+-rdYE58{w2I&ZG4*~R{d@Yc*c zL+p21_08tMbXM^O9A#0e_;e8=HdC+_9!;|QAk=9mPpUKB21&XNO2jycP?!$Wm6r%Z z5a2{W3N=Z~V+B=wH+4(pkQ%ln&a}W)^Ac<=)jLg$sWGztUG-P6Y=bEm-%mtlxKeAR z4@5|PDr7(sfM`Cup}-GxXrAl^O4;40BcMR5%t&iMC2P{*jVAX4qA0-AB1{9>0NUup zp@MyL%Ge6c90_STneMb+8HGHyJ&+%W^9E4pCsLK{O}EhsSbA-E&`QyDV90AstcM4+ z!t>~*Qnf7W%tJhnm`T|W3yfm`+>O%+g4QyiuHZnI*7QUp>Iip6Jx^RUG??3WX6#kflqQmujpd#SW!Qv{q zpaia)2~>u+lt9sQJT{!XxLtIV4nP_No~fr|W{oEUR7^?OE!uAZt&5Yss}_h30nr6% zVcO|z^E91>Ta$0xw>OwHBSx3RXc*n1qc=JR(gMFWGwnwZh1nVa z%wqDOc=+$4ZXl+o$ksTa=UI!C>v{Zr62lzobX{DCQ(CD$}z}!H{CZ7Dz$ATAlq%;!&;rv7eiks#923{v~o?F1G$_%Yo} E?k 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 D@9gL& literal 0 HcmV?d00001 diff --git a/public/uploads/20260224/OPD-2039665-1771957663.jpg b/public/uploads/20260224/OPD-2039665-1771957663.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6d7005f89b3ae3175de861ee52f9e96f84daaa2 GIT binary patch literal 200295 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 literal 0 HcmV?d00001 diff --git a/public/uploads/patient/profile_284688_1770403396.jpg b/public/uploads/patient/profile_284688_1770403396.jpg new file mode 100644 index 0000000000000000000000000000000000000000..055108de2b37955a0153080013be113697dd6b96 GIT binary patch literal 76471 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
neu1&OoccCW(qYqK-Q7Emzpz1`S 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 YD|-`7y>R3PEOK{u6-jBSHtv7_*$@vx%K!iX literal 0 HcmV?d00001 diff --git a/public/uploads/patient/profile_284688_1770403403.jpg b/public/uploads/patient/profile_284688_1770403403.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcec9e053b35b48353f3f65cf0a7558e4e79a9dc GIT binary patch literal 77445 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
={#50g4)%6!L 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�wJ5806oOA9uQYiJa}rENGVMdO=OlC##$U8;t&@rcWLbH( zfaDYXC>dVy#LAnOJAnh9hM1DDf-#>aV9UlqVZj|b(g&#@oC)%7MgboyuNn8ChTlOF z;q9goOP1s1IqgA7+|jna5rPf^d(yEET@gaq8N5K!#srbaAAT|ZaYI)rE3HhOdiABd zm7kJZf;}o_duUQt(HRz5xttaGcAT2UF`cfPGC?Q>xC9=1*1MoSvGAh7f8mP_R&w8E zmKBmD9JHi>K=uPTK7?Yh_7QJXLt2()ziWh4V6mX+h%l?b=~zmivUV(MG62{=Is9@v z^I6{SKrQLh!!^3;*V6>FC-*XtH$dHZIQyja{*~8GcF+npx_p+CEK&>r2^cxgOdgd} zrFmTeHLj5ng)eTM?d=qTaJgwcg=6g6cVI`VYwv#qaG`5!SdZ>uUzgvUb?eP-Dyisz zhey=Sxt`wSw6;^X%!KqknSI88rBo!A<1JljuczE(6?mL(NdeB`*wi@)&S&!6gPeNR zMW8KOMY)M9&k#%;_;l`^j=Ph;vckJh(INN-1>lX0hB*-m4g7miSN6+^f&~+(RHio2nZIS|h%NsKeTPL4P*DpM~8aODu81#iB+vOmQM)VkMpWT;f# zvTw78b$LqU=LC>Xzx1tb%&ic&C%iz=;|iw-7%Vx>Hy%}a3hr8rn%+c4D4`pm+CcU8 z`cWA|eMRjWc4aH3OKda9cH^ppf%UAEV%?B9^E;fDx8vtr`{U5p zqeCsJH+HoCyv{oH<4Z`pvyO+x8mEZmmM1|KvTiJ?7{da8yhlAd8u}U-7*J|Uf9uTh zr-+>QH>?~8*MLSbf;v~FvC7$L2Ijz~1dQcWfPX3htE&{HY|^^Dfh%Z;UQMIclUEa0 zIZLxG%Sb>XGI%Ddp!P>At^ks(WcchwO5O=tBhp*(;LS+hBS+;0NCW`IOCt`N=+`M)2GWT zqvanATG~VL2gJI4)KI#|s$7sb`2mrb4{iwQU!U<4jW}QJKhnq8Wzko1f7a)$PvNag zOttg$OVlb?ciFC6108--{Xbg#nswtTYLB9ps>WxB+px7{c>=BasuXGdjYv@UU;_@+agO-K-i;Bi^m-%^#H!>%80 z6mn0eYP(-?l7Y7hcs)6$29>%jg?8=Fe`-Kzc|~Ku6mDXtsaTDzoPM;+axyh*$zr%& zxY^kC#Q_&}a;duMka0aZT7pW~ZsmaXZ6wxM+^wBz@EXV*q4|(d(lFFfx$9f(SU| ze_H3|ieN=^1YrjLSB6#FpPL*S-8A+CUrE*NniFMy7{KQVDlhuCJ^qyqTW}cq6t8hI zv0o)Xb2vXJUflQ2Ds1Jd9r_ftFA-YDXe}(F#A?`S+X6{{Q;(pbq=ut?jFU1*8B~0v zbgW?A^%GVsX?Ig;_iHRIv^UD}<003$BD)hpHFbR-&#_HHFwYAd6wX8^(C46~E4A*7 z#)8{uI9;j-`4yd|)J5GhMO*h1N(x&pOTTvX03X7lR9n{Iv@Bj~L1Gs6AluoFaG1=T z4qJ|C#ypGOV@P(JeGSr!E4{`hAV(sMn8`hUp0&R+O5n;Duv}@EQbRZh%6McYmDjTm zZfgtk>IHU`l`qQ=T9MwxW)e!jjc3cP$7`#S>AFqL{p@jCsFabHC9o6%57M=SmF?6` zouHP=&fXhGbbGktWs3EH+X)!L40ho2?OhI55y)z>+(#p{%-(k3S(xtKlatSU;=L-{SuOI3JZb)Vr~)ldJDD(tZ^DNzkFyqaHoAxxLbo zBjwAbMI3hwkjI!oKP?BWqmw>X4F_ro>XlEz!enRv8D^CpoQ*3s&vF1azPa&nCnK5)Y^} z8MkdwUEQAa2N@o`pL+dKD=Q=CZLQBOyw)ymE_NvqD;>B& zfz2_JUEM9LDlvrvjyM9S&PmH-k=6A9dnt`1FA(lm88n9&@|5F;&=c$_CRwdzrk#vk zeFzw#ispn?C2@t|8ZU5W-LxPD!1=lZLm{a3Cn{Htl#xj;g=cI{&u?0x*syRw>Fb(9 zG<3iV6T2AbDT(ZAhaqxKO$IAXN|Qe4( z9jGPUJDQqz&(!0-0P8_%+|jyC_QV5?yyAdJOJ(ychsrjF8OM5-+UQTc&E#M5!$*)v z$E6p2NSj7Rqii26IC0UjoMNJHO$U1;n7+94SY&^sL~ytrYU6uqX&YMTEG)maXSN`a zbMulhkyI&7Lvy0n?xVN07Rb0oT%2~}idI64a@V22u^wUWX_^|=^7$6ba56o6(rVya z)1*F0kmO+SXlM^p_!+M~rn7lrxCOaUFekGne^MC!LWZsf(1LNVSuLc8WyQMw>47oHmT+NS=235MxZ8y}W9SF<_pXH=ZN%Ar=Tf!RiL#l6 zq&*_QJQKj&e;&Q6y#;sF=Cw@>SxoS{6(~eJ0OOX1SeONM8mx4=14E z&#|h%QEj3zFEuy0Z!oNJhFmJB#sSCpRJm!PL zqU>stYg1;&P_?~fvb`9KrM&F9Xpa~K_6M5mgSybos}wa0DJ*94-3stC=zgBnn}fa3 zlDT5fNE2H<&B6OUlJ%WbvCq@JUn+Z*dn+Qn_lcX!`wpL*TM)%t35Jn~2P{WUy(>8= z+d>Q}31(!IEEwgvJpMIHnIW52SFm4N{f6d7jFIKVE(t1o0!MFi(wrpaxYS!dc-1}@ zX!ph11bb#;aAH4npFz{twS28Cbx1Dj?)?v;mL4+qmWM5_d@8!qZOg-X86adW$H-WF z5yAYc)T547ovrT@w@6Uf^E2>z{{4|??>%=Kp-TB+)VZ7TZHatW1yY?2v< zcpWQy9FD7dk5hF7zF}ZyUPFVpj(Dbw+}qGiV_4O-AKqPETwNTKhjK@!3)A$ZC2N(u zH+wvK^^*YcD3miX$iN($iQd{B)cID2&^FrbtE8S%S20Z>0b$F+QoYBf3UYa`sH zDBA2v^+}}!#zJEQI0WYv%HaBiqTSOePj@}RF78>g$?2MlC89?{ibOHm&vHIkr1FO( zsNm!O0M}YZmbbZt_t2F5IG*+aHSM%ZAKnim1CHe5s6Bd$=!CW0!f;MDIGuKXvP~RH zNesb8-aeJ}w65T;e9O?#(@7DH!~^`QoYDfzNxW5)VHX`wN=e+IvP=A zEMC%C3XE;e(s7ES8@7itd2qy%8)-aXaf)UWr_A*@tx9!r#sr*wH7fkaZ`ANaf-1FR4 zQunqxqaMt&AH+L5`!=?Y4YD%rkYgtY>&0_8*xji|Q|GT8fu?xs#_in;T-ZeKlYki+ z;sZbK#CZ)x#fz*t5XASWe;k=&?br@~$Sq0Olo^7J&qc~sB2lB1C z8r({xWwGYE_4(e=E0Ww6VbFUDgHtjHcd)?Y*ir+d)AWpOZshg;b(@cNBULQ|0s+aZ zdj^E?!Np>hwgTLC`BS*<7~qQD_6uAkB>~9fcBUH{60@|RpP2nBRr-kAiUBL_Pq;c} zoysrU+N>vzT+=XfWx{Z|$KgRdu0#$M%7cyLC!Vy6P`1Wiy%3hc*Qo?IJao-VZu%7$ zt&VaH(*;cYfba!Nx_2}>O({y9xHvfA{cA)^YC5v@;R_SsX99snYD8LVAF^bq1&&5P z5lpSizHur5{6V0`RMJ;QMyGUAIdFK|M+TzWmwha7_iW*n^PX@=T>4dxEo_d^$&|{?rRUBKhGdxFg%z=mpJPh@q+9@SuaGj0{{U^r=ZJ{C1LsJ`-@xU^^#Zqk z{6K{~oi$cV-S`}=AdY$dD$bk~LvtGIQJVhnypG#R`9M4<>;SD?(i>JIn)hUwEF1xj zdw-lzo0mdtbTM9yZ%^`NB;JI?F3tD)e59WJaYNK+JR*4R86{Rp5aE@E2tCDf^Gf!x z7p?7D_GN)b%-JU#`cyc{JCvGRn=#F2;mC@>M7Q_~(jGz*K43pSwc3$8mFzX0mp{H! zG%{pJ4}ACbJf3SOQDZ1AsCgS8=I)KGzkyk%Ja6bWEP^Sui3OSx8O<1LIcwsF9FYf^= z#xffpQa`0?a&AE+xrq#fLRfL;3{XQ_+^VdxTf3}bi3L=3dM3AX8%$%t^5Z8BF5Gd~2d~nh!ZXrFv8y=j z%Jv>V)Y9zC%#%jxwUv+p53vHc<%6XzpPAG3rk01KcrV9VJ^kz!w{{M)&O$1@fz_Km zF~?p#YsRmF-y zx{M5rWYw7{ChpHZ)b3q30(RpgX|1BwjT}=sw7QPg9Fg-I^ly^E0i8R?|g*Tww z03nXtPzTb#4X!k+*yB{xqln3kin6I0CjcCtXt^z1`a8ll?e>2v+V&|y1NVV(gYDM3 zV3x3`jgFlJ+;hgcd9vM$>8!x=~pVY*%_y)wBLT`q8jw8)YMJu15pFKmKR!Hj;?oqGjg*_;Qd{Ess_jtDi}HH_^tk;5{v-Z?IhIOB9ZUb{I6g+5JBG=?UTfW}Ge zD;}{%yO6y-=;lIg676t$0DWn@+d@^5dd}R+0VE2_)_M}^ zBwCs@3Ri$J*V48sGUhS08UGxHwiqWwbM$SoC_qudKKU}Bng5`s?WPYh-l(G>tV z<%e9*)yi^6eX_Gke8Ze$XsWR)#n74RC?-+rSD2%}y#kHxp^vRdg4#&3OP+vK?DRCd z>~j_;Z1_Dv=~K>8*I2j%rah}eImI%2rQVDe86tvUtjO$KEtt;(EOC!~e@ck9&7P#b za71Tf0)S5@tj1Bf!s=cjH`fzJ6KVs1bJyOJHHxyaH-;=e-F@dU4ICsK6N8@AEww1? z^*h3xfB?rq)`XJL5oFE-SGh7s!z7XG)|qBdVmK8N16N13{o=VFHgXL;B7oYylVlj+ zpL$E)0u3TYhWaVfnImAzayTQ9YGv;32i4vm@v7?H7PFcde5vM%e$&Wfyc{qG1Aued zrg3tPj0+H4n`wlIL2-r|9V?sKN}96*^uAW13AnXU8AFMoAHsO#dmrbT+VYwLIOXzF zIp?7F`cR`_9UN2LOp6kiclkn&wAJ3o4ZCU2hNejji#_UR80BLJf;~yc^{$P8r{XAD z`XB9B*k$;h4Cl*Z+;_px;A$T&#&XSY2h1>Y(DtlcmdpzKi%RD`a!UJ?RO%?{9YEBy znUIIvPjF8e=Z>8^R$S7!j<&|p{8bXoKGXvT}iMY)NBTx$N>!t58X%x19lu_oYpdor7NIzB-1pTjY))HDlT_3 zxx%XY=M{Xe+K9V0qiv(Nk*A%FvuoU;U{5`=c>F5w%C#AsE?CMHByEIe9+)*8_uU1} zc<*A=k!`NoO~wkvH%yVxHU~ZV$f}If&_;WMZ8JqIY_fydhv)iIlvd+Ow`3wjjCf^T zz~uKnwGK%u4XYKVguITVua*x&0o~H7F;ZHOPKU{*qO`w?Xr`VpkJCm+hX z9==9vO$hZ3a^5y^bW-4jWC<9;?#~q^EzI+I=gbNx*~UlQBo_52pL%vGNpxiQ6WuJn zd6lFukXim?`p^+cku=g=$Qnj64CijZqx7d?N-YyPYdKM-K25jq2%K&$^vw}TyD=>Y zu5NA8+zWJek?>@aTnx{CW$nJt7)86#7<$>TZhE5OEM=_vB8U-jgAG;nhG zr=jgp&lSDALRVM_11!!u40kp1Z=Sr5c~j+vhn)OH@j_~GKAj6@)nr*Wamz1p?ZtgI zU6)FXy`z8DzGsPxuH_d4%>~m!8ID_ac_W~&r#x2diR>=C`AZO4j|AtnF)OrhM4>lpH zb)@){#CiO}y9o|~(!$D3jrOuaY8e;7c(roXA}UUrMO{4#T&)}OL= z5{m3ny7=?sXu`SiMy5zPT+Uw~LfOT0sy24GI7RM?_WuC1XN{p(h-&YAjM*u78n_>d zfOxFs%NxeRbmI3$H1^sH>GrytUo4uVOTOyWt>wcOke163R~tz0>)xd)S+eb8>CX@R zNbqln{7++R_RCn(+%v`@oJOF9!sF2A6*sZRI&Swp(@Kptx7hF2;WqEs=a4%u8Rwq$ zve)896**K-7X7UJX(xs}5SmgeTi@#PlrPYE3O{&3_sR@=nr_k9SaoSw_;z_4P`oc8 zB}V`bohzBU>UyTFow$irhTI-K$4bqn(66nH5pjS36qFUU2dSrF88*o&7~Ri3X(*)Z zE2W`2ruHK^tw*7uYQ9`d#B?NmX_>VdY*f9vCnp>MNVKeT@?0}Y$2^nLrpTjPM1k(F zQCB1d&jTc!j0&JV)5O2Cuf#72=*z2WUJ=!;w8I#a?IziZg(EpQ&IUW0mm7)L^Tx1} zC)*;tYwgBkS>bOE>H7Aopz0QyKA?#$z4Wj*mdfBV zoxosZ5JqW@X|d)yoNo8BMI21*M*s|;N=#=fVB$OeImy5QdXHKF>@0^*Y6W8Dz*K>< z3uJNzI#V!T7KUO-VzY$<5-?6reoY4EPPM6+Y}hLm&s=ph4CF2M6?VyYBkMpN--lpb zFHJ-_^IztZBcpUb%77cHUb`cI5FM!j$X!31D-t+9v;hnXB%1(zJ?V7=q|=}Y8lLp` z6~<~(XA9RH(266me=UIr2R*21J;Zx=!mVV>Wi%|nv_vvzj=9PHRSr5@BU+v3n06LY ze7*vYPAiU9Pf%f`-^-=ni>RBNY;_;Tz0~^})-@Z^0n!aEuH%C083Vx}%N8K{I6SLx zI(<2=gtQRzsjZW}t%{P&a@PQnpY}($AB}U(xJ%swIcH+uG$mO<_RVOMm&7({+3G28 zbXX%8&&t8n9pLo@bK0RsH@J-bdqqtyCAqN-Z6x3gx$;gv>HdWEAE{Q(H$^SZeHckD z7~pp#X1S@R)yin=G`$)ddvCN~$kE#n2nsoK*kk(FbW%oScb*}62#y36)@Z=SBhKN^ z8S6x~Ek!lCs~H-tubmneo)MW5cq9+v9<`KXE~FTZDgxUS;f`{{1k!FvfeT34VXz_f zAR4EptYhPsgCHB9Jp1!Poz;+B-qHZ_q-{yU*-XE?+GY+|Zu#+e5bVCNbSz0(QgIRkOh~)O)gRbK^~BF?(qp)R*FGf&eH%Bri}2 z>7S>qZO_fAN!gXGv~w<>_NgX7h}%^e#{By)r@bWXT#|aCSnQTnXHk-%o!IF^@-wjm zN|Pav?JkKB-L<(4PijIVeL;n@!y2v`f!~gJ6dFp+6`n}s+RgXS923@|wwak6GRu1~ zhT0~cUdtFH)XHfiq6${f?R+`#j`vrPO{-ijtVHhe0aPoi)JNVckJ7x_nCR2nU+d8A zjvo5R^?wieTS)N5y2Gd0BB>Z>Z@k}MTKT+QF1<-uQbNEHEouQa0`FQF@1j9w4)7Z`CqV8|U6dGQ` zblFMyVZs>lAVug3M)x4yNP680}i9L2PEfd zm>1J;lzC_6$KLKJI%4^i&vy6+;!PgsQn!OrzOlBMhz_&Ovw_#Iu1EORwCtV1-K`JO zFNStHW~HZFc~V;5WS1`tiu-`{AfM8^qWQKw+Lu~3dL{S6&kOjD$>Y|1Jz=OJeb&%^o?)z|%+{v7^S$~WTXFj_d@IuYDdHVi=y4Nhtk9?0 zrvq?If%o|Y&7cYliVHp9ruNPIe4$ZQ>1X-$#Z5|e9L*x^=?7woc^`EqS{tOx@oI3H{(CXO-JI+ zrv#US%Z3Em6f2FX&Q3nOenPohxJH_W$DYF(01?)t(9@49fPp|3VGSdN37y<^skn}U zH7go})C^Nj;bKG|FgX0_is=?)x&6*F&qGq~wi9YPm|Bg|QcoEDDq`+6B`u8mSiHx{ zIPM3nXi@IJvfqId$6pvcE2Bym%evH|5)yyqnjP|X{_2_n=j?{F;yo)-xYo32HJv`{ z`s~N2CY=Ssw6QAq1JJQeXLz)>fJpoO&m0PPJOTISsC;~riMC$=~&kCcPP1_-2; zi#K%5MdXSyTr&ZVM>NRh_qk0OnT@or=OFec015*{>{Ky`?PCRiAv*f|(r(3^r-*K` z3n1mV$fgBd2H($>cP?>;C%4joI~JU7BRsL^@t{rE&edhfD;{v8<{5ei6reHhS@SpG3SoJdeuhI(SfI@ z>abhM_F-;`U{hm)b0ZF$vVV)ywO=?5)GSV#4A4wk8FJA|dE-0|JM_q_O+8SPSFuVc zWgJLLzafhZVx=OBF+vpN0tPuEskI%%U$YG)tr%zngsS#kdZp z)Mm3m9*GLQ$XTZ0gi3b-&vW=z+8{BnwK+8@rY8jjp9h8-{qu^{BGhm!m*8#OyJV@}#Y(f#XrD{4Hz&+kK!FI%n?O~`=bv0wi6yWze(zF-^G|zAJBcl?;~<-c z0Ys_XXB-}$^w^FfSqGTIIl=4Rxtyna6s~-lk+5(VzrO?PT_x^^-Y|&*w1J4@0OqZ3 zXJR9$PxfI9Wn)YMjB&*h)tb{$e-T}_!m3$;VmT+*npY!9J0hprUP%=pN0o`%0x4{t z!jQRL?00$x!mI1$j(t*9u!w+6Mny6ZeTHkw#N%U2Mg4vUrArLuq3GHlhjfhs6iaJJ z_w%|!K4z9KQy z&6i&D6KESq9Z5NEf5@+(rGar?^Zvf`$(|*(WOLWoh80GeaYiQxC9(CdRutn8g&Yn| zlv?SgY(7Xlha)~i!43-`B} z9PyrWK+fY$nVto4!kp42yKZUOqcavGBZ0*N=1E+m;(O5q1|YT{s`sdV0I_5T296W+Fz`IUz# z!d(u>PyYadhJ0YPgEQ(@7l+d4Pf~v{MNAV~^fPqg`V>4<`+xjO@il`(EP6e=vhDLC zvfRVmW%2ogSy|r%=UA$L01{l#46*dsvv z`$`w`M-7~auCpj7Xkewf4Dbm3D(spW`eXY#r-uF{d?eCC*w}0KaHN*9&opZzZ4THD zj554q9^8tk#j~EI`FB2H{kZ-e{4)4kCZ3)Z(%(+;9qY8uYi%($sSwB~%Q@Ohbio6I zS1OWP1t~debL4Aix3*4w_|0)P+p;PXb^adI?lhAH#iX)ZTt>mtXrwC2M?$1@{3sK->AwoTJNSp;pTs+V8QaX7 zrnL_6(rQf7dE3;h7CFf{C!EkJHDm2Bhkx)<&kO3>g`{36@a(!2Nb*lL)sy+^^Dras zbpz%DRY60d1_UWxc%TB*?>ldUOGw@)b&K=892#hvb*-J@J*kEQ?ugC5T*F z>er$;qdbTt+UQUG2(ZulBBAPc(}GIp%$k&YZcApR8x6FXk%0u`+J@{eGg5s>m?fX_}i_J*My^UO*rbObs1IXyJhF z``O@Tm>4CDj7V-N0e4STMrI*F{`NVeeL&OD^|-Xp5NXrQ43Ncf8%QH;5CaVK_NGFD zPUqN``U+{`X1SRrw3vC2a8;yS1Ke?picMUiwdLu$3K>U~g9{k@h6%KnVy|K;WdL!;I#!XY`k~t9o|UV8uHWo; zY|=h41fU#)kT#GzWAd$H(GNmtEo6>Rk|Uuf7-hlF(!>^B|#bYCYyE9&Ye3N{ zOT--kAG}aG<2`ea%7rB%xpzJ-lTw!L-bmC!taHa0=b){ed30vchcdYXNgP>iqkmG} z^I4R%Rw|3RC6q@BmvVmS8O;PV+0uA>;nnuGMECC2R?W`VKQn$A;=J0}>U4D9`t&^t zSVr|{rubvSR(>8}Y%Nk2#vVpHn2vcl`g>Q8R~b^ai$r(Elp~gcG%HIQOymQD{4GEoSB4~E6fqN&RoF>C zmT8Hroots0Woq*bFQ5ad^sMcun$Yv_5bCXQDF#Bslb=940avh;RCP$f-o*1kW!*aA z;<}83`2G|VEr;r8P@SNFdCdZj#NGteQ$g{Dmv=VbAWW$!VUe+p*8L3ypLlp%!9Ef3 z6|zaGcw&11fTGO>1CUeV~$vI zd;QlGq?39X`&lMd)IVeIgt8*H{34Lqs5k;U>xEOFZRhl=infeSyt*7Gj6Y_7g`OCJ zq=Q6`Ng2r5E#<_jN%d1EKQUO%Sl%;}+~lpaPXTx%Le!*-`wvXG^4=g-VTMHoM_hcz zrfL?NntRvLo-5&xgg@}RwY?)shgDk*x@5OvZK2l)kN~&@af8=At7yefZ414(H1(f^ z-xWV*WQ)YQCaZFqQ;pJUT2nGa7dXVq+%9;=bDjkXoRK`yldr=5rmeK4vJpE`BHDP5b zk_LTfC0xB|fFU4oPDL_{0dOm73V;M&02EtWktEvCYPdZQH9}C+QP%e^7!e}^Ju%HD>@^E) zUW-+Gb!HM2Z|@GGmohXvpAG)g{{Rp?Bcp11U6+aPC9%|PzQr^bc$5gXmBN$C;4uRS zjMGepSABc zt%3>3A2-)O{;CTo!vn+N z@Z1t=@JVko6o?V!N=HMVyY%by;8;Bog)8RohZxCwJ%C5iGd z2_N0$W3l>DlIB()L2dNLY{_uOD7xqS-k?@oseD@qisJR*LlwDbt;xuYHbL#r>s8Ht zB2rgkTIy2T$Vp;iWeD;1Bl408*PcGLrmQYYV`n_FAc+I1`@|fP&NGVYg*$4&yPb87?XQ+? zJn<&03``=rF!32U`Eq)mak{z!#tq6`O*ZSskuCw;`;JLGWE1{+(rVyWFC3m>jU?QU zv~C<8I{i7UqkGs1V=NbkI5;@>qETWk*v`@1L_r{eND4ahlTj6JfP6jnrj|v96)eQ# z3Omh zsbJ~TcQUJpl~rOK0GP*4!n@8kR=5s`3E-Z%=M)UB748c~kV>3!PSz0RpE7LRKqtAR zGArqjMn@$2(YUN~_t%Erf0vA&y|L*?WOM5)HL+F5Z1fxvK$5Y|Tu8u>a6@u)%>y85 zIqm>74BYVcq}I$!u_?G7PXq9vmT2pm{FfVir@{_{`O>(R`kc(Wr*cnHb4;S#7EH^^ zlkeV;7eBMwF~A>%O21Gm-OauOo~u-qjCo%*(S<5G{o!JmIpet$&5fNS;=hZ0KO=u< z_=i!nByIiO%K`ajnsx_fdNzmqWBgXq5+qL*%*vP_y@og3J;_?7CS~lQ*y$Jc>G-PZ zcX)yW^{|NX^&+;>?#7`NvN*3B{?uO)JZT$6cj8-!k%3oRNRj}+<2fob`qw$MBOa%f z3)!cYnn@km*t0P_l6sTsedxJT<>-5_hJGh&9|h;oHA@RCJNb=^!88|vuvL;SGNc~B z{sM%|WgcU)`1|`=ABo=ybT13(mMx{V&+m0qMjJswHX@HDu4z$RC3>O6TmaZGgbx7zFOl4j>3~bX+e>0i_j0453L&j z^=yuKK9tG2y^Ot1<)wD#nI>ZzF?=!S1GPg}D7mA;*8o01ZlnrvO)W{*=Jle6 zyNWVMY!~)8Bm8OHZ$nad2mm?jo(?IAJBc9%KS~2zkjBMHImjJqTvI5XR~|z*Tnb#E zWtZUdRD{*a7j3i>deOLSWlsB_BOirFD9Wxp#tMG5U_Rv%F~>X%5n9Gp119Q0&NEps zDaKW#&Uv8$r}p)s3#^TU|6*fIHP064)uwGnOZ1Xckp!!s(eJd$d_ist2ANZ^A=3KGmzU>>x< zyI|f{9P`IP#REQ!_!;6q?F}kjE_^Ju=go!7e9nXc$J3|N6q~XWS3QarT~ZSSrBYb< zg~;Rm)9imr6S^g7p@VZ2uu1cchd2Yj<5MP*)S}cnd@4Nq={Df}w)nx2dgrjE8;au3 ztvuK8dIwg*o2F|jC?D5RDAxWO&hFH=jJ($pI|dt2D8V7Io^1aEN}0TGAY zU+%E_p8YF(-(eWq#-Tmju4NqO?ty`irE^r%aicajK^Y)m4#S|SN%SuES^zm^V7rxv zt#1|8nU`!GSI&xTJ+z;BPw?@8M?FPTm5R`VQ_=>RBDs*s45xfB`E$-|B^XF@ zw?s>6qAbYw63Ah^HG?NS?b7&#ev4loHn&{A)d4ER}+ zP2-L*eYvh}YD(qZn=o9at8OCQi`676Z5Vaqueil^D?JR%>7iR`iWM@UC#fET+m8Kd zS~1kPrF}&aWr~a*a0on8y~0UfLdCtiD0SJnk37{I zpMJu)YC^S5Hv5l8oc-IP?ft_SX?R`7CqGK)r$s?ooV6;-Zr32UkjzQoah%sq#tgC~ z+@Vh-ahgm-0(?kE3_VA!GH&iU&NBS{D6rkimv?|hSB>78pk@)jM4xDJxYBJcz_T6i z%rnXCJ!yc;yUqFFP)@1bAyrUHxCK~X z9^!!)7iFb`4CTvY9CM6POc9!INpa47sf^LFXy$bX9ePj)Q)>)Lp#9VJpiLSpW|Brv zP)F%O&gCTRb9$wRlOZSu)5bvllpCwtQ=7j)2_E?3f{Z!h!{_jz1wg~zfF2vIQUR|Z z6gGgC&0a}WBN=xgK=sW?9=q{&G_V#{!NW2K0E5$M36K1AepR%TQqWy&d8`1-ASWar zO2lVH1j}b@VYl1>E!HQ|7bpaIj9Nf^nr$|MKf{}jMPg+R9kzQx3?Z+VDXW~OdZjoMnxV}WVT(oBRnl=g{jc#5Qw2r z%ZUiaeMK>w79e?q_o-k>JfOD+6-Pg__q>San2XekuI;BItuQZXwr5hf{o@shd1f>Lsj1(Ewp&Yd5k#lvAa&w^DA`*1&w_Bi z)C}827LfCWJ9s$egA2DS8PeUEWh~epn4s86^#+j=7`bleGzcz`+eW+CGdDj_UqDWo5yXe3Hff$%{$JBngrq?#$VyxdYD)Ia*eQOC_J1{IoCJ0@? zuTD6qa+E-|8~LvOTAXwseg}%yoc*G+1FF--t&N~vM`XxbDFAKTFa{6joR4bRD+#+8 z`pVB7g(h#2xj~V)85qSLCAy-mHdo}K>y$)Gng*Hent z9Fh%6U~_t&t-X%W z0b!AYkwXKUySgsrgJ6@?RJCw6Y#r`kM<*Z--KmP|_8)gSjdPkT1_k8BzGH*#DXj)s z)9(b3?J5eN%}pRG>d_ck2_zZ-r{<$6RtJ&Pb~FJM%#I+>B}aMy%`8dId7!keNgdP1 zat}2&D`QR%5YG<4TOmdOsxy0?Hj(0}=2clR4l(UPlZ$&Aaw1)!VT=%QjzORjX&ip7 zZeW??+E*Nm_Y@i&^rz<_&@xEXO7o1+C#ekOSD~f_VUpZZ1FiUbqa9ntT3kdai7q3S zK-~%}25-&;I`r>OoCosmy@!LThJEIsG#`YhBI}gINl$ETBvc1d=8r5Wz%yIju z{{Wq25_%ImB=>R#A1EYxXZ&dj?#0_hRg|zDIvN;XOS4ucP&xtMCWJ3^YD$tzBcle| za7gJ)q>?l5bqq*UVE!}-tCWq%=bkEBxG1DUGj1veCYn}OC~!^FMV^X3tuQ)BuFBgD z!FOjnvCRiPoTaGiJBDb3h9KvyD_GqtY(LH?9OjtE7oY*8z#f>Oi7g6x#mIufLacnk zKwdHh1~BGs%;!b-n5TbU)SK*dTEr%D$DWi7ZtP&U^N1iaM@+4+g*lbqzx zD-;aRGi^XgK9mgIva(AXaWtDtkUM6AZ>@?K5}V1oV<)u*murcF+B$!m8xtC`nns4URwka#kl#a7zF32 zKT2S8Hx^Ez7a_uqu6a1D+)~vJ&&P-ue(rEU7qjVyrqaJu7zXgl;s; ztlOlpMHsq`e|wCA@P_TBEgM&eIeNxO{Gl1Mc>b%NqB3a`lfcNIK+c%tbGV<6f|4DA!{ zgek%H!to(08B>Jzgm8?HcATTR9`X zJJenCTEyR59BtYVS^%Bf5(Bhx(vXS8!6OH!r7@aHSX!nRfI50m^%br}(>BZwN%yFX zc}(0p5zlmYq-yxf3^#vq^s6+r#~Y^HSe^w3G+mjCu3lvnDLaAAd(d<(bw(mwXQ|?m zMBa8g($#>iatigT9fwCK&QCOiCF5>VayT97frWD>ezXAFZU$%q*>XlQaX<}81Sg6B zSGY0&2NVog;%Qhaf=TqCM?+<$Euia8#Qf!p|N zIkX3=!N~W|TysKJ+zYlhr%k+BQ!L}W8f-DCa;QIkX9^{tNp&__9HI(nrENF-G5l%L@vE)$I_8x_?3u+dN7nlsn ze|IZzPx~j=ya`y9(FD3QiMJu#YQu%M0bJLo3VmV8l zLGFjn*xWh})QVATW}43&!IbX7@7{oEt<9U;;^Sb(&Pl-Jnx$o^Y+~I_mBwgp;H6_a z?`a4#)O4kGgx$%l56Tn_QW2wO0?mePymiGpuoqX<6%-=;%zBzc^6PU5OiTRTKC~CH z46TRafu(S1i5TneO8SMYM6N>&QzY&@2(HfUxA%M=olOFIoz(WC;DX9Ma3~`Dx(#b} z54!_->O}>oatZYK-crO3$F2ujSLkOrx3Qf1C9*gAgd_dYOd%O9*#*~yET@bxj7H?- zvK&;qmnUNuZ6<9koJW~pC%ERQN%L-Unw7DNLNWNzSq+?9nDLxbR_X=yu-%3$f$LVD zw*vGU739{_Tt#gw+Qa^`;3w|aoO0idZz-#220O{VRV40JJPPG*;9IqjqZyccFFXTC z3nuUr$i)Cn9;T5f=bu4IfgIZ0lVnCrQJyyApU#*Q+8xn6hYQ#a=7Be2yq`PflNjJQ z;Lw1zZu}2wU`nh!&U#{zoTGh(W(BYaIH4;M6(mg>?v)2Yp17uJ-Idv9=H$jcUcECx zG1pR|x*!wO`kvJ(nibYU&RDkMKT2R%Hw9g>f-_7;cB?6M9MBsXdx+;W3`e+ZV=6pwxH(c=9;S%JM^POP zm8+y~V!41xWh#LpDZ^*`z>bIfn$bx;0CV_$a@#G@S`+iEfw(!+;%KBtj!&2(l1h56e=5?-O5j#Mxx${HbON!IJ?$A>!&Y6b zg5VM`NjR-7%C#js8g`^hWYb9L6mgxNWTUw}Z5_=Q=IBay*thnm?(L?xw=9lvx@J|~ zE;G;7f$(HDf(8C zR|D975O_OJ)#bd_^%x_$u+!K>6}+S6lHrEnPDTo%BN983qt>t4zH1>I=f(d3i`RZP zyn7pG5ooZ!>v&N@USD$rKCYw2eKm#wmQnyAjm9Qp3#^QO}I+|})V%pN^=xp?zvH7NevdVM!i1zgW)TldSges5YXfSJ6=K-bByaAvfBmbxU6V!hV z4Fe4g6%`E&2t>!g!NS48#=^$N#UmoX#UsSS#wH*mAS5OsB_+kdC#N7Ip&%k5CHc=y zkWl_zgNlZUhK5Oki;YY2|15v|0E8GwTgV|ONQ3}nLL?MIq`!jz`hR+&A^n#C{-+=z z|I-m2h=GZP{jURz0Dz2yf`W{S@*l1L^$z}b9)L=SM#RV`i%tx&1TuM$fJ0MDFqq|9 z`bl+WuR#1(o?)0+WaJc-R4lA)>>Qi|f_}RaABL^bHJ+j7_XXV&kA`=^2?>**UqTW#tu>Rn;}Mt!?eFj!t-2_rSNoq2ZCy zvGKWi#KPjz^2+M=&hFm+!Qs*I$h>FI@hfX950a|(xGl4@fNaRvWTKX}W`E{;HtvqM3$Up+yEIDpE4V0ea{7N|PF=d4?m^VKH>wr1Ue z1IDkwRWwbbSV@V+v`{%V9*)z>-4|8mJqU?V4^7tE87qCcyHGE`wb4~iW!I-?-wMoK zcon!O<=B%N`}q#DhvuHPmos1gLbw!x+uaPhR9D*H z=X978(TJBzTa6*nzaPZ{{7I97ziq5qurXYx$(2?TUU!zXqhKtIbUs((0ONDbKPd56 z&r@_4`)M|pxY7=qLsVCBXAhiHP|%{`$_ZUqbBKbcSM=EZEU>)~x;6}36>raJQKN)H z;~BSZ@)z4rc)Rf`43-$#UH$?R^|r}!>`{4M%xlY3Ra5j{gs7oLeuxU#qt*A+!}0k2m2)Zc zWI)$h-g)`ha0#p4f}=;|=5;yJk2JNFTVlj!$80BBz&-{E!Co*}+N1(c-{uvw4leqD zAPXbT@~WCAM)~njPYXFD!S}_?DVFN0M5J$|!YQ!=0$)D7blb}^6uN0IG;4_^$(Z&k z3=W#V5na_;hm|n|?VQX$KT*X>$!@Ee&|B*tgL*Mm}3fP5|4Hn1+U7%6KW? z1iZpql9<1MZJu|p2o;TXsncx^rT)}*6%N9Jhh8=p*b*ojHhOpsnNLIKd%3d32!cxQ z3Nm}E!Tcy#@Do{JuG`P$ueKx&)^C6G`Q0e9^mMHneL^8p0Im8d)UnvO89$g?s? z_*8C8ctU30-$(Ef824QOL|OCFEE;%XCeJ!SdCvA8E9GdPs1$t-*|o}5YDQZ&*b4<{ z22V5Cex4rdQ*>ZyYaSi7KQhd_MtCTZwnGvyQqTZCTl!o)Xq>SpV!MNx2L3m^JCGx4 z&__Ll)%Sq%dqtm-Wbfs+W({}#ON>%>)0Rc2(8u0zy<~MeL|;HK_I? z5Cq^VwIW z3#<;#txGximJ5IMnYd7JCyV1<3wb^2YQU^@ttRB#TCw-ml<3fBVS!ljMnjXguj<8t zB<8Pm90J*=nQG584QB!^jyXj_)o`~ZOod37|!+HUqC}|3hO7d>6@DSg2~+o&pGAm zbL;!M$Iv<%o~^I($_ea9F4p~!@P%xs)+1J|=Gn24QNPiRhN0P#gkc@aVuhbq?Is^q zrQDo2PG}$fj9ynqy`OG6N0X0JaOW>xN8xAtZ#ij@&de#tSH_DR%$&aGZ{0spxz;!Z zkQRyeNR|q$a^$a2yNl^tFfRyx3CA%Tf*44cW5dO`g!jV4cRT*(np zyrAi~e*qPS8frzUr6z)HzusJ+T95#sn!!B=khma9p0^d4ycL-ccw`I?8j9qpO&4x} z4z1uXmLJ(to{#|MBp@?sM4D$;T9s8{os&&UccZXZ=Ul_2phaR?*Z2uMaUg-;$Hlk8 z$C-*{vX)bcvj#OG|B6f6ros+S=uJhQ2v_n|wR4udo@)4wVDw)8^hAGoAFSJEwX z3W^M&p+V^%J^#_P*hB1TD0;}o8c5n3$H-kaVU4Ic)l|!&Orz#0%iI+O+*gs>TChSW z&67JF>4)aB^O|R?6`TMP!|1}#^JEp`iSK+5u-hahJ>~^)DKGszy!bc>pmJ3XBP}(a z%|o#HrY34+1`^_jB)%bSYTrTc#+QLW;FsTxL&a<{q9|V!T%saYB2Y6r+4lkx) zA~}y z?ButSpa~0hY zLE%T1F67fWpBXmt-dLmYE+TrnM?LB)d$?z1dQI~YrUK9P)K!38iJNt}-BHJ;(~%cH zTsV4$xKJ{|e6H(5<$e!uauWq(|N98bmI~ej0`?YD9Wi@|kaA5Z#?=E^#qDyhIVDE|%#Q^| zD(>i*B%PJ}eRv<MR7eMWJ zR%hTQXqY@!+HpGOg$3qdYV-?Lp48Hk>RZN$#PuhW3j3}l908(-WU<@_qo1Hsj)SiY zc3d!mtehChXdQ>%&G3)o`0MX-mi=|Nq!T|VlbHB_+}T{;3dkxu+e&^{g!UC@(ba5v z6%=R~{nfg`>L_XvRu?Q{E$*_z-*S7RhrgI>I7_M8b`khKO4{ZUc#LH7d-GJM=GT%= zgx0Tpz#o-5sB-_}d-=eu=#O+qUnt}R3OJXvP;c%X!l07VCLdOf#wOcpTVv$%WF#F~ ze7SNV+W?ULYR!>&RdJ5!vEDpvh3tY?(uqpQfH0j;T@#vJ7+%B=_32d zWLbAeJ%{&?0u90u@nHiKz@Xbo<>Dx(RiS3x9N9st<8B(lsl#$1!mC`{QW_jl2;Q@d z+npz2v!G7$&|4lsic1_ub!#9^!MPsid+J0Py{}1Aw=6_DK9`qQ#7xO|2L|e_CzVB$ z{J}+9@|-t0>ihj*Od|aqZ+3~+87;_3+{~aurHqI`QTcXcSDnWid@0}7#cr}mDFPz+ z9DZEXrz@ayVQu!PIiR9-(apG+31NtPf8qQ8u0@nO*ct>?Uy~ z)w-F`lKk)zv@?gJ+B}R15~eQ>w}wOE+hdcyL3&G{Jx#Mbl{>PBcT-QwHY@{4YDatk}NDpm^BgHlD`m|?WQw1 zqX{&0VQ_xj7+L-9|9X1d;d@PNmEEyZjlxRdpLaCR`Td~ zCeW>u&Vh|RULNa2xnj0r>uJjJMwpVJ(@2%x%s+ z5wT}R>-cNbtazCeMM7xbXJX8}rmaP}2i${h}016QZH3P$htK0{}vhHg}$TqL8^OZf?fIXmt97jHC93_8vWpX*=RJaPshXi3FJe^j zU}8k=%+_AqtjTcfx)920kz_md4Yz5DwLX`iCvT%MA?gQ|w9OJOC;ZVYH}VQ8=d|kh z5eUTjOpwX;?d_aH1;a^SQby%7I1k>4M9ZGwazQSWgf!%2H|9*%<-^Ij-GiLu=8CMW z&C!6G3Ra|{%Diw&8Dr$Q;9#p>yHIiIs$la4Ppujd%oV+s*fXdV1MHMmWos#TQb(?K zT|(S7kDA7B5`O9Kv$xR1Hk0l$i!h_=8rr;rB=`wB?nw@M+*nt`dUGq7 zHskB;A%7Y^&v0K1MAp)bIHW8`R-ya$*_w6;fc%;m6m=n4gNqAgaYM%w9lfg*YKJQw zxH5~5=z$LDHE(Z0E$>}GBNCtdO3G2wjBNYXLX-GqF1=V!Ry-B?F5~1Re(aD|GIgXm zAaw@%l%FHuJ>q3kyo|`|Nm@>OX$ktXGkGpnN})G+L57@hdELTaIXp>aqNRi8+O_xn z5&ABH{kuA%L=%etKiDarDe9T@Gi61K$Q+c zK)eK5+igc%dx0j%8sI^Ti%Ee-otaj21v0kmKpeV^KqIIRWQ4MQ$nKu5nqR+~2iPI> z^9gZ5R2UUpE_0e2?)CkjTk*%cm{H&4J3_y|GW*icTRm{$-{Q&_o;?z1Xi*S-iRz_+ z**w+fp|{nEG5(ARf2j85HGs`riByf-l}qC$;c;}_bBytA3w!C-2*HQn2Gj&4R?&vA z?#hUEmN-!iES$DTMZ{%GU^)I!bR2(9W@f6LDB;0y)wyqo`*R47F_}YP4Kq_zRBWo(Qk?ajmN=+BxQu6gu&@Zi#>Y%GlYkrJ+1|OGZF~Nh&6QEQpDxZ{6&S-M@cD#P~1>o z?O}Gf_EeFci^{m=90*{leI`=?*=ov^r?j6CswP#j;fRF~i5sV}+3=-|5579q>lcR( zIT0#~lsGuV8c3Ek$ionMq3@hVOUWbnU;A(+MQZ3r>7;Q|fml+!;CIh@p^x@ekH3uP zS$;THYq-vYH5xTaVoox4dR5MT6nu>O-aX-+6{G2ACSSfg&(*nFJH7-@)_-*U>4Z=I z<4b`T^4hy}up;yOjb@$VU5P_(k?E!i<$c3>+LI{N zB=X}mi5aft!0H>LjBlTUNN~Db+?O#hr-8jFEp|69wmR|wG&r&7GANDgtiwEOQAhrg z7$i71O)-nhYM$iOo@xO8X*Xx8SeT8gMx!(T6iX}_!*(Ai1nER0V7`j&$WOsIWrP?V z^t;cefe}brtWs45>eQZ0yFOg3)Jbm#dz=}k%4#c#TtYbW>#R5`_wA6GzOf}Ycn|Vd671{AT$Wf10;!7wbYW} z_((v$ix;o+521s7ksXJY%hw2K7KAoS{F?W7)8?Q~&*5k4*%AvX?E+~aGqQuWukJ1E zq$;`W%W^%#97i0i1MD4mni{fXEN1p|O*yUe%Gt=KaV9*2`yNBMCbVVpyJ2bRc~_eQPK zkp3vWk@Z!xa%vcc(GmN7&|V0w>`!4o@mej1m2yn-N@ljFtW{4?)O3*-j<`q zE~9CCf`jPa$mGO(0Ep~M@3>AJC=dSvh*hUam_;l$ge@%a^6$=7+T-H){Uqj$rhXTe z!fWL&M$dHK>k05HH^AKc{A#?rth-7zE{vjH@BK?*oQv>$x98RNGs2&om%u7~>uR*E z+f4aduPB?akjqJssUXqE`Fk#z&aY%ygkkWUA!FC-oIT`rrbI)L=$SPrdL^kjaFoQTmTJ8Col!48a;3C<)`{S{eW_#j!m3WhlmWT@*PZ z2VCVje5EKh>r9H#en(FOe<*$6X;29z!avr01u=p$HUmUZ;yleG$0snC7K@|QsGwdZ z8!T4L;(XsYJ@VrwsW!kiZt3&QE1aDSxnC?T+&CXX6G+Vhax< ze-O-+Y?Uvc-p#d$LAz%bj~v(IO(AMFR_$TT9@=!b>SmqR%XKFbkYh$Q zAB^2a{u)2agLc|Xx4B@?OgTda8S02@j)y(PDNK8z9w#0r>Lwm{M&LbNd{?u8ualqB z*32!`au}`$1D~ki(Bg?i1r!LHJXqUrvYc%SHy5fn>Nv85piiDe-`W;^{a9GdF)F+^+h=;x zFU$|p`!P9p(^y4l7IhpWp@>XumeAK-QWZV(+O8xGGoLc~;|fBHrc3UbnMwk1tcBKX z>>7rjLl-}Y@_u1VOglgqq5yuScz&pEp1qTfCdgArP3PbQB-2VBW32Y~N&Y!PqF~V2 z_m~p1FXV7`$1v{9w_mDqs<3Jo;MwNeZdQ5LA$0ngF_7g_LkXlg%+*-VY_xpKfe!_X zUdl{MJ*J_rsd30M>_zFn<$qD2%Aln@)S$5xO9)T!tA?IaD}2a22iFIDd(S-R z7oM8ukc97*^%o$WXy@I(DkRiNteztvLW9-5`dZB#GX=_?Cj8cl&^Uu9QsMB_WP_P2 zjlF-0!`z!Tk43K7yVffhz4SR52Olyi=K_Mtmr?B0u#TBHuvd)Vb5wqVDhQHAWkyWQ zwVUQ(6-SFo=s*Q~XIYVsbxB>v0^{&W${RsE8ubp@wP0s8)`;aRtme_(#Y)ag9aqnB zq@)b6fi2^BnZQE5*1x<{Vw~#kqLjy6?PZsi3=|lRlVfw-j=$K}yIH0opn<-k7?@@X z${f}ZhmOUhc~p2*1fzqf*L%_mzs8;jgV8DwV2E1Oa z22kvJhJHD%(|V49vRwUVWGB=$=^_nH>>#zL5*YlK9=nWj$N7&w(C&%yZ+03}r*neh zb+9AXJDsGXhZO}kGCDFV4=Y=ViGc)~_JKjX%c>im>dw?qi!yl1)B~UjN z>b90s+3WGn@$y}oI2rZ?8=3^9)JecQSoRmwu)v}UfKiw0h*v_&YyOvy?N|q7CCogd zG_I5z;Zu${+h0IE1yU>b^shXq+ve9u#uJ-r_PyL3@!y}CwHX8ze4aIlk&@wG>{<(^ z*wuf#$ef<3o_uI3$8)lLITOp`DFec9P*CRJqEOSAXi)@Fj?8s!(`m%`h!a(OdF|E7 zoD4BhOs~9{IPmSdJsjYI&-bsoI1_I6kFf;qDAK$r_7r!KCIxWS6++`M(cGzll!7&B zGf<`>S=%8=lpG@%A)5cGtbAOsqBIqN%0_o=Plw;nrRh&KRAs*}Q6hVKRD@o49)_MQ zZ!)(F2aSnf4Q`={_7&$HIWvqFXMn~Q^tG)UkT`tFgs6LQO%lfp*)%x>W<=SF|16hu zj6n=}|ob6hr$VNeFBoA?|@6!6E%Xs$V@zb;O_0Aj^l6sS20^VM3-;^)s;$#SXt^Yz2` zTC+D8hP3V`>d7-7_0ea14eYv85cm8Uv2r&G{f;f*kltgGG^<^Kg}5FQzJ8(H*_BdZ zI!*smJma$=XXx&(1DerEy%<)PnkNRdemOX8-)Dn;M;#a`Um&kebJW z@9Wfbni_aJ%jSq+5DO32C1cZtqb>_lI?rHl!d25<-oE~c~ zu2XkODLM%d6eB&(H}hboH__GzTJ(-Zgu+WXgg|EoS>8zHkUmP0T91y3u7oH*xcGM$ zfCymm6M>gehkC>nobImmAdYSqBSnN3|7##o7fpQ*<?OZzoP>>b=xc{i6Q$QZJsg7Kz7OkYyrLCn8 z)gWOg#LnT;6-$S#P$^D`0p&)zs<})@_ri#buiR8$=G_Nklj;p8uAU6rP6ygt@b{{M zvd+0!P|6zpdv|CPuyCj4mfLu0Q-R#Ye(U{j29t_9B%YS6LUo|~yCzjNT{peW{q`#! z1pJ%j@>N3BKHXu3&0bndp270P3yr_vZCzFBde2zQD9SDU?zsUq-Cuwub-AjtD8Pm| z;iCXX_nOyrrliz^*+Vhbi4X_0+*lNiINGr`wv1JW1d|+KUK}MLandTF$bj@<$6|mh#Lc? z^c1j+$PWC8Bxwj$<$a}A5aqS&eii~_t!iJd=DIGn$HCe0BXGedR-z}!PICA%-MTX1 zJjE$JuQz8_LD94T^#_JqJ>lDz`^8mWO-pOW^WTzAy>SNzq5(_NsrG7Dq;(|&Z#SzH zyy;9*Py8i6mR5T1tq==RO5(o4axA3!viL&_F8|B3=DK8R-?bdM>u&7$g+$Q{wi138 zR2kFacu!zDgk@Uqn9KnfI9%;Es6CrH*l!P$`3epRBoi4j2D_~iM0~<}lnH7`oMuYqI`3=;yZ1%Rf!}+cu-+US3z+)Oz^E)t5B4J8a&zaZ=de|0>lX3nNo`a@c2x)Vmq?0hAW3_&oWdf zYG$guVIY*=*P2J4Hg^i^AQjamuY+qu&0I^hwvSENZ0rg;=wkS$O+tEXPA^pl!xd69 zB*g>gm)o1*;gpqUiZyW~aisA&x^Pw_qD9OY0N0&({8O}SpYKH*Wtl~NP~ali zJdqG(6E^;&jOuBRvy~5*AH|iC0epuV6yhXknrD0w>n6c( zUuz0mOawWC^I=_#vZrZD_)ZNE{QHLRFVqWew{`ulLGO`bh^S<;eU964g0~ZH7ApjK z;w8x@bd%08;!BhCUgWCfkGplSQbb4o%>97vr#*fDjbm$gaU)}# zdYnne`~_}^fCab=<6oSgFD#7F{MjAREN$0dX{HjUqi^qh$NOyDSc)6M`Xqz;sTIwt z@d5d~DWcthCxd4zVv+%iB_)$t@=8NL?!d0HU^^pe&_r8LN`53$vbHzacEb=;or#m~gg`jjf2 zH8&5*Umea3_2AG6S?emt)ASpe!MOy0mbBkj&4AybApgIB`@20uEUWGeb&W4zYPb1Y z5|UuutFqmTtVUDgWv492iqobM>gX3UFoEdPSRWhe*7KIWg86dR$LQAO$JW(nzCVQ; zr*wYuRTh5%p>)zF>X9ES>v@9xkuo7ppNX2UM_y1red}c-8Qe?tQ=N5f|MNXH@jN*@ zq4N+iZ-Q^&x~2pp4PpmSDS%96Z-QnZO!od1BUQbqE8w|#(pUoGzH)Kmn3!P&lZ==T zo!p#TdY!&+(N#6q9NgX@;+hj5@1 z?chZxEz#EPq>U-G#TH#@v2ZO`1MEL6mAPZyK;5(cabwVH zE*IM<)sWjZ%nKD}A2__EWw?(RaBQOBgx5YK1Z zeP5fdqnH}#q!yY$m^7B4XKQ-g0b&88GK=#BNX}?%q{99mF!B7OH@_IuDMM12rcs_Rq{a+xdQf_Y?OV zp*?~2@O!e^j!M?Rp^C~Vq~wAIM{mG&R~uZytT|>)CCQx41&d4mT06`ChSA-uAJ1UM zirctRn5&t6B|bz$br`C-N)7-RWOWHSTMpWK8Lz>G<`}KRFZJ%3y~HlIE5B=7mP-dD z%R+n&xtP*4j3B;5Ae76!yQ&~6#lr*iG;6m_5Mn14B_UdSV$DtC4eVB+%k6ML2+w$t zwbM!#*G*aU_IUoPnAqVP;$In`h$Y(ZPPxT^UlUE+J9*i41Q^ruiy zr6q)}>pL0R;N4^b$K(AcgKL%F>Ob?n`iAl86O}0^cYY9Vv|O)J2=fX(**u5;I9?6Q zH#jQ%p|-fG2)$SQ+)&tn_vL0PM_nC0{`uRG+WA5ki*WuRQ0G6n4s7mWyifmpY1L({l$^R zLiAIt$$4j}1cy%@*BI@%6+5%;!=77olh!wwc7xX*ZqQ(NR9oPKVJFmV>X4;i0_hCt zh$CS*sC8Y+%p0kz_RvD!)=t8%*!N36ohNu@2$?6K3WY8mY0dx5E->x`{oXgrS}~K6 zzRvXb@jrF{@X65q+Iqh_H*o$tnb7f2Q^&unl?VLn8R14B>SWU%Oj+to_Beg9=Sc53r=0yFK5O3b}woCUaz9~B4SFD)2Pen?ium6?_cDgu$>5}kE*({SX5Ji!zeR4 zj>l>Srb5WlFdT_JA9}3OZo-;?E-?o$n1Cd<7j`EyK@x&y8l$Ac{uKt@z3D>XxA%l< z`;1iBTXdDYXX-|-VyaPHWqQSx2^2uU*fW@?O=g|ce2E+v8Av`%`9n?|G8fTU#}B6D z)^2jNByf<7P2VW@9I3f}AbvfHkxo}u(!i98>%$woz1ZGr0yRvrPJ-c2P0`1nukhH^`O=-Fxw8^Thbkf7BcoM~oXTmp7_7+S0bmpdJ6{s-MHnPHQ~a zO*QdsDauk~F#jk#5mO=eSxR);tmvV|2!4HJJlASRKw{xBO3O}+2(`o#vw40f7Gn1I z^PZ*!+*P=hfnnxUxN@Q>gLRBL!jUH%iC{PD;}h?i-<=@@T8!_C`W`N2HdZ=G*EOP~ zyN^(W=_667{es@ptqjH)f4rCqIODsN&3kWS+_~f`aEpAhZS`tuNtEH?pyo`cd%gNa za?Ukl!w!5tCFk{MpA@KfK$*Yl)5J6iu1RJ7jVOq-lYW zOa?6Cd<*a5^0RurBz90P*>0N50~-+4ub3{XGLme_!-X?`|CMstK+=HnHSj9kK2`vqkaNgG1~jSja0WMiom zjmB*ufERBU+ex~zL0kOE)i6_YOhvvCRjL-1&JvJ6TLn43{eh?~Zed2b{sUX)D%pWkYi}XL znTa$8(i$7y9E#jG301Oujks-o^!KVBoqE(D|IPdfU*pf8fgzGP$rZm3DWQ7!e^B#- zmaq=|BspiQKI(aW!egd;{qv=5Cq-zruHE-QlcGf*GSd3#NUqyfV@=U#RiFm6`1MMI zK5>%EU$i&^n9*43h;2=+WahQr`YF}SGa|E7v_yy306GKPLQ5O?g4YUzzajYvbR>)h zWm!Mw6G&s7sG5B~5L^d65zkV-C3*ZJs1>uC6?I{iB+zNVWXZTyP2DQy({N-3+9({! zis|Ro^!^KI`h4fGpQM13)QE9XC3vb(RkNkZ3mVWULp378oLOL#cFJt0}b#pB7-9fbUN^Siv5+8T*C= zJ<1t)i;itrQ`=rMjjfC#F8oJq}?AjJ#+u$bRi{zgar~0mfv`sa>n?5;yj9YrA`U(E7PSG1pg>L2mo1TpAi2M-0=A*CwT&B`` zqFEyZtV2y16_UWQS7f3pQ7K>IE?VW|-hvt(=k|T>l^ThgYiV{S+l0r1nY(Pgke{p< zSVMDrZJY?r-8birPlfM9LSU|#d36*)iHuZPO*x*yOuONG($Y5@r29x(Fw;QfvyVpW z+pp?384G&mxkcIBB|lB8_8ZL{@3NrtCu}Fp4>6H6o`vQ#djh`)Aq}&0JC(?og|`R# zm0%u)DUYHa(v9?@4jY2s^Dw6>+Zg->_}dGRX{!mwrpguOf0#VIE5;;cR@AYiPO+fb zvtJG2)T$T>{7xsx8Nk>DltLiISNp3jC-aJY=#bc__&39AfhE4};79Jw-p0ByeooC$ zrnb@cntodpy(_Df8L&hgRuT(*lqq&yk2|5v6tV}UB^-oOCahb9CUI7v;|pMXP=#O? zJJ>&e4_yrH@n%T^1Ex(d*%bN?(`2YtaZcX{(A4)a(WC^;2s8$-Tsaw4TxH~^rkspZ z76A+4OnKcbg(XhA;rVg$HSfH9^rH$RXxccqo>JJsbI-(UtwVM;+52;nXT=XFAl+q+ z)_3SXCTbl9_P1YWrN%``?25dk(WD9uGFOtT7WIvQ!mHi)Id?BA z5#+1eueKBP7x32heZmX4qr0_`eRit;zATO*Qb}%)JPk9Z3_k_fj#r zow2NtuDWCK6LvaYD52i`Ang?!mnN2|T{c!RXFkTJ9=+t5Q=U3nwlVx*Q{I@2?&0oh z3zMu<%i%Di9Gw;jJLhLsI~+8rE5y7`_mlQ2I##B=@Q%F+!GC9h)tl0b$8jO=M?;;f zn1>G(RF3BT*1apRc4P?IMfG|@R9UGo1AHX3H~N!bg~rK*0K^t<94+HS7!H$7O!2?x zm~suV)Tm@KGbA~|Oo{HSv%M7eHv8i;#VgrG>Heh#F%uSJg}CrhNHsTrcBng0!{xWv zq$+PxHCQ`em55E*3^eU55cSxs)wmJ1$W)9DtK)m9=@%Onl7Mdd8Vm-QJ}ZPqq;`zB zQJ^F)r1g$W`&mt85M=z`dCCZEqQRQ`gEYn*$N)dqDeR_P-35uhS6v;eYgSp0v&YI1 zQlGab*RlNY)lL?UlIi&w-_l6MIK3chMN?pTk+Sc4tvtl%D$#nk3^M{NWNOS07jG=`vGnU9wG&hiIS_ z%)lX{=#7AuP#Wu!)r=dZJHO_GViHF#;S>uX{K>nD+;vo=%EF4eL2V)T?P^hmpTe$? zPAQs}MDqwUkhMi+P4`WC2SBNRUD6}2m<>x}=67U2wU$&m;NAvxKXz=CE?*nfO|6Ze z2CAtd=|CE%tGH=5yoGa<l}m z))Y_iY3WXV;ajPFlnbt9UjO;~*VnbTe7ES~=E;~d+c;+wc;fgbDBk8jNsBVd-^)hg zeGWf!H0euXQYYKV9@a*S5P35de8j;OS+60nM&PM|Z0}e0$mPw!vn0YmIt6^|06Gxl z@^Jj*L6jH+CBZ%pkHeyLJH;vM8WJo{?)+qTT2}o*Xda@?Wtz-UfX3-M{N@(X-FzS4mtNd+&Yh)qh(mahO!#E*53$5!su~n8-gP2nW(hjXOS9|J z9his#7+>L4-+pPF=_TplzB-|B8W}|qJJ@dY93PzvA&0^Pnv^k`lOR~wMySJg?CF9e!xbKaf(4MR} zVR{Ct5CwfDy0}gTrl7AEBB6?FIZtDr`!nBG9(Am&ngbJ^1xKNuWh>v3uk-gbXhxo> zEwxj!;MGNhcTeWxVb&DXebe-TazFdmUqEa_2}_X4-uU~pmXoj8FT&qkcY1}t8Mc-2 z7OM_VCyqWoDFH+LX&wYm=ZfAOI?IkZ1e1IPCk0;PdKbQX#lAGUb>%>;kz>Nyd4J!! zzWYIKDg0Nr7W!5xkLuQnW6io3uLG>ou0hi3ToOqh^fu1x=Bv?>-{aEcRPMQhHY-X6CFX zI;VMfUh`prB_wTHJrLo>I%2%q4h@*M`Fd6JLZ~i@Fow51MYI&OCPnx?FDMEFeNCFb z678Gr|C^m2bx*DC4R|C%zM|KfFqzNh_<7H(?U{!5NQ?hV`D2*_>A}j}ix{bVeJ8=r zY7D`{Z{-^!jcg_Pa>qu@(P8|>nQE9}wA1J!phH(&!5ZIgL92Y#E};9F08+Hi`xgtt4MtnNkzt%fu<<86bjjEdA*^NTH}xn7iD z1+U7nE?|z6rfO16uBWo5Fam1&TOsCZo^T)xEa?S7kZvaY{tDfaO1AW*R2@GV3Ur4g z-;m}kh9W|_ZW2PqH!7F9iEyD9VrM)^oe#(&SGsd97@45W3nUbgGNyel+isG3% zNyf^%OQlehq$YeQYissOHy5Ci9#X)U^x8|7s*-;~+TXfRL;zo@#3Xp=XHuYt42$*D zM**&6py-oKlHT}VK+un?m-fZ&hH0X!fi`kIELqDCeCd~3m$LVRi)f!E-A%yel$wTY zNnXEejHU~OZ34m*_(&4bFqDA;NQ@Nm6uVu;D{SM&^HQdx)bLcT%7Egr!Uao@1Nmeo zC6Z`vy?iX3gU0%R_i?oEOg~%5ZZO(1&xJ&#@>{M>c@3czS$`bouP?+YMDv^^IrO6i zz8eYSsImgB`$$EHq6?#p(abSU)O=)lazJC9&_<>peAd?Wo9U%;t1QSV;^I{-_tM*U zhmFlINhD-Fva8Vo@X@>CK?+@=*2od|wEgfF-rXxsbw=kfj7 z5>&mUEPxU?9)Txk*>mlcdsL;NVDD){ea@u5DEMyNKHPPjey)NzA4W02Q z8t5fg&0xQIh4^`D%}4r<+xu6t*;VJjDLww$8;^SVPI9coZgk27oS%JL`5t#oVvU@> z9-%)J<5jQMCmzF|J7e9r8@RnEN~|%6Vs;}t1iJcuhf01euvaL*ghVR$rY?Svy!!nt z7}0;WAvOQ2uO5R>u?#DkxrQZq*Vu}y>MBxXP0{M{FQD&@PIKX*=8CItf=#BB+^8IM zFyG^U0GvQ$zkqN66@?r_S~1jJj}?7BMTke2j$ssz&_4tzWn6P!^)(8yPDsU7oF0tU zi%8aWo69NI-dp*hb0~Se2>^n9wvVPOmaQsFM9%6sy8VAcOU2rllG0xd>iTS!33(Dp z_JosqGxaTiGCpM^kH;0{PY$N6k9w6(e~9w^URnGj;IRXupR=QdXxo_yB=hync~ZkV zZtS|0@2Y2(ct-B-J!y5zg5PKo2_s^D=?C=x0QJ{hEJI6`o=s&K>D2ut(dT=;GRk)f zrf3pEtNb}oabBEXGP*n}iKb~u7 zSQ@zGITe@|m+tXMY?d{`&}O$BMrbTW0Q3|WcJw4)mY#-kRt6dA#a)snF5tat29~3a zNx-X$>S);{c+ET5&9+V#3_UAI%KMLULmt9iKKF6h(@NTjK8$+Yt0}?fp&jctBu%xj z_#odWnCC6nb`@9bTUIopZ!7=+0B{8jSgw{V#`}*v(u)fO_RAnv4pLS7tUr}ho9Gwl zXU};&lAC>jB+d(tnD(r1eaEu7e%1uHfB-&Y%NnTN4Ywg)Y;-?`Hza3fHJfmy64vB0 zDx8DJ=|r_DvnEe4OCsC5h)Emv`uiG$LrPnkR*xG-3Xpxh4LdcdQC2N09DoTmtXe7A z4tYxPROFEtxmrnitU0wcO<19Oc&>bi{&_KybHdSf^({8HGn(10U(80|kG;k-Q+t)U z`J64pT1K1@7LgePbBu$>9r~JcT(YrASsfH2PqUzA=efm64Lj&Op=@)3RT*-YM$xG_ zDhm1$NxO-=5nYrGwG_k@aKrei46E~CWY7YM2^&e`fFqPdWH~v@sbD9 zf!J)P_lF~&QQm=E^Zx*hcES7`c1XxC8kHmcvHlbZO6>5z3@Vw~20(oXfvP&kP?YT%pR1@(zJPp!8eg8W#o=W)`J%A zUb)tK3deAi5cSqHKvNWu^HnSQD8AZfw93B*H zz#q@@rV?&W=hN_W!00>DGHB3^c8=#X4k;~*P@H0bcDbQ!cbTA$g}UA!(l#u@L0Ro725=(8zbkc{7yyS zc=oF?xs#;Ct*z?>ec>!*^Xh{X1FdCdZxOM5=o6Z@gK{zNO$kZZL5%uQxmU3&IR=q8 zu_GPF(wZBWVaPb9%DE>4+Lq+IiW7Ml>p@AoSX2AH2*xQA-Gx#GRfd{nm{=Z_CXO~m zv~E49GiYlrPqjOM1GIZk-Nnp@?iisv3hC$s=cQHKR~l9w!5HsSCbiHPjw?j;G_fMK zDKad{70+sdbwrX(6+KOD84XEw5;#nsy}%F9agHlFyRpTj%WzHD@#~J&H#B|GaV4te z(!|`IBmm^r&{_`UH#cNqBRON~+NHOB4BUtXngAOtBp>qAJm#grl$m1Q;qkIgANh)u z?9CAW;~JAuYNrkd1F{RkX|LP^`kd8X}s3M&@#I3pMt=A;N; zk(vNuVt5=3az#56%z|d~RRaO?3)-UCv#r%mbcv7>;i6&`A8z$c zSqSlo#vk6KV_CNVF+dM>0wfq2$>+an4vQ~lMmQPIG#updy#P5JhxVWiD;!BGDj zWb~$Bl0;3#BHIKc=RDA6+hmGI(t^^^m~+yYtkCrs9MUE8bQGV;g0AhT=-VCXiAa%; zn~a`&W{U%}6(b{pI#pazX%oZ>@ltei+^`&;DG6DQ-aGR^OUP+Fj2Z|XkOc!#NEGfk z9MvI`s^X1_Pf_MD>ywa2Lr&#tfk(}PFlgK?hdb;U=|?Mj661BCkt0aJzfyCG8Iq2= zm(*YZLfqSwagARjHplJ92iVhSrDm)NGhhY*9B@TXC|MwDrpl`Fd*Jk~6J$#F(6MU( zMb1ell1(&_)JY_Lr<0m{Xf+o05=BYl+FJ*xZ%WOiHF&*7!*J<{D&sSHR;!;!hO_q~U;HmP**DGMAtcC^2l;=!Ws!m$L8jt8!Q&F^xU#Y?TSQzk4 z+N!f}WlSjOJDp zd7bc2v`OXU$GG6I!RtY-tUx(52(a6HvFnNr8fg{D&S*0q3YKqb0GUP{13(w7^BjuV zpwb%3$J1Z3Rmfdq#8BW2MGGk&<;H(XxW}79D!xY9^<|j(RDpqtgOVxBRBK!31DXqZ z7t`+03sO~Lrh?Kn^bH}ko5hPDN7c`D9<&u0w)8zF7}CnpJ7@q%BNza8`q!OWrO!qY zQAAT+#{^`%swf#HjsW~?k;>({b~%>#hoQa1(59f0O&=R$QrSO%{#6l^l&o5ejv_M2KKv*FH)8~I)Kxll6#R{4LGs-5jbHYL)FJT=-IcDFY}U};wW7$< zFlWJF4mxv!eX~k*)SZf@hWBpSwf_JMyxROfxYw^OkW1z?D;#C8!*CoEo__Z})tsTr z@Rck&?rZ7)01@oTlBJQH|2Q%u9({ z24@FxZ|`^O{xva^NLS`(n|RMfyVQJBVW`_XdCuyNsnQ~#5WxC!e=7Gdn3XH3BbvPw zmD4_>@MfgihJ|b=oZQ_+p(K$101?3F@&5oC?Y++`aBEYdWji?QL7KUhqbVAmulIgg zlx2IJyyllvSw>Mt$Yb7_jfpn-ojTA%hfrAXC@Dtju=e-SB$t&tl99xGqCZ&X3sg2nq)`F5joOR-T?>OOqKmN5VuxN&Md6*!}vNV%Rp(nq!VKrU8i!l$=b;2rmXHysq2wj+sg4dnUG^-LvhLJ{Hw{F(spNBQg1|j z@8aEe#NH;8fxuocD@u{Kf`t~+S^)7 zsp?`jNv`52^ zZ~^JkvZ+Nl*|W=+Dt_xO>0UC^{7q|fcWExz;h3v$U~o#H1N8lCnw6my7IM_)slP!U zSmhX89lQhAjw`BhijIUuH1{(up%$#px#z!JagXU-YBFa<)R!wd?}q*>O*37zvXGx9 z@U&xYP9GT`)K{~Go7wd|+VD~IJ+v~*AEEWHNb_E(!_p)JS=I=_-7<~_Fhc(TS_;3q zZ2(E2!%|q6o_f$}62QP7rkH7a2#f*g%_822ac^1-o6uD>^c-EuHiJd%J0>VVO(F8! zcJibS)CH}fD3>OJY&puh@LyUoFzLpzS0N~I=&A z@Oh`qn7MkfuXeL``ogMMXYo9%9P@`JyvW+f8rP7!c89)g(n7Dq;0HzKRhY=B*P zSW2`9Z#>d4Vook>mZC^bf{xaOHDJX$uxH$?3q(C;B=AQZiUjpQpt=xKAb0F4l3hfs zkqnL_C5}Knz|CCbo`_Ffjw9n2{D{}mkX#0jIOOu`KbaMfmG(Y)@Y?3)P|cD^J4on0 zzm+pXxVA(#`TP9fg1Dsh6Lvh?#!3daa(1$oA--Xb!~X!ULeLhb0A6SrF*uB7fss%m zSi#3VC<1uEZYTm!FvA=WXanE>0A#7WzZq%~Ww*&|$DsL!e;$<8uc)4g`$JA8V@&dW zX|-Y!>WzrTYD&2>?ikAAfU+-Xiql<37#S|X2R^2P6f9r(kMTl33+h(79h72AfwRpr zbVWG89{uaisV1G1J*pUKRaaUgG7Vz#9amSxaY^UStR3a~Q9xmn@6K`UT%4Ab>~woI zP1xu4{{S0k+5<24mEYTsKxcB1@r(clM^9f$Q%Put8Oc4)1H^x|UYDhWI(P4J@+ed* z?~X^-p+=z+QmE|CMZal1dsd(Q1{=BIkh-e*A1*t6-r#5Rs&rpbsutX;{{Ry{B3y9} zk9UH1WWf0Rus_MGROc-XB^cX67``g_*GryHwCUG@dB}TNFuvrBQ1I?7#iY?Km+cL! z*-BFHcuW8T#uRWl?a$+yhf!19xKLKRI=wgJ#+j~0vE9K9z}ia*5a745Ja-?JRFr-x zJqfg;+JU8Qt!WqKzQcBG=Ee$u3S{*F9tTRr%b(#u+m5m`yk>6iJUgh^h$Aa=8b&Vd zq|U&&<7P9?PELE%bB4^dCe`A3hlrA23wS=l$4{NU(KLd4g0GBYoE|+w{{Y`Lx48Fb zLW8!b>V6jdLAlnJ?hQszrU+JFJ>QnY4i92auN0Kg&4{NL9%Ro=Tcy0W+{Be&G4#!0 zD=m&HEi(`H`=^oot%8%H_B7oG~u3n8?khTX(fqDug+tZ~4vHpHW4Fs{RkUft>K}qO0C)TRM zZ$Zl;S{WpT@qjp`b5Wr0ILCg3xQs#1;Fk+=J4Tw4)bX3GG&;V6}>l?CuvoC^_T3H2Jh9R(q3&!i*l3E(NUz zZz7h%4d>RC$>t)KMO8U8SkX$wN1QM$4pTj;rurIhsXS8QeY;X3&9G_kdFe~Y(_uXP zjworN-s4M_9eAWCa;(gfbjJsMl2ith-Meb;|)cowRm+d##5(WiX zf-klJ&+1J{OGBfLV^#p|3`Zmma6A6A0HHRc0D7G9-hd&NA)NL;^Z>;&H_C%P`Rz%8 z8Zs+6Y?j6aFc`pr>7L%y0T3kTXwT!`fE}JdBm#X-F+nXAre>0I31%m?0&d3{@nzmW z0&0Ci0T>`2xsgZp&*4Elyw8~V>%-CnzMFsDJO;;3Xf-?ZgKP(JCyCv`$tb8AkPFIn5QP5##d<9iLuUV1X&I&aef-g~?;c#xb7V%}gybnlYV8U7T-*d=cXh zin5EDmGtd5I5SG!hJNVkbH!C^^r`6rN&lLX5+CHheZ9XHTTq)&kpZ9-}2OouGs!ICm zI8##C@$Gxy$BKL{D%|O}(%i)nGI?X6!037FT?-cPI(n{%=rF8=_8Vk;dc_&7*lSW@BeLoxseCy#D@ zOY$PYuKRgO*DAeo4L6ocf)@*=CLMm{+P%|(-palWp%1L3X1aVHrE_QcfIaNsnlyU~ z8`qk5Av+RA`%eao+`FREIDBM{-_DSfuc8N&0~Cr*!$gA=6?8Dk&T~w~$5Kcq%Y5H= z(v6F<*jYgh@|>yYY3@XmLauR3VpG0?vBflOv?DT-*k8}msCFkv)S%Da9B%JO&i7(A z^lh!fV?1=C=A5VtlUI9yp@1OtrqTiNN$2zYAI`I|JrMU$dU0CCqEjOC85)RvZlw0l#G1?&N;QVSJ?jS0e>k55WX-HkRp zNMz?VTb1O;tCciK=xeZ&%6{sc9{$ysIShfkfZKUy<(oX31f9mr{%+ve!K$^j3$)M9 zpANcSNi6ZkrDUC-Cpf`5Kc*^84zB>5E=U|_9cTdylakH5@t|6fHsW!e%6ocKUSLKd z3J)V5=7t0>7(w!!`x=mL+l*qYHZK$>a2S9u9R_p7F^MXM94R>K#%LzYiNR;U#_V!& z+JV^OelL(b1*oh1iZ)@;V2_+*C(}3w>p+q7w}yuM*J4WG@&`|9Ol{coNN#`8!C|?V zgSg`~(G7Dg4>R$}2U&bavkCz|yqX6EWn-KMg2yq+iVNpq~?Izb6W`IWPlIL2{|ocmXuUZdvavFzdCp&w|^oqitNk#g>r~kZHy2&;PQB{ z9~E82IKdva8k&;3K85i0tT$H?Lm>eNOrD;dYsQ3KN2%L3sVk$_yffhYI8|gAez-a1 zzY6+l6cnR)o+VscZqhox?8$9ae24Ov7{&qP+lurRHx;SP?NeoGb#Z7m%Q*Z8Kc#cY zsP1iLKZP9jud9C_bAyws}AWL3~+PBb11g8VL3Iih2l+4 z3u`$RJTqq=zgp&~lunu{-&4=EeYaNfD)LD5>t0)nayz8^o?YVq00hCU+DjbvyWO+3 zijEF?itWEH$28wIhtIwz@Gh_5d!u!y2_?5?$Cjrjucdofd{S$XqlT^>H=`raynP+) z5W#p=i69)e%!Ho4-D{%!%;Qju8#lF`RW)5EYkB1o$THDfk&;gB*(W`5#crxb4$Q?# zx3O!$J|wxbwuoI9bdL!6Jyf25!itiNv^pnEHL>=e!Wf0G!|gC|1DRx8cT+2nYt^G3 zSR{`QtSs$wqwtX9R$>6%s7yu=QIJ2SY;npi$3zYfS`7JLaU{cM7#`FUCeXlfo++d* zVauMUr8b15$(BvMvqgeV;+}c!QY3{36dEKW6WGvdo%9i0gX=(?Q9A+EbB}rqwY`L( zC3HDXcRWL>S>q4cCT*sVJl z+iByB=hmIXu7)5oj32rD>e3BMQLq$V!MHR0-G2(3l#th8{2o31DcD;TCXu3SH%`TS z(4ClFF^s-=!TX)T?@i6HALeb~QGVlF153wRodWkEbDs1jk)(7RpD!eGJBq%08eI-a ze9x6|Jy@QV4p%DI8~{O#ao66Yq9WNe62vX*Of1jO&kK1^rdfni7hrFjx!d)snzWfl z_ze@Q9EArt{*;xPun}BHtV*JgTc8}`qy&(xVN@N&ed2f>ds6}l9Lj@WJGybwkP$W$ zIQf^SCz=3^FeKofdW;Y7paOzZ?h%pz&NpL_IvNJTQl|%u5t2KMQhF11jt}DzVc;E1 zeGs~>aeQx-(sg(M7P=}&!G&fS^45&{7n)S4}KEUc>vmve+sl6|Q+ zVvLH(UgU$#U=yTTwylGRM5^WxwWeIAF7ykee_D4H?r1?4AOE=y=+}Av3J-Qu9 zE9!AqpBC+|W-+A6mKecfpVt*_IV(qTI*^CN%T~TV(=Flx;_X&L)k_Rj(!y46Rj0_~ zt%{E5lH=koj$>sK0>GZG2Nl-vPx}7=hdHB&Pg9EVM~XCi%Wy{1l1|KmbMze6Ucyn( z)9W!?v*%wQ=vMLGzN4lPlM|Qc0mmQUE4qXw@UuDc)J?>r;cpluu^V}Z0DwdGJ;ij- z4;Z_g4x^;(&qUF+h>e}agya&TJd&dU!5|)eM+UZO+uTN~ZfflM=k{#Zf44p!`4X`6 ztZrTmciM2n>D1S$O8mN>Re3b-dOw65d0LW%U)|r_0>i#sus@L>m1=qJX|ti;1pzi=iV4jH zNw!ZMxIEBBu1k=>kO&kTTFSx!+!|!tu!Q9ENLOQn>>#Z%wb*$E;hBKs4nXhkRJ9>r zsMYxgUJWe&aytFg+=ZfGURJmnZw*%8@DDg61|Y$j7Y(5wQpl z9$o+eKH`~)w0#fVJJ%nm6q~S;w&%@OQ%i3nc>`;7$Qd-v4T$gcOQ6IM zPIA~#Gnxr$J7TFGRLXN#RKvXEdmyRB#DMFXaZCt zaQ2`NN%%0^{BNWMZHLcXA6`Kt@&JSq?i(!06ta17u5v~I9;Y2W zYl=;FJ((p1%Mx89;UvBi_?O|$H(4t@GJ$n6L^3dii!b6(52I96#BxVX&TnIRU7tnj z7uL`}n62d7#4-?#qwxIe!BTU2p4~XAakDsmcjI20p)nT9w~V|Qr`~elw?5RVi=5sevTDEn%CXWw^qO?i%CA6M! z!Z=dh7EPfVh*KtE7wyC&E7{+FW)BrtBO=B9@S7y;} z$2+ZPI?j`MJ+z3I6T)_vhEO+ULEyFt>MM4mQX^{GvzXL8K{cXzHxbJN2Ej{&Dp-Tg z4@1RpPK2ZHM`UQLLt}u~rfVCuxwZ;XiDEZ<)y6KQY{_z@ozwizL|6gP0}<0Cf((&{t(Dv8k#!@iOI2v)=qIAGQsjUu+c2s&$IccDU_@;!F#-xNdUMaM5$vfyw20+I(B`dARaoF)e zs<4BMaX}6&oh126o`u#Vz`9#)vS9Yr&Ayv0|^q%BF|mt%Cu^q|v_o=At^ zPGfF|)7aCwJhmck4Ft3x%Nj#XEy+?sojXuf?o7%h1=M`q)OYuwQM=Huk4gn3&=F4e z5>1bf0P)tHjh2O!m<1t$U}{5g7!U_JQ_$5XVp3fL%)sWV>4lomjfrOK#UQZcZKpJe zim@n=N;bDn-ql>8t7Ig!ZbAJ0XnL2h$tLENy9)itowxPmQn3!=nF%EHs%D5>=aX5K zn;K5iGt<_YqZyuaPSzz|h_Aem4gmI~Ri8pk@s5B}E>dV~5DqDdEy-#y5DDU`p}QdS zGBN2=3frMK4PK{#_#UExCvrw?V|QVU&=*5i9i)(QKDnSk_+E2?>xv6F zKa52az#5{pcA5ZuV7r6TfISD{G`?4i zbkeL*{LBM`#|P4YKSOl4S)*19vpkXMnhr-RO2+IQ3{YsTYn&&>%i^92yR{C2SrMdI z-2Acy;Hmr{KTs-Nwr52vrhIAOd*yEyMKtVu&$O20WMsG){Ej~w^5;&XZKLQTE^QB@ zwY@e=pNhT;za%tFmzMGdQ`MszdV8__>(BP7%a!h3T5dMFHoSY_A*)-GE*=;Z;m~7| z>Ivyw5}Tz`@kd28q^!?By7*_|nISMj(@8TfeCZ@oexE1z%kU3P zl5ui%3xs{d?O4?CPh*gNwc9LI642w88Q#dTcks*i2$4*fj196f^aJ|iHH>S?>NSU& zx=1Yk5NZY=H52VhN6N}DPp8(dR+_o2Y4SgKm-c!1AE6-IZR;zMH`q1jG zlZJE0Cn*N+fRRHSIzfX4Dv9)~=0`d3}tXU!vqF_pAOpm-MZSnzb#P|K!6Bv8q? z&*!f3laayIJo2VpWlfRfyoZ#RNKT7oJQc-0$F1rtlQ#!r3mvVrU_m#P-s@e`z)zQOv-$s27 z;??0N?AI#gSFa$9kNkLkwXG{Pb0-E>(RGsxT3daN7$u2`l2l!WJw&mTbc*VO)9L*zCIftFdxo>o4%!N8fJXf9gv5L zVpF){{`9QMw^8XRLGyACYAkCNZA5;f1eHAwI@57$QMR7q2B|Y((tFcFx*8?q0mm85 zUBsTF%;2e3JbKg@zN8ppPI2vuq}7Hl+M9!70h+s{ibCTR4cs(CSb@QyyP_?njzRek zAmXazt2Rj(+kiUus5WlHn<9a3h{)?e;;be>9MiZm7bUuN_Mww?)O=1NIc{I{6b;$v zet76j_G5VgJVz;9k^O2`+Lvo+j+)s*!d+PKKsl;lf~X1v%kPe-3OeiMiu`6h<S=Yf9>RwNHH5O6ckm;n88RHV_GQs%op ze(=KL@xj0c?-NUNW6~_bwUT8{7$2J*N2k)WlvI|YI4>Uj&u+npUz-YP#wt4uZyb25N)jk!1{>rDxy&(U8F{MK=^00~fd z`cU*ZCaorph%NxfN=B6#7q>STX)w*95AnakNjMgdE+PKDO2^Z#4}9*5=AE*IHDos78Q| z$I3Zn9CMMLJCG~p;JK@*OK^^?d7YCg6@B}hW7z5fPcGlWw^tkh zSis*Y=hKRDQ;W2=I$d73Eoom3wS7+K&DEk^KGP@U$lO=o(zTO)0ad@kC&ZRpZ3#R# zpvLlQ+KCo6vBi!H@XwLcXgT_t>7xePlSd_4cRqml7x32G;a`HS^nEVgGVsJc)p8pi zY?$ge{D-x3VlfI$q|G4&mZyvU(7JPLnntB%bmaY@6!sD@_heM?)TFtra#xyKz{M0f2arg{?A9@^?s;>k zZi6)45vE{5ayxpTt#mv^$@Wd^i9A!F{iDPhR1zry*46HrO7M5ERqOu%T-v&#`Jv5o z2~@MO=6cvu)K54OO*L;$Ij2Ie_`wCzu_kF3@S*sYc1{W!brd$fGz(3 zeOE;ak(P%xB1%#BkFISUxz7|U}-iE?r*#{U4q-8+g6m4uKLe0J<<3dubMUMMLcRj^Gm86wNL zVW|xuC{+IdS_Nk&9OpC_WV9W+gEs6*9N-?^h_9AJ)~v=owCj52dYj-4zh zlQfKMSdGeK4TIRzMLXD@Sp3xUBkDf-{{T@<*ukf{R~++2%ZotRS~oUYiT95^DW`41 z_AJLTgeu&r?L(FKCz|6XPcICoDtZx5l(iBTe1lnya@=O@3{$u?n-pUwJdxWKN%J-zkJ?Qasvaf0ftxDLDy2fyb@TG|~3yk8M#fG|ri>cn7qpZ#i=K= zO)p873s@2zLghB0+;afqBoW@4O#$;|_0*b$%g;L(nfYgKN&3|R3ZWyV07tch^x}X$ zhv1)$rO}|dux5?aznZBd0iHSQ^!;jOE>&>l=Fs$u?~9hYT!Kr7wup=nq06x3e+cBz zq@}PWWO7=^?G@#(m!?=NCn9Fg_M6+n5`rSWgYT7~P(b$gp(pOz~}F(QvZ z6!X)$Gyz)w0OB`@bxk&F3%x z8OJmLt3VP)aNhI*)c6*2Z{jUJUduXuSs6copbx(MKjXbJD>zfmkwU0k2#MqjeJdAM zH_*@7sWYpw@wS(8QBqes&d_#r_db=PYQ%dsx|Oxx6lmA_Rn?^O$QEdtHa<}xWK!pf zE-`Uu&c6%(5#8v%Db+O_xT0%FRKaU7$C2 z6{o4eR}Q4~C`a+?+eR$~-jv#$D&REsG88H^*(6LK`{)mP_UZc?iu--%Kh-KnSej$@ zk?=Gz?vm5Q*38F`_?6q9eKYov`PX-_rzNT9I(UZuAH^J}i+^a16Hq}OiKKXgRJf4g zQusk>6F1c!Qhy=!td%MXR=?(N7-Co1x7>Pn!Jh!JY z>PW#P^V_9)SlmNR(}MoAJxWy5)?1%T>E0cCKMly@-{*Mu5JBYN^(Wr2p+lY=^3dn2 zQ8N+RcPwJL%-Tm zn!ov+hN0k#t4UnJep(4RG030<$EUBQB~i`$=560pV%+$8+8EqiT$Y(mFc$;xHLIwv zWQMuoN}Q`cRP1q7nukN1n(jOM`|U_Ow0Euq z2_V5(6m5(V*p(ZPyBhTLq`jO@Nu^P9GKNpHSp4a@^Q%41 zSj{~weKq?AZn?biB(9?i3`#c=3vOm7X!h8-`ikhKO+j485V_*weOuvOe@>0HXj@RU zMqNT|hMh(^9f{yqP40PdqdQpNZF0qzDSv9?IQeH&{b(cE$!b@y;pSQlyrt2lj=cE=|+}>mvUEjRY!kdZamZ zJ5$NJgnz)rGgV4Up)5LuwCoe@5f4IKP)972)R4@I*l7_@yNpsU%ulq!4m|jY_Hj&2 zF+}l>cdk8iNS4|zLvs|05!?f)~L# zJw0iP%@e_J22t|JNc+7-NH|HLbYzoh6@1JT3)Q}u!IR~doMcpx3{{Vz%H1`#f z6)rHPSe8@OXt|;xm3Cl{nNLIOK`m=>1c3?c-^!44j4zzf4x(BS7U#V%zc2|#aCsh- zjU%RvBn4D@8qqWjS?DNGtCl~7Lw6=l;9nS|HRKz?pwjjnB-_WW1HH!c89RRI?Lj(h zH!UG5I6ZUeK~ZiajKVb7y*sh$Y1nFRV0`{4$Pp8ZXA>;0i(9#1>Uyy1RQCvg| z4y5Ct_MnrNIo&|TCu!n<99xdG0Dhu8hY>`0G+x#)Gd*2gTZ5x$ed#*Zx*ysH7 zNxK2{U4#p45tI;z?k}fIiu39&XLN*aO>~wJn3b2!bp`N#?t6WBqU~-0ZFF@@Nh99I zc*qJ5S010KtsPj!YKLQ`((Kzz(^VY&@tpEfRG%V$*Hd3b zg!yQ8;SW!xc^t`ax#?QY$5&%v1G2P{q?kGRhHITo^W4_gM?+$^mW)LI#oRVE6EWvqJP;xWKHP-P}mfxYwsK!z_kB7hTj%s?;y3VH@ zQCV3!$qZpYSCg^lu>PX6_Ky6{CtT_KwnwyS-w-rurGVNrPa5PhhX4r z5N+73s6ZzpYi9%LgI&uQmXg%xl_+gvRX!wmi9m}}u(SCNz+;i(Cnt>Of91t&snMyb zUzv}wsGZ=+PQ4}O1lmM1E1Z(Lp-g||16p#?i{JAxe%0^#5O{-FpHs6Mb*+uAk6=hQ z5L(L9Npp-~Nh_!&c+S-TdeW966ut#x1wwLu`?<JGRdtEyHx~3g+xA+sy70fl+q=obM|G;rzBbNV z$xMX+j)1n~j`$TX5a7~hHAU|psiECPt=eighV0cyf4>${AJr1F>jW4xzokMXOFo%I8!w%4IW`w1?(e<)?o?=nU= z@%*cF$Z;an+V@O#Lw!84ADJ9TLa_B5(;A9JNcH=q{(Ykf*-Eu|-9famZ$b^MQg7d>sG-P zby-&r-rl|K%aQUG z0b%^QpVF>UQCDJdOkGFB+P>798}lp;^JFUJeTV~&-<=VcGPwCx#%S@rxX;F*N&&zz zp&!bWrC}(gu;uZ-uuuc20U#eX$Ya3&0LN-M+T2``96WieZ9DH+sN->o2_w_)){&Po zxcOGa%U>014q8)sVzwM-%3qtO1Ldj`gj3kigT(hYkdbS4*7648IT21qI)X(7Sj%r2 zYZ1s$+#m`te|EV%^fa$+g2QC-p0KOAXI`C5YoFy&&ibL)uQ$YPS!5s>!hd+j$^0{l ze97!KtbRjju0-m+1LaTRF;+^s)qFT#GgrDvWmJK!_L5vGleuxp^yl-W$})UqZn5iE zN(ehx42H<$1Htdsm|e4-WyjWl8mFB1phL+gy(`=X5KS-?iU4Nwx`E!q$;izD7+a+P zCfuGV0B}VBXldGy+2E2V`J!&b^fUohXwVJH%13M-XacJcd(Z-?+;BNG0d7kfAXv<( zWAhX;h8;ogL42*NjayP!DEq|Y6v#Dnj}2bxmmXccv&zG$1Byji+UL6bFz_GzBe4Ch z;X%7`fsUirv6R-yhyc1kMZfj!A%qaf(tLzUej6fdQfCX_iXCUVC; zPpxB7r7N+Eqt7#3D2%eWAcDPfoYeAN-4x{6=!vRHsN91jisCg9m+8n+ljwSy@$qqM z)b}t|`D4rdbvg|h%!$b)uNfn)cr{lpto2o-?sSmc2x0`V01D%cr1UpT%hq+ju*B%H zfTe>L1EH@*n$pF+k0!tV(DA0Yx_y&}l&}ncgbwGL?2aCD*5x@yoH?1@c<Bz{kt(AY!eQGOdR|EwdCS3F@wAvm-Xg$)2k)1!g#mhwdSjZ zH#?6|rMMrC25PC&3-`U$+o@=Y<31-CG zoNG>7@~rtl+0k_< z?II9deAcbgBPKKI2dAx4sQv~9o!k*=1MOF;9@&l~jYsCdmhsu#H_U+fQnBa#)5qmqN>_Fj zhD&Pp=<><(s_}w3Z>4ndsOrXHUtLRj*>VD}3IgK-v7D~70*60zfLG9p;&JQ?O-+k+ zk5)y3?e@rnY!aTs`=-4La!px=T4;<#k2)jq-A5s!0(!r?Wh|1ZlMc6)>nfz?oP>im`NSIiRvp@)V_=i%ZmwYuDpi< zpQtEutUZlf)z*SV^jNffO>&{Gie?yy;d*jwIK!)BDM_d_(h|;D$;l_Ftff+00bcZDj+JgH>KkZh#$|bSDxQ5SnMtWw zWA86k!Z48$=Qejqo}R*-;~s!!wcg0e?<5cJQc_TQfpS{r~Vo{eRw7QF=5yj?ASQSy%gIutL?lf*i zaGDjdw2h;aQf1pDib)X;cwc($b5U1fGg?yM<+l^TKDEVB`$urtwWjLd+3c~u&1^;; za&hg&Z3$UeH#KF_VG%5rQnau!;5GqK=y6&%WCm2wW?h3h=PkxQm6C0Nsb{C9rJCMf zlD7O6h<)h~)6?F%BV>TizQ2324=HcJSb*Sj$MmR_o%Ca{dCc#cXk&CBLVmsJ$m)6<1S$oZVSYPSY-6)r8gdJ%1ERW%pqNwSdeg?{i~YXlF?ju zXXPcCWt1Q8@e%XGy6D=-)owE+kjrUBA`8r=8I05!S_P1pn~NTFY-$jHYX>4=sA zwpAylXc_DN6VomHRj6qtt<0Kzg^-3_;{r!3kJAAD6%W*RX!M&;2x+<$A0@0?&-%Tp z008%;%$}D9?n!3^He-B9imEUP7y_|==C&2xtaX-F%W)XE$c__|LiWc|S;nJX3A(+B z+fXkoW6N(WebC2%D^74jIHY>%c=i`3V;n5=vs%DE||w>3>Yj$ct(?&bg~+D^;?)84%*QF8c9 z>Mt{E!=QLp-co#oGO)yl?>8UIn)fNkk~T>B`nZS9WOX*0^g5NoMxjG(B(fdDKmMxj z=8rC?9Gs-?%+C|}Zaq^;xqH|R&Ah~9KOs5*K(1*v-J&H1wTbfA#6N~s_FA3fntiy2 zE!f(l8*$s{de(~VShnP}lRWBg4M-&_V{?!8dVV#`+NRrQOnud%b4u{wfzm~UBdO0n z%Rik`ikjwR%B$I)jp2)-YaCIy-=5{ZQO9Fka;DpSr)?^aqtNW&)?+a3+^RbUuQqCM zc0EYdRx>ZJVFiW^4o?aa~bX=a_V@Ujr{s;!cS=VtN(6^?Rp zEv|ftK1Uw4i;Ii6$>Mx;Jk~N+)D0U*)Q>(*-dc9)ljthx!<(QQBV7LggoH^9%8=Z` zyJJ;3-Un~5^RBLCEeW-ZDT!$rK)@YIu31BuQivFc`RkL4=V{yvwid$TP^O3}PNHXXFm5-QQ zh9~&B>-424uZW_QdC260kIIfL@OG)rL=w= zwplF-%_YWFu5vdh{^-X}m88AZabH^;%R4l}S7J!6300Ftk0o*lZsWdd1l!m{i-7%b zE3z?bP%YW(5?N%J#F3l^Mj74sVB)st(!g)()}u|aT}#XJ5%9}yP>rPaV~zm*X{5S= z%G}>wYBDsF%3R<8GH|2N56ZBr(^f-H#3Zmooc?_)k_(W&V76y1^EqYipz)gRQs!F{ z<#bzSD8ZGA?QDkWiZ0P6q&EXo@~z7M0Ht${tDWQ5>(aDSO=tv{ai)q6*w$O}xXb*a zES<dQx|fya(j1xCsQrWMw*^sIB!WZZK(69Wn3m{){E^cmDvlf^qo+Ol@nSK?wwd z(t-&H6cp?sQpSQt=L68t1A3hHpaU5+0PvU;4#aQCph9O90J*}@0s+a-9`pdQ?ej+L zmCrb!3s=5JoWj^Qk`KyXt|$Vk$Ck|iPvwBX8U}Xue-bY=ttKlw3wR-PPz=NpP6u3Z z%|{}=z^SPGP4OP13Z(j^+gI*{3Y&hLKqK?24UB0#Rjf$aZC3TYn&Hp&rXtn9j{HLe zMkw{oMigca!Yijx#B|ONJ!k^`x5VEP!bv*4%=zi(NL+*KlS!+A)M$Sed`{Ok>jcbY z1Sr~|?fk*wp;L+jzp~N1QSm!ejUl(W)pZBJW`+X8spOC_2jnYTSm$)xce(5uSHN9! z;r5krsOuV@pJ^$C$Ta0*@~~dHU^b33z+=s4IH|{#o70!GdNX&!I;vbM1#rG!1&{G@ z)AX;C#ZggOA5%hH@xAVJe{Ay~1d^E`eJjl6T~5bntq7%-8+KPS2%{XakPI5{!$vAr zXC5M}ak599c;CkmMR^P_bCDSY5O#u1dXkfm!g+M>QQF4Vf$^)t-W`f2l2!Xj02Lgj zd-Tb#Hd3iKsy&KWc(ir)-?d+d8q~*eWgOP{`Oe&AeOr&xy5UZ&R;cLul6yN5Tzp#i zU8xCfZZ4iFfk2Q)5;j54%ag$aY4q#wM4d?MV~^@-vxV`8i+&#JrPoff5Xj$o@Uiaq zz++q-)hg>@!h%lB^Q-IaC|gP_r9&89*jx-6?1f8dAx?$Ntt(oNGF2ZO<*+gsV!a4S zC89Xz8A0i>r*VDuc@^U_6kNjekfB+nH?@>9?jgt6=b(LI8%91Ua96-?7Tapn>1VekC2APJOD>EEjP0zyB~CTLtBGd z@coVby~P|QmlUnC3nRGyyooUHZ)jOp(;a?A^L=CEmu z&{a)(&_==)x)*OsczUT0{zQT(q~y=^-CB;(8q98eY~>djZ-_0M>NlG+Fy}V0ow%VaNA} z>zeFMRzPJ#WY-V1Sxz}5k%8|^+4L3BEcdG#h+$FXu5#Js&U(~2a;pre(i1vL4%rap zSR4^p^R(^;wuGS5lV2oByjIDMCh?O+R zM6!U>V=A3-?r~jkk17KiYsa07$lIB^`WlBMz|gbQh4+_Zc_2%=A<2ao6cm z?$xd$tnBtP`EsdQ0U(21@{FUn$)Sc@=204Q-Ff??9Zg*(+^umJi@~O=M*;IBVTmRq z2k1SkvUW&g>@^uIr1N5IXNF$RJq>au(6=Ggyf}p;zthy4Cdha}<_7fX$m4@sSz7E8 zvB=9JWw|_X2{p@A%K8+IZ4*zMQIQrPS;@{vPQ6c{qMa!{MD#W1xwq3F?Djx4!2ru} z2-;414mx|+b9{=)>IMBHR*uFwBA9u$a(uEuoM)#a--?Lcy8%mB(glVlwU^JakQPY~ z1wYv$s!_I}Wu&E}1%?~b7_6Jp=n1y4+S^&ZG0j4hfax^rTYWKv*B`vPKQu@%RXO0F ze{R*Xg8~NB?mpLW?EYkP4YDkq$E7u8EkMrHZIabmTS*>R3C0;YQ=W$-KaWZ$1te13 z&GXEGvRG~Bj+KIfLza(Fx0zkI%D15gv|i)XR=H{jZf~a%M3O#S79d~+9OUPKD{HAO z2`^8ojSvW|Cr6Yi5?(8AE9$F`ow=!sQQZLqdh%)(g>R&0x*R0Ee8Jm3^%Z8hY!II=&?QU(2xWJ6Cay>{G%>Y*!&L{!u#b^OJ>L>xEoOGZD z7QpF103^@^$&I)t6af+CxS$1PpavGtY5)NIr~#)S@jw$R9iub=A;pbt#=74W7XivB;-vA50Q|8gF9< zDRes>JH;CH{0C3)r-x$j^_V0`%!1w`ao3>T+n^?-9;)q;U-(AV6{goOC)Ms5Nic8! z07q8qg#(^FN&G39^R{`kvd!V`W=9sTx_NELOk^thE_!;`pNhi!Rm^(WdaexHxA8T* z0N{@=s32F&PKPVAK86!=+{f`}ier|+kp|*hEB@Evn%0AKkrOka0 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

=+?1`UW!npd>5Ow#W1%?75yWuW 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 literal 0 HcmV?d00001 diff --git a/public/uploads/patient/profile_295041_1770404193.jpg b/public/uploads/patient/profile_295041_1770404193.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c950d7780d9250758e65e73d497d724bca4ba249 GIT binary patch literal 75014 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

Directory access is forbidden.

+ + + diff --git a/tests/session/ExampleSessionTest.php b/tests/session/ExampleSessionTest.php new file mode 100644 index 0000000..33242a4 --- /dev/null +++ b/tests/session/ExampleSessionTest.php @@ -0,0 +1,17 @@ +set('logged_in', 123); + $this->assertSame(123, $session->get('logged_in')); + } +} diff --git a/tests/unit/HealthTest.php b/tests/unit/HealthTest.php new file mode 100644 index 0000000..b3e480f --- /dev/null +++ b/tests/unit/HealthTest.php @@ -0,0 +1,49 @@ +assertTrue(defined('APPPATH')); + } + + public function testBaseUrlHasBeenSet(): void + { + $validation = service('validation'); + + $env = false; + + // Check the baseURL in .env + if (is_file(HOMEPATH . '.env')) { + $env = preg_grep('/^app\.baseURL = ./', file(HOMEPATH . '.env')) !== false; + } + + if ($env) { + // BaseURL in .env is a valid URL? + // phpunit.xml.dist sets app.baseURL in $_SERVER + // So if you set app.baseURL in .env, it takes precedence + $config = new App(); + $this->assertTrue( + $validation->check($config->baseURL, 'valid_url'), + 'baseURL "' . $config->baseURL . '" in .env is not valid URL', + ); + } + + // Get the baseURL in app/Config/App.php + // You can't use Config\App, because phpunit.xml.dist sets app.baseURL + $reader = new ConfigReader(); + + // BaseURL in app/Config/App.php is a valid URL? + $this->assertTrue( + $validation->check($reader->baseURL, 'valid_url'), + 'baseURL "' . $reader->baseURL . '" in app/Config/App.php is not valid URL', + ); + } +} diff --git a/writable/.htaccess b/writable/.htaccess new file mode 100644 index 0000000..3462048 --- /dev/null +++ b/writable/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + diff --git a/writable/cache/index.html b/writable/cache/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/cache/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/writable/debugbar/index.html b/writable/debugbar/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/debugbar/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/writable/index.html b/writable/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/writable/logs/index.html b/writable/logs/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/logs/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/writable/session/index.html b/writable/session/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/session/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/writable/tmp_check_ai_settings.php b/writable/tmp_check_ai_settings.php new file mode 100644 index 0000000..1e3d83a --- /dev/null +++ b/writable/tmp_check_ai_settings.php @@ -0,0 +1,36 @@ +table('hospital_setting') + ->select('s_name, s_value') + ->whereIn('s_name', $keys) + ->get() + ->getResultArray(); + +$map = []; +foreach ($rows as $row) { + $map[$row['s_name']] = trim((string) ($row['s_value'] ?? '')); +} + +foreach ($keys as $key) { + $value = $map[$key] ?? ''; + $len = strlen($value); + if ($len === 0) { + $show = ''; + } elseif ($len <= 8) { + $show = str_repeat('*', $len); + } else { + $show = substr($value, 0, 4) . str_repeat('*', $len - 8) . substr($value, -4); + } + + echo $key . '=' . $show . PHP_EOL; +} diff --git a/writable/uploads/index.html b/writable/uploads/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/writable/uploads/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + +

1SM})cVHf<>{|g+<1~ulfv7ND@Zj(Tk_)} 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 H^hf{MU&y1P literal 0 HcmV?d00001 diff --git a/spark b/spark new file mode 100644 index 0000000..61bc572 --- /dev/null +++ b/spark @@ -0,0 +1,87 @@ +#!/usr/bin/env php + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +use CodeIgniter\Boot; +use Config\Paths; + +/* + * -------------------------------------------------------------------- + * CODEIGNITER COMMAND-LINE TOOLS + * -------------------------------------------------------------------- + * The main entry point into the CLI system and allows you to run + * commands and perform maintenance on your application. + */ + +/* + *--------------------------------------------------------------- + * CHECK SERVER API + *--------------------------------------------------------------- + */ + +// Refuse to run when called from php-cgi +if (str_starts_with(PHP_SAPI, 'cgi')) { + exit("The cli tool is not supported when running php-cgi. It needs php-cli to function!\n\n"); +} + +/* + *--------------------------------------------------------------- + * CHECK PHP VERSION + *--------------------------------------------------------------- + */ + +$minPhpVersion = '8.2'; // If you update this, don't forget to update `public/index.php`. +if (version_compare(PHP_VERSION, $minPhpVersion, '<')) { + $message = sprintf( + 'Your PHP version must be %s or higher to run CodeIgniter. Current version: %s', + $minPhpVersion, + PHP_VERSION, + ); + + exit($message); +} + +// We want errors to be shown when using it from the CLI. +error_reporting(E_ALL); +ini_set('display_errors', '1'); + +/* + *--------------------------------------------------------------- + * SET THE CURRENT DIRECTORY + *--------------------------------------------------------------- + */ + +// Path to the front controller +define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR); + +// Ensure the current directory is pointing to the front controller's directory +chdir(FCPATH); + +/* + *--------------------------------------------------------------- + * BOOTSTRAP THE APPLICATION + *--------------------------------------------------------------- + * This process sets up the path constants, loads and registers + * our autoloader, along with Composer's, loads our constants + * and fires up an environment-specific bootstrapping. + */ + +// LOAD OUR PATHS CONFIG FILE +// This is the line that might need to be changed, depending on your folder structure. +require FCPATH . '../app/Config/Paths.php'; +// ^^^ Change this line if you move your application folder + +$paths = new Paths(); + +// LOAD THE FRAMEWORK BOOTSTRAP FILE +require $paths->systemDirectory . '/Boot.php'; + +exit(Boot::bootSpark($paths)); diff --git a/tests/.htaccess b/tests/.htaccess new file mode 100644 index 0000000..3462048 --- /dev/null +++ b/tests/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..fc40e44 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,118 @@ +# Running Application Tests + +This is the quick-start to CodeIgniter testing. Its intent is to describe what +it takes to set up your application and get it ready to run unit tests. +It is not intended to be a full description of the test features that you can +use to test your application. Those details can be found in the documentation. + +## Resources + +* [CodeIgniter 4 User Guide on Testing](https://codeigniter.com/user_guide/testing/index.html) +* [PHPUnit docs](https://phpunit.de/documentation.html) +* [Any tutorials on Unit testing in CI4?](https://forum.codeigniter.com/showthread.php?tid=81830) + +## Requirements + +It is recommended to use the latest version of PHPUnit. At the time of this +writing, we are running version 9.x. Support for this has been built into the +**composer.json** file that ships with CodeIgniter and can easily be installed +via [Composer](https://getcomposer.org/) if you don't already have it installed globally. + +```console +> composer install +``` + +If running under macOS or Linux, you can create a symbolic link to make running tests a touch nicer. + +```console +> ln -s ./vendor/bin/phpunit ./phpunit +``` + +You also need to install [XDebug](https://xdebug.org/docs/install) in order +for code coverage to be calculated successfully. After installing `XDebug`, you must add `xdebug.mode=coverage` in the **php.ini** file to enable code coverage. + +## Setting Up + +A number of the tests use a running database. +In order to set up the database edit the details for the `tests` group in +**app/Config/Database.php** or **.env**. +Make sure that you provide a database engine that is currently running on your machine. +More details on a test database setup are in the +[Testing Your Database](https://codeigniter.com/user_guide/testing/database.html) section of the documentation. + +## Running the tests + +The entire test suite can be run by simply typing one command-line command from the main directory. + +```console +> ./phpunit +``` + +If you are using Windows, use the following command. + +```console +> vendor\bin\phpunit +``` + +You can limit tests to those within a single test directory by specifying the +directory name after phpunit. + +```console +> ./phpunit app/Models +``` + +## Generating Code Coverage + +To generate coverage information, including HTML reports you can view in your browser, +you can use the following command: + +```console +> ./phpunit --colors --coverage-text=tests/coverage.txt --coverage-html=tests/coverage/ -d memory_limit=1024m +``` + +This runs all of the tests again collecting information about how many lines, +functions, and files are tested. It also reports the percentage of the code that is covered by tests. +It is collected in two formats: a simple text file that provides an overview as well +as a comprehensive collection of HTML files that show the status of every line of code in the project. + +The text file can be found at **tests/coverage.txt**. +The HTML files can be viewed by opening **tests/coverage/index.html** in your favorite browser. + +## PHPUnit XML Configuration + +The repository has a ``phpunit.xml.dist`` file in the project root that's used for +PHPUnit configuration. This is used to provide a default configuration if you +do not have your own configuration file in the project root. + +The normal practice would be to copy ``phpunit.xml.dist`` to ``phpunit.xml`` +(which is git ignored), and to tailor it as you see fit. +For instance, you might wish to exclude database tests, or automatically generate +HTML code coverage reports. + +## Test Cases + +Every test needs a *test case*, or class that your tests extend. CodeIgniter 4 +provides one class that you may use directly: +* `CodeIgniter\Test\CIUnitTestCase` + +Most of the time you will want to write your own test cases that extend `CIUnitTestCase` +to hold functions and services common to your test suites. + +## Creating Tests + +All tests go in the **tests/** directory. Each test file is a class that extends a +**Test Case** (see above) and contains methods for the individual tests. These method +names must start with the word "test" and should have descriptive names for precisely what +they are testing: +`testUserCanModifyFile()` `testOutputColorMatchesInput()` `testIsLoggedInFailsWithInvalidUser()` + +Writing tests is an art, and there are many resources available to help learn how. +Review the links above and always pay attention to your code coverage. + +### Database Tests + +Tests can include migrating, seeding, and testing against a mock or live database. +Be sure to modify the test case (or create your own) to point to your seed and migrations +and include any additional steps to be run before tests in the `setUp()` method. +See [Testing Your Database](https://codeigniter.com/user_guide/testing/database.html) +for details. diff --git a/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php b/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php new file mode 100644 index 0000000..a73356d --- /dev/null +++ b/tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php @@ -0,0 +1,37 @@ +forge->addField('id'); + $this->forge->addField([ + 'name' => ['type' => 'varchar', 'constraint' => 31], + 'uid' => ['type' => 'varchar', 'constraint' => 31], + 'class' => ['type' => 'varchar', 'constraint' => 63], + 'icon' => ['type' => 'varchar', 'constraint' => 31], + 'summary' => ['type' => 'varchar', 'constraint' => 255], + 'created_at' => ['type' => 'datetime', 'null' => true], + 'updated_at' => ['type' => 'datetime', 'null' => true], + 'deleted_at' => ['type' => 'datetime', 'null' => true], + ]); + + $this->forge->addKey('name'); + $this->forge->addKey('uid'); + $this->forge->addKey(['deleted_at', 'id']); + $this->forge->addKey('created_at'); + + $this->forge->createTable('factories'); + } + + public function down(): void + { + $this->forge->dropTable('factories'); + } +} diff --git a/tests/_support/Database/Seeds/ExampleSeeder.php b/tests/_support/Database/Seeds/ExampleSeeder.php new file mode 100644 index 0000000..619fc27 --- /dev/null +++ b/tests/_support/Database/Seeds/ExampleSeeder.php @@ -0,0 +1,41 @@ + 'Test Factory', + 'uid' => 'test001', + 'class' => 'Factories\Tests\NewFactory', + 'icon' => 'fas fa-puzzle-piece', + 'summary' => 'Longer sample text for testing', + ], + [ + 'name' => 'Widget Factory', + 'uid' => 'widget', + 'class' => 'Factories\Tests\WidgetPlant', + 'icon' => 'fas fa-puzzle-piece', + 'summary' => 'Create widgets in your factory', + ], + [ + 'name' => 'Evil Factory', + 'uid' => 'evil-maker', + 'class' => 'Factories\Evil\MyFactory', + 'icon' => 'fas fa-book-dead', + 'summary' => 'Abandon all hope, ye who enter here', + ], + ]; + + $builder = $this->db->table('factories'); + + foreach ($factories as $factory) { + $builder->insert($factory); + } + } +} diff --git a/tests/_support/Libraries/ConfigReader.php b/tests/_support/Libraries/ConfigReader.php new file mode 100644 index 0000000..0bb4a8f --- /dev/null +++ b/tests/_support/Libraries/ConfigReader.php @@ -0,0 +1,19 @@ +findAll(); + + // Make sure the count is as expected + $this->assertCount(3, $objects); + } + + public function testSoftDeleteLeavesRow(): void + { + $model = new ExampleModel(); + $this->setPrivateProperty($model, 'useSoftDeletes', true); + $this->setPrivateProperty($model, 'tempUseSoftDeletes', true); + + /** @var stdClass $object */ + $object = $model->first(); + $model->delete($object->id); + + // The model should no longer find it + $this->assertNull($model->find($object->id)); + + // ... but it should still be in the database + $result = $model->builder()->where('id', $object->id)->get()->getResult(); + + $this->assertCount(1, $result); + } +} diff --git a/tests/index.html b/tests/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/tests/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

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 literal 0 HcmV?d00001 diff --git a/public/uploads/20260224/OPD-2039665-1771958057.jpg b/public/uploads/20260224/OPD-2039665-1771958057.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6d7005f89b3ae3175de861ee52f9e96f84daaa2 GIT binary patch literal 200295 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