<?php

namespace App\Http\Controllers;

use Illuminate\Support\Str;

use App\Asset;
use App\Banking_header;
use App\Business_profile_doc;
use App\Audit_trail;
use App\Error_log;
use Illuminate\Http\Request;
use App\BusinessInfo;
use App\shareholder_personal_info;
use App\BusinessBankingInfo;
use App\Businessgst;
use App\Promotorinfo;
use App\Company_profile_doc;
use App\Finance_data;
use App\Finance_header;
use App\Loan;
use App\State;
use App\Notes;
use App\RequestTable;
use App\Comm_address;
use App\Business_promoter_mapping;
use App\WorkingCaptial;
use App\GSTHeader;
use App\GstDetails;
use App\BankingDetails;
use Illuminate\Support\Facades\Redis;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Pagination\Paginator;
use App\Document;
use App\DocumentAuthority;
use App\DocumentMaster;
use App\AssetCategory;
use App\AssetSize;
use App\AssetSubCategory;
use App\AssetUsageType;
use App\Banking_parameter;
use App\Industry_segment;
use App\LoanType;
use App\Product;
use App\Financier;
use App\DocumentList;
use App\Nationality;
use App\Bank;
use App\City;
use App\IndustryNames;
use App\IndustryGroup;
use App\GeneralSetting;
use App\Otp;
use App\AssetDetails;
use App\AssetHeader;
use App\MongoFileUpload;
use App\Comm_phone_email;
use App\FolderFileMapping;
use App\Banking_details_extra_fields;
use App\Entity_types;
use App\Request_history;
use App\Status;
use App\Mastertable;
use App\Rental_Details;


use App\Questionnaire;
use App\HL_LAP_details;
use App\HL_LAP_header;

use App\Language;
use App\Translator;
use App\Type;
use App\Field_master;
use App\Banker_details;
use App\Verification;

//Loan 3rd party model data
use App\LoanStandaloneBasicData;
use App\LoanStandaloneAccountList;
use App\LoanStandaloneLinkedAccountList;
use App\LoanStandaloneSecurityDetails;
use App\Http\Controllers\DateTime;
use App\Book_appointment_details;
use App\Book_appointment_header;

use App\DocumentChecklist;
use App\DocumentStore;
use App\DocumentchecklistBank;
use SendGrid\Mail\From;
use SendGrid\Mail\Mail;
use SendGrid\Mail\To;

use App\Configuration_table;

//perfios 3rd party model for standalone
use App\CustomerInfoStandAlone;
use App\SummaryInfoStandalone;
use App\MonthlyDetailsStandalone;
use App\EmiLoanTxnStandalone;
use App\RegularCredits;
use App\RegularDebits;
use App\Top5FundsTransferres;
use App\Top5FundsRecieved;
use App\Xns;
use App\Database;

use Illuminate\Support\Facades\Http;
use Illuminate\Database\Query\Builder;
use League\Flysystem\AzureBlobStorage\AzureBlobStorageAdapter;
use League\Flysystem\Filesystem;
use MicrosoftAzure\Storage\Blob\BlobRestProxy;
use MicrosoftAzure\Storage\Common\Exceptions\ServiceException;
use MicrosoftAzure\Storage\Blob\Models\ListBlobsOptions;
use MicrosoftAzure\Storage\Blob\Models\CreateContainerOptions;
use MicrosoftAzure\Storage\Blob\Models\PublicAccessType;
//include __DIR__ . '/vendor/autoload.php';
require_once 'vendor/autoload.php';

class FinanceController extends Controller
{
    //SAVE BUSINESS
   
	
	//01/02/2022
	 public function businessDetails(Request $request)
    {
        DB::enableQueryLog();
        $businessInfo = BusinessInfo::firstOrNew(['name' => $request->businessName,'BPAN' => $request->businesspan,'gst'=> $request->gst]);
        
        $query1 = DB::getQueryLog();
         $this->callLogFileStore($request->user_id, "Business", "Select", $query1[0]['query'], "business_infos","Insert");
               
    $businessInfo->name = $request->businessName;
    $businessInfo->user_id = $request->user_id;
    $businessInfo->setup_date = $request->date;
    $businessInfo->gst = $request->gst;
    $businessInfo->BPAN = $request->businesspan;
    $businessInfo->pin_id = $request->pincode;
    //$businessInfo->area = $request->area;
    $businessInfo->entity_id = $request->entity;
    $businessInfo->bus_premises_id = $request->business;
    $businessInfo->industry_type_id = $request->industry;
    $businessInfo->industry_name_id = $request->industryname;
    $businessInfo->industry_group_id = $request->industrygrp;
    $businessInfo->bus_premises_area = $request->bparea;
    //$businessInfo->govt = $request->govt;
    $businessInfo->grc_type_id = $request->govt;
    $businessInfo->grc_no = $request->grcno;
    $businessInfo->bus_desc = $request->descrip;
    $businessInfo->is_draft = $request->is_draft;
    $businessInfo->Eligibility_flag = $request->Eligibility_flag;

    // static
    $timestamp = now();
    if (!empty($request->bus_id)) {
        if ($request->has('created_by')) {
            $businessInfo->modified_by = $request->created_by;
        } else {
            $businessInfo->modified_by = $request->user_id;
        }
        $businessInfo->modified_on = now();
    } else {
        if ($request->has('created_by')) {
            $businessInfo->created_by = $request->created_by;
        } else {
            $businessInfo->created_by = $request->user_id;
        }
        $businessInfo->created_on = now();
        $businessInfo->modified_by = $request->created_by;
        $businessInfo->modified_on = now();
        $file_no = (string) Str::uuid();
        $businessInfo->file_no = $file_no;
        $this->saveFileFolderMappingDetails('Business', $file_no, $request->user_id);
    }

    $businessinfoarray = $businessInfo->getAttributes();
    $redis = $this->setReddis($businessinfoarray, 'businessInfo');
    if (!$redis) {
        Log::error('Failed to save in redis.');
        //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
        return response()->json([
            "message" => 'Failed to save in redis',
            "id" => null
        ], 417);
    }
    DB::enableQueryLog();	
    $businessInfo->save();	
    $query1 = DB::getQueryLog();	
    //Log::info($query1[0]['query']);	
    $this->callLogFileStore($request->user_id, "Business", "Insert", $query1[0]['query'], "business_infos","Insert");
    $insert_id = $businessInfo->id;

    if (!$insert_id) {
        Log::error('Failed to save in pgsql. for ' . $request->businessName . ' ' . $request->gst);
        //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
        return response()->json([
            "message" => 'Failed to save in pgsql',
            "status" => false,
            "id" => null
        ], 417);
    }
    

    if ($request->company_profile1 != '') {

        $business_profile_doc = new Business_profile_doc();
        $business_profile_doc->docname1 = $request->name1;
        $business_profile_doc->file_base64 = $request->company_profile1;
        $business_profile_doc->file_type1 = $request->file_type1;
        $business_profile_doc->created_by = $request->user_id;
        $business_profile_doc->created_on = date("d-m-Y");
        $business_profile_doc->modified_by = $request->user_id;
        $business_profile_doc->modified_on = date("d-m-Y");
        DB::enableQueryLog();
        $business_profile_doc->save();
        $query1 = DB::getQueryLog();
         $this->callLogFileStore($request->user_id, "Business", "Insert", $query1[0]['query'], "business_profile_doc","Insert");
        $mongo_insert_id = $business_profile_doc->_id;
        Log::info('mongodb insert Id' . $mongo_insert_id);
        if (!$mongo_insert_id) {
            Log::error('Failed to save File In mongodb.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save File In mongodb',
                "id" => null
            ], 417);
        }

        DB::enableQueryLog();
        DB::table('business_infos')
            ->where('id', $insert_id)
            ->update(['Company_profile_upload_id' => $mongo_insert_id]);
        //$query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);

        //$this->callLogFileStore($request->user_id, "Business", "Update", $query1[0]['query'], "business_infos");


        //$businessInfo = BusinessInfo::firstOrNew(['id' => $request->bus_id]);
        $document_store = DocumentStore::firstOrNew(['parent_id' => $request->bus_id]);
        $document_store->parent_type_id = 1;
        $document_store->parent_id = $insert_id;
        $document_store->document_checklist_id = 12;
        $document_store->storage_id = 3;
        $document_store->created_by = $request->user_id;
        $document_store->created_on = now();
        $document_store->modified_by = $request->user_id;
        $document_store->modified_on = now();
        $document_store->document_upload_id = $mongo_insert_id;

        $document_store->save();
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
            'id' => $request->user_id
        ]);
        $responseBody = json_decode($response->getBody());
        $email = $responseBody->data->email;
        //$email = $data['email'];
        $mobile = $responseBody->data->mobile;
        //$mobile = $data['mobile'];
        $this->getnotifications('email', $email, 'Documents Uploaded Successfully', $request->user_id);
        $this->getnotifications('mobile', $mobile, 'Documents Uploaded Successfully', $request->user_id);

        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
            'role_id' => 3
        ]);
        $responseBody = $response;
        $dataArray = [];

        for ($i = 0; $i < count($responseBody['data']); $i++) {
            $mobile = $responseBody['data'][$i]['mobile'];
            $email = $responseBody['data'][$i]['email'];
            $this->getnotifications('email', $email, 'Documents Uploaded Successfully', $request->user_id);

            $this->getnotifications('mobile', $mobile, 'Documents Uploaded Successfully', $request->user_id);
        }
    }
    if ($request->company_profile2 != '') {

        $business_profile_doc = new Business_profile_doc();
        $business_profile_doc->docname2 = $request->name2;
        $business_profile_doc->file = $request->company_profile2;
        $business_profile_doc->file_type2 = $request->file_type2;
        $business_profile_doc->created_by = $request->user_id;
        $business_profile_doc->created_on = now();
        $business_profile_doc->modified_by = $request->user_id;
        $business_profile_doc->modified_on = now();
        //DB::enableQueryLog();
        $business_profile_doc->save();
        //$query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);

        //$this->callLogFileStore($request->user_id, "Business", "Select", $query1[0]['query'], "business_profile_doc");

        $mongo_insert_id = $business_profile_doc->_id;
        Log::info('mongodb insert Id' . $mongo_insert_id);
        if (!$mongo_insert_id) {
            Log::error('Failed to save File In mongodb.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save File In mongodb',
                "id" => null
            ], 417);
        }

        DB::table('business_infos')
            ->where('id', $insert_id)
            ->update(['Company_profile_upload_id' => $mongo_insert_id]);
        $document_store = DocumentStore::firstOrNew(['parent_id' => $request->bus_id]);
        $document_store->parent_type_id = 1;
        $document_store->parent_id = $insert_id;
        $document_store->document_checklist_id = 12;
        $document_store->storage_id = 3;
        $document_store->created_by = $request->user_id;
        $document_store->created_on = now();
        $document_store->modified_by = $request->user_id;
        $document_store->modified_on = now();
        $document_store->document_upload_id = $mongo_insert_id;

        $document_store->save();
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
            'id' => $request->user_id
        ]);
        $responseBody = json_decode($response->getBody());
        $data['email'] = $responseBody->data->email;
        $email = $data['email'];
        $data['mobile'] = $responseBody->data->mobile;
        $mobile = $data['mobile'];
        $this->getnotifications('email', $email, 'Documents Uploaded Successfully', $request->user_id);
        $this->getnotifications('mobile', $mobile, 'Documents Uploaded Successfully', $request->user_id);

        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
            'role_id' => 3
        ]);
        $responseBody = $response;
        $dataArray = [];

        for ($i = 0; $i < count($responseBody['data']); $i++) {
            $mobile = $responseBody['data'][$i]['mobile'];
            $email = $responseBody['data'][$i]['email'];
            $this->getnotifications('email', $email, 'Documents Uploaded Successfully', $request->user_id);

            $this->getnotifications('mobile', $mobile, 'Documents Uploaded Successfully', $request->user_id);
        }
    }

    $gst = new GSTHeader();

    $gst->parent_type_id = 1;
    $gst->parent_id = $insert_id;
    $gst->gst_no = $request->gst;
    $gst->state_id = substr($request->gst, 0, 2);
    $gst->eligibility_flag = $request->Eligibility_flag;
    $gst->created_by = $request->user_id;
    $gst->created_on = now();
    $gst->modified_on = now();
    $gst->modified_by = $request->user_id;
    $file_no = (string) Str::uuid();
    $gst->file_no = $file_no;
    $this->saveFileFolderMappingDetails('GST', $file_no, $request->user_id);
    $gst->save();
    if(count($request->gst_arr)>0){
        foreach($request->gst_arr  as $i => $i_value){
            $gst = new GSTHeader();
            Log::info( $i_value);
            $gst->parent_type_id = 1;
            $gst->parent_id = $insert_id;
            $gst->gst_no = $i_value;
            $gst->state_id = substr($i_value, 0, 2);
            $gst->eligibility_flag = $request->Eligibility_flag;
            $gst->created_by = $request->user_id;
            $gst->created_on = now();
            $gst->modified_on = now();
            $gst->modified_by = $request->user_id;
            $file_no = (string) Str::uuid();
            $gst->file_no = $file_no;
            $this->saveFileFolderMappingDetails('GST', $file_no, $request->user_id);
            //DB::enableQueryLog();
            $gst->save();
        }
    }
    $businessinfoarray['primary_id'] = $insert_id;
    if (isset($businessinfoarray['modified_by'])) {
        unset($businessinfoarray['modified_by']);
    }

    if ($request->bus_id) {
        return response()->json([
            "message" => 'Business updated Successfully',
            "status" => true,
            "Data" => $businessinfoarray

        ], 201);
    } else {
        return response()->json([
            "message" => 'Business saved Successfully',
            "status" => true,
            "Data" => $businessinfoarray

        ], 201);
    } 


        }
    
	
//check if business already exists
    public function checkBusiness(Request $request)
    {

        $businessInfo = BusinessInfo::firstOrNew(['id' => $request->bus_id]);
        // $businessInfo = new BusinessInfo();
        if ($businessInfo->name != $request->businessName) {
            $checkBusiness = BusinessInfo::where('name', $request->businessName)->get();
            if (count($checkBusiness) > 0) {
                return response()->json([
                    "status" => false,
                    "message" => 'Business Name Already exists',
                ], 201);
            } else {
                return response()->json([
                    "status" => true,
                ], 201);
            }
        }
    }

    function notes($request, $req_id)
    {
        $notes = Notes::firstOrNew(['request_id' => $req_id]);
        $notes->request_id = $req_id;
        $notes->note_description = $request->note_description;
        if (!empty($request->bus_id)) {
            $notes->modified_by = 1;
            $notes->modified_on = now();
        } else {
            $notes->created_by = 1;
            $notes->created_on = now();
        }
        $notes->save();
        return $notes->id;
    }


 //lets get start page save 
     function request_table(Request $request)
    {
        DB::enableQueryLog();
        $req = RequestTable::firstOrNew(['id' => $request->id]);
        $query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "let's get start", "Select", $query1[0]['query'], "request","Insert");
        $req->request_type_id =  $request->request_type_id;
        $req->ip_address =  $_SERVER['REMOTE_ADDR'];
        $req->mac_address =  $this->macaddres();
        $req->business_type_id =  $request->bus_type_id;
        //$req->sub_agent_id =  $request->sub_agent_id;
        // $req->sales_mgr_id =  $request->sales_mgr_id;
        //$req->sub_agent_id =  $request->sub_agent_id;
        //$req->bus_type_id =  $request->bus_type_id;
		$req->profession_id = $request->profession_id;

        $req->status = 'Submitted';
        $req->user_id =  $request->user_id;
        $req->business_channel_id =  $request->bus_channel_id;
		$req->referal_code = $request->referal_code;
        $req->enable = 1;
        $req->is_active = 1;
        $timestamp = now();
        /*$lastApplicationId = DB::select("select
		CASE WHEN to_char(now(),'DD') = '01'
		THEN CONCAT('BL',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE
		CASE WHEN (select CONCAT('BL',(substring(MAX(reference_id),3,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request) = 'BL'
		THEN CONCAT('BL',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE (select CONCAT('BL',(substring(MAX(reference_id),3,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request)
		END
		END as lastid"); */ 
		
		//Log::info(print_r($lastApplicationId, true));
         if($req->business_channel_id == 1){
        $lastApplicationId = DB::select("select
		CASE WHEN to_char(now(),'DD') = '01'
		THEN CONCAT('BL',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE
		CASE WHEN (select CONCAT('BL',(substring(MAX(reference_id),4,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request) = 'BL'
		THEN CONCAT('BL',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE (select CONCAT('BL',(substring(MAX(reference_id),4,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request)
		END
		END as lastid");
        }elseif($req->business_channel_id == 7){
            $lastApplicationId = DB::select("select
		CASE WHEN to_char(now(),'DD') = '01'
		THEN CONCAT('HL',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE
		CASE WHEN (select CONCAT('HL',(substring(MAX(reference_id),3,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request) = 'HL'
		THEN CONCAT('HL',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE (select CONCAT('HL',(substring(MAX(reference_id),3,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request)
		END
		END as lastid");
        }else{
            $lastApplicationId = DB::select("select
		CASE WHEN to_char(now(),'DD') = '01'
		THEN CONCAT('LAP',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE
		CASE WHEN (select CONCAT('LA',(substring(MAX(reference_id),4,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request) = 'LP'
		THEN CONCAT('LAP',to_char(now(), 'YY'),to_char(now(),'MM'),to_char(now(),'DD'),'000001')
		ELSE (select CONCAT('LAP',(substring(MAX(reference_id),4,LENGTH(MAX(reference_id)))::text):: BIGINT + 1) from request)
		END
		END as lastid");
        } 
        //Log::info($lastApplicationId);
        //echo ($lastApplicationId[0]->lastid); exit();
				$refId = DB::select("select reference_id from request where reference_id ='". $lastApplicationId[0]->lastid . "' and user_id = '" . $request->user_id . "'");
        $req->reference_id = $lastApplicationId[0]->lastid;


        $folderData = DB::select('select * from folder_file_mapping
        left join customer on customer.pan = folder_file_mapping.bpan
        where customer.primary_user_id = ' . $request->user_id);

        /* Log::info("select * from folder_file_mapping
        left join customer on customer.pan = folder_file_mapping.bpan
        where customer.primary_user_id = " . $request->user_id); */
		
		
		
        $req->folder_no =  $folderData[0]->folder_no;

      

        if (!empty($request->bus_channel_id)) {
            if (!empty($request->id)) {
                if ($request->has('created_by')) {
                    $req->modified_by = $request->created_by;
                } else {
                    $req->modified_by = $request->user_id;
                }
                $req->modified_on = now();
            } else {
                if ($request->has('created_by')) {
                    $req->created_by = $request->created_by;
                } else {
                    $req->created_by = $request->user_id;
                }
                $req->created_on = now();
                $req->modified_by = $request->created_by;
                $req->modified_on = now();
            }
             //if(empty($refId)){
                $req->save();
            //}
            
            $insert_id = $req->id;

            
            $data = $req->getAttributes();
            $redis = $this->setReddis($data, 'req');
            if (!$redis) {
                Log::error('Failed to save in redis id .' . $insert_id);
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            if (!$insert_id) {
                return response()->json([
                    "message" => 'Application exists already for this user',
                ], 417);
            }
            $businessId = DB::select('select business_infos.id as business_id
            from request
            left join customer on customer.primary_user_id = request.user_id
            left join business_infos on business_infos.name = customer.business_name
            where request.id  = ' . $insert_id);
            $business = $businessId[0];
            $prod = json_encode($business);
            $object = json_decode($prod);
            $data['business_id'] = $object->business_id;
            //Log::info($data['businessId']);
            
            $businessName = DB::select('select customer.business_name as business_name
            from request
            left join customer on customer.primary_user_id = request.user_id
            left join business_infos on business_infos.name = customer.business_name
            where request.id  = ' . $insert_id);
            $businessname = $businessName[0];
            $productname = json_encode($businessname);
            $objectname = json_decode($productname);
            $data['business_name'] = $objectname->business_name;
            //Log::info($data['business_name']);


				  $loan_type = DB::select('select loan_types.name from loan_types where id =' . $request->bus_channel_id);

        $loan = $loan_type[0];
        $pro = json_encode($loan);
        $obj = json_decode($pro);

        //Log::info($data['loan'] = $obj->name);
        $data['loan_type'] = $obj->name;
            $data['id'] = $insert_id;
             $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                'id' => $request->user_id
            ]);
    
            //Log::info($response);
            $responseBody = json_decode($response->getBody());
            //Log::info($responseBody->status);
        if($responseBody->status == 1){
            //Log::info($responseBody->data->email);
            $data['email'] = $responseBody->data->email;
            $email = $data['email'];
            //Log::info($email);
            $data['mobile'] = $responseBody->data->mobile;
            $mobile = $data['mobile'];
			$data['referal_code'] = $request->referal_code;
            //Log::info($mobile);
            //Log::info($req->reference_id);
            $message = "Application "  . $req->reference_id .  " has been created for your "  . $obj->name .  " request at Aagey.com. You can proceed with entering other details for your application";

            //FUNCTION  getnotifications TO SEND NOTIFICATIONS.
            $this->getnotifications('email', $email, $message ,
         $request->user_id,'Application created');

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application created');
        }
		//issue is n lets get start page
		/*else{
            return response()->json([
                "message" => 'No record found on this user_ id',
                "status" => false
            ], 201);
        }*/
		
		
            $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
                'role_id' => 3
            ]);

            //Log::info($response);
            //Log::info($response->getBody());
            $responseBody = $response;
            //Log::info($responseBody = json_decode($response->getBody()));
            //Log::info($responseBody);
            $dataArray = [];

            for ($i = 0; $i < count($responseBody['data']); $i++) {
                $mobile = $responseBody['data'][$i]['mobile'];
                $email = $responseBody['data'][$i]['email'];
                $message = "Application "  . $req->reference_id .  " has been created";
                //Log::info($mobile);
                //Log::info($email);

                $this->getnotifications('email', $email, $message ,
                $request->user_id,'Application created');;

                $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application created');
            }
            //save details in request_history
            //$this->saveRequestHistory($request->id, $req->folder_no, 'Created', 'no remarks', $request->user_id);
            //Log::info($response);
            if($request->id){
                return response()->json([
                    "status" => true,
                    "message" => 'Your Application is updated with the Reference Number ' . $req->reference_id,
                    "Data" => $data
                ], 201);
    
                
			}else{
				return response()->json([
					"status" => true,
					"message" => 'Your Application is created with the Reference Number ' . $req->reference_id,
					"Data" => $data
				], 201);

            
			}

            return $req;
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Please Enter Loan type.',
            ], 201);
        }
    }
		
		public function getUserDetails($id) {
			$response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
              'id' => $id,
						]);
						
			 return $response;
		}
		
		function getAllRequestdetails(Request $request)
    {
         $offset = $request->offset;
        $limit = $request->limit;
      		/*	
        $requestData = DB::select('select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,customer.pan as pan,
        master_table.name as profession
		from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
		left join business_infos on business_infos.name = customer.business_name
		left join master_table on master_table.id = request.profession_id
        where request.enable  = ' . $request->enable. ' order by request.id desc  limit ' . $limit . ' offset ' . $offset);
*/
      // $requestDatacount = DB::select('select id from request'); 

$requestData =DB::select('select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,customer.pan as pan,
        master_table.name as profession
		from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
		left join business_infos on business_infos.name = customer.business_name
		left join master_table on master_table.id = request.profession_id
        where request.enable  =1 order by request.reference_id');
        
        $requestDatacount =650;

        
				$data = [];
         foreach($requestData as $i => $i_value){
            $user_data =  $this->getUserDetails($i_value->user_id);

						$id = (is_null($i_value->owner_id)) ? "" : $i_value->owner_id;
						if (empty($id)) {
							$email ="";
							$mobile ="";
						} else if (!empty($id)) {
							$response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
              'id' => $id
						]);
							$json_array = json_decode($response->getBody()->getContents());
							$email = ($json_array!=null) ? $json_array->data->email : '';
							$mobile = ($json_array!=null) ? $json_array->data->mobile: '';
						}

                    $id1 = (is_null($i_value->analyst_id)) ? "" : $i_value->analyst_id;
                    if(empty($id1)){
                        $emailAnalyst ="";
						$mobileAnalyst ="";
                    }else if(!empty($id1)){
                        $response1 = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                            'id' => $id1 
                        ]);
                        $json_array1 = json_decode($response1->getBody()->getContents());
							$emailAnalyst = ($json_array1!=null) ? $json_array1->data->email : '';
							$mobileAnalyst = ($json_array1!=null) ? $json_array1->data->mobile: '';
                    }

						
						$data[$i] = [
			"id"=>$i_value->id,
			"request_type_id"=>$i_value->request_type_id,
			"business_type_id"=> ($i_value->business_type_id !=null) ? $i_value->business_type_id: '',
			"folder_no"=>($i_value->folder_no !=null) ? $i_value->folder_no:'',
			"business_channel_id"=>($i_value->business_channel_id !=null) ? $i_value->business_channel_id:'',
            "sub_agent_id"=>($i_value->sub_agent_id !=null) ? $i_value->sub_agent_id:'',
            "sales_mgr_id"=>($i_value->sales_mgr_id !=null) ? $i_value->sales_mgr_id:'',
            "user_id"=>($i_value->user_id !=null) ? $i_value->user_id:'',
            "ip_address"=>($i_value->ip_address !=null) ? $i_value->ip_address:'',
            "mac_address"=>($i_value->mac_address !=null) ? $i_value->mac_address:'',
            "enable"=>($i_value->enable !=null) ? $i_value->enable:'',
            "is_active"=>($i_value->is_active !=null) ? $i_value->is_active:'',
            "created_by"=>($i_value->created_by !=null) ? $i_value->created_by:'',
            "created_on"=>($i_value->created_on !=null) ? $i_value->created_on:'',
            "modified_by"=>($i_value->modified_by !=null) ? $i_value->modified_by:'',
            "modified_on"=>($i_value->modified_on !=null) ? $i_value->modified_on:'',
            "reference_id"=>($i_value->reference_id !=null) ? $i_value->reference_id:'',
            "owner_id"=>($i_value->owner_id !=null) ? $i_value->owner_id:'',
            "analyst_id"=>($i_value->analyst_id !=null) ? $i_value->analyst_id:'',
			"profession_id" =>($i_value->profession_id !=null) ? $i_value->profession_id:'',
            "status"=>($i_value->status !=null) ? $i_value->status:'',
            "loan_type"=>($i_value->loan_type !=null) ? $i_value->loan_type:'',
            "business_name"=>($i_value->business_name !=null) ? $i_value->business_name:'',
			"business_id" => ($i_value->business_id !=null) ? $i_value->business_id:'',
            "pan"=>($i_value->pan !=null) ? $i_value->pan:'',
			"email" => $email,
			"mobile" => $mobile,
            "emailAnalyst" => $emailAnalyst,
            "mobileAnalyst" => $mobileAnalyst
						];
						
						
        } 
        // $data = DB::table('request')->where('is_active',$request->is_active)->paginate(100);
        //$data = DB::table('request')->paginate(15);
        if ($requestData) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
				"data" => $data,
               "data_count" =>$requestDatacount
								
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	
	
	
/*	
    public function getAllRequestdetails(Request $request)
    {
        $offset = $request->offset;
        $limit = $request->limit;
        DB::enableQueryLog();
        $requestData = DB::select('select r.id,r.folder_no,r.user_id,r.owner_id,r.folder_no,r.analyst_id,r.reference_id,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,customer.pan as pan
        from request as r
        inner join customer on customer.primary_user_id = r.user_id
        inner join loan_types on loan_types.id = r.business_channel_id
		inner join business_infos on business_infos.name = customer.business_name
        where r.enable  = ' . $request->enable. ' order by r.id desc');

        $query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);
        
        // $requestDatacount = DB::select('select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,customer.pan as pan
        // from request
        // left join customer on customer.primary_user_id = request.user_id
        // left join loan_types on loan_types.id = request.business_channel_id
		// left join business_infos on business_infos.name = customer.business_name
        // where request.enable  = ' . $request->enable. ' order by request.id');


        
        $data = [];
        foreach ($requestData as $i => $i_value) {
            $emailAnalyst ="";
            $mobileAnalyst ="";
            $email ="";
            $mobile ="";
            $user_data =  $this->getUserDetails($i_value->user_id);

            $id = (is_null($i_value->owner_id)) ? "" : $i_value->owner_id;
            if (empty($id)) {
                $email ="";
                $mobile ="";
            } elseif (!empty($id)) {
                $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
              'id' => $id
                        ]);
                $json_array = json_decode($response->getBody()->getContents());
                $email = ($json_array!=null) ? $json_array->data->email : '';
                $mobile = ($json_array!=null) ? $json_array->data->mobile: '';
            }

            $id1 = (is_null($i_value->analyst_id)) ? "" : $i_value->analyst_id;
            if (empty($id1)) {
                $email ="";
                $mobile ="";
            } elseif (!empty($id1)) {
                $response1 = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                            'id' => $id1
                        ]);
                $json_array1 = json_decode($response1->getBody()->getContents());
                $emailAnalyst = ($json_array1!=null) ? $json_array1->data->email : '';
                $mobileAnalyst = ($json_array1!=null) ? $json_array1->data->mobile: '';
            }

                        
            $data[$i] = [
            "id"=>$i_value->id,
            // "request_type_id"=>$i_value->request_type_id,
            // "business_type_id"=> ($i_value->business_type_id !=null) ? $i_value->business_type_id: '',
            "folder_no"=>($i_value->folder_no !=null) ? $i_value->folder_no:'',
            // "business_channel_id"=>($i_value->business_channel_id !=null) ? $i_value->business_channel_id:'',
            // "sub_agent_id"=>($i_value->sub_agent_id !=null) ? $i_value->sub_agent_id:'',
            // "sales_mgr_id"=>($i_value->sales_mgr_id !=null) ? $i_value->sales_mgr_id:'',
            "user_id"=>($i_value->user_id !=null) ? $i_value->user_id:'',
            // "ip_address"=>($i_value->ip_address !=null) ? $i_value->ip_address:'',
            // "mac_address"=>($i_value->mac_address !=null) ? $i_value->mac_address:'',
            // "enable"=>($i_value->enable !=null) ? $i_value->enable:'',
           // "is_active"=>($i_value->is_active !=null) ? $i_value->is_active:'',
            // "created_by"=>($i_value->created_by !=null) ? $i_value->created_by:'',
            // "created_on"=>($i_value->created_on !=null) ? $i_value->created_on:'',
            // "modified_by"=>($i_value->modified_by !=null) ? $i_value->modified_by:'',
            // "modified_on"=>($i_value->modified_on !=null) ? $i_value->modified_on:'',
            "reference_id"=>($i_value->reference_id !=null) ? $i_value->reference_id:'',
            "owner_id"=>($i_value->owner_id !=null) ? $i_value->owner_id:'',
            "analyst_id"=>($i_value->analyst_id !=null) ? $i_value->analyst_id:'',
            // "status"=>($i_value->status !=null) ? $i_value->status:'',
            "loan_type"=>($i_value->loan_type !=null) ? $i_value->loan_type:'',
            "business_name"=>($i_value->business_name !=null) ? $i_value->business_name:'',
            "business_id" => ($i_value->business_id !=null) ? $i_value->business_id:'',
            "pan"=>($i_value->pan !=null) ? $i_value->pan:'',
            "email" => $email,
            "mobile" => $mobile,
            "emailAnalyst" => $emailAnalyst,
            "mobileAnalyst" => $mobileAnalyst
                        ];
        }
        $this->callLogFileStore($request->user_id, "Let's get Start", "select", $query1[0]['query'], "request", "Select", "fetch");
        //$data = DB::table('request')->paginate(15);
        if ($requestData) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data,
                "data_count" => count($requestData)
                                
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	*/

		



    function getRequestdetailsByUser(Request $request)
    {
        DB::enableQueryLog();
        //$data = DB::table('request')->where('user_id', $request->user_id)->get();
        $query = 'select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,
        customer.pan as pan,master_table.name as profession
        from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
        left join business_infos on business_infos.name = customer.business_name
        left join master_table on master_table.id = request.profession_id
        where request.is_active = 1 and request.user_id =  ' . $request->user_id .'order by request.id';
        $data = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id, "let's get started", "select", $query1[0]['query'], "request","fetch");
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }

    function getRequestdetailsByOwnerid(Request $request)
    {
        DB::enableQueryLog();
        //$data = DB::table('request')->where('user_id', $request->user_id)->get();
        $query = 'select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,
        master_table.name as profession,business_infos.id as business_id
        from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
        left join master_table on master_table.id = request.profession_id
		left join business_infos on business_infos.name = customer.business_name
        where request.is_active = 1 and request.owner_id  =' . $request->owner_id .' order by request.id ';
        $data = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
    $this->callLogFileStore($request->user_id, "let's get started", "select", $query1[0]['query'], "request","fetch");
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }


    function getRequestdetailsByPan(Request $request)
    {

        $data = DB::table('request')->where('folder_no', $request->folder_no)->first();
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }
    function getLoandetailsbyloantypeid(Request $request)
    {
        $data = DB::table('loan_types')->where('id', $request->id)->first();
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }

    function macaddres()
    {
        $ipAddress = $_SERVER['REMOTE_ADDR'];

        $macAddr = false;

        #run the external command, break output into lines
        $arp = `arp -a $ipAddress`;
        $lines = explode("\n", $arp);

        #look for the output line describing our IP address
        foreach ($lines as $line) {
            $cols = preg_split('/\s+/', trim($line));
            if ($cols[0] == $ipAddress) {
                $macAddr = $cols[1];
            }
        }
        return $macAddr;
    }
	
    function getbusinessInfoByid(Request $request)
    {
  //$data = DB::table('business_infos')->where('id', $request->bus_id)->first();
        $query1 = 'select business_infos.*,pin_codes.pincode as pincode,industry_names.name as industry_name,
		master_table.name as industry_type,industry_group.name as industry_group,entity_types.entity as entity
		from business_infos
		left join pin_codes on pin_codes.id  = business_infos.pin_id
		left join industry_group on industry_group.id = business_infos.industry_group_id
		left join master_table on master_table.id = business_infos.industry_type_id
		left join industry_names on industry_names.id = business_infos.industry_name_id
		left join entity_types on entity_types.id = business_infos.entity_id
		where business_infos.id = ' . $request->bus_id;
        $businessData = DB::select($query1);
        $data = $businessData[0];

        $query2 = 'select document_store.document_upload_id
        from document_store where parent_type_id = 1 and
        document_checklist_id = 12 and parent_id =' . $request->bus_id;
        $documentStore = DB::select($query2);

        //$data['business'] = $businessData;
        //$data['document_store'] = $documentStore;
        if (count($documentStore) == 0) {
            $data->company_profile1 = null;
        }


        if (count($documentStore) == 1) {
            $companyProfile = $documentStore[0];
            $profile = json_encode($companyProfile);
            //Log::info($profile);
            $obj = json_decode($profile);
            //Log::info($obj->document_upload_id);
            $file = '';
            if ($obj->document_upload_id != '') {
                $business_profile_doc = Business_profile_doc::find($obj->document_upload_id);
                if ($business_profile_doc == null) {
                    $file = null;
                    //Log::info($business_profile_doc);
                    $data->company_profile1 = null;
                } else {
                    $file = $business_profile_doc->file;
                    //Log::info($business_profile_doc);
                    $data->company_profile_name1 = $business_profile_doc->docname1;
                    $data->company_profile1 = $business_profile_doc->file_base64;
                    $data->company_profile_type1 = $business_profile_doc->file_type1;
                    $data->company_profile_created_by = $business_profile_doc->created_by;
                    $data->company_profile_created_on = $business_profile_doc->created_on;
                    $data->company_profile_modified_by = $business_profile_doc->modified_by;
                    $data->company_profile_modified_on = $business_profile_doc->modified_on;
                }
            }
            //$data['company_profile'] = $business_profile_doc;

        }


        if (count($documentStore) > 1) {
            //Log::info($documentStore);
            $companyProfile = $documentStore[0];
            $profile = json_encode($companyProfile);
            //Log::info($profile);
            $obj = json_decode($profile);
            //Log::info($obj->document_upload_id);
            $file = '';
            if ($obj->document_upload_id != '') {
                $business_profile_doc = Business_profile_doc::find($obj->document_upload_id);
                //Log::info($business_profile_doc);
                if ($business_profile_doc == null) {
                    $file = null;
                    //Log::info($file);
                    $data->company_profile1 = null;
                } else {
                    $file = $business_profile_doc->file;
                    //Log::info($business_profile_doc);
                    $data->company_profile_name1 = $business_profile_doc->docname1;
                    $data->company_profile1 = $business_profile_doc->file_base64;
                    $data->company_profile_type1 = $business_profile_doc->file_type1;
                    $data->company_profile_created_by = $business_profile_doc->created_by;
                    $data->company_profile_created_on = $business_profile_doc->created_on;
                    $data->company_profile_modified_by = $business_profile_doc->modified_by;
                    $data->company_profile_modified_on = $business_profile_doc->modified_on;
                }
            }

            $companyProfile2 = $documentStore[1];
            $profile2 = json_encode($companyProfile2);
            $obj2 = json_decode($profile2);

            $file = '';
            if ($obj2->document_upload_id != '') {
                $business_profile_doc2 = Business_profile_doc::find($obj2->document_upload_id);
                //Log::info($business_profile_doc2);
                if ($business_profile_doc2 == null) {
                    $file = null;
                    //Log::info($file);

                    $data->company_profile2 = null;
                } else {
                    $file = $business_profile_doc2->file;
                    //Log::info($business_profile_doc);
                    $data->company_profile_name2 = $business_profile_doc2->docname2;
                    $data->company_profile2 = $business_profile_doc2->file;
                    $data->company_profile_type2 = $business_profile_doc2->file_type2;
                    $data->company_profile2_created_by = $business_profile_doc2->created_by;
                    $data->company_profile2_created_on = $business_profile_doc2->created_on;
                    $data->company_profile2_modified_by = $business_profile_doc2->modified_by;
                    $data->company_profile2_modified_on = $business_profile_doc2->modified_on;
                }
            }
            //$data['company_profile'] = $business_profile_doc;
            //$data['company_profile2'] = $business_profile_doc2;


        }
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }

    function getbusinessInfoByPan(Request $requset)
    {
        $data = DB::table('business_infos')->where('BPAN', $requset->businesspan)->where('is_active', '=', 1)->first();
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }

 

   

    function getpromoterInfoByPan(Request $requset)
    {
        DB::enableQueryLog();
        $data = DB::table('business_infos')->where('BPAN', $requset->businesspan)->first();
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        //$this->callLogFileStore($request->user_id, "Promoter", "select", $query1[0]['query'], "promoter_info");

        if (!empty($data)) {
            $bus_id = $data->id;
            DB::enableQueryLog();
            $pdata = DB::table('business_promoter_mapping')
                ->join('promoter_info', 'promoter_info.id', '=', 'business_promoter_mapping.promoter_id')
                ->where('business_promoter_mapping.business_id', $bus_id)
                ->select('promoter_info.*')
                ->get();

            if (!empty($pdata)) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $pdata
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'No records found'
                ], 201);
            }
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }


    function getAllbusinessInfos(Request $request)
    {

        if ($request->has('enable')) {
            $data = DB::table('business_infos')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = DB::table('business_infos')->where('is_active', '=', 1)->orderBy('id')->get();
        }

        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    function getBussinessByuserid(Request $request)
    {
        // $data = DB::table('business_infos')->where('user_id', $request->user_id)->orderBy('id')->get();
        DB::enableQueryLog();
        $query = 'select business_infos.*,entity_types.entity as entity_type, industry_group.name as industry_group_name,
       master_table.name as industry_type, bus_master.name as bus_premises_name ,industry_names.name as industry_names
       from business_infos
       left join entity_types on entity_types.id = business_infos.entity_id
       left join industry_group on industry_group.id = business_infos.industry_group_id
       left join master_table on master_table.id = business_infos.industry_type_id
       left join industry_names on industry_names.id = business_infos.industry_name_id
       left join master_table as bus_master on bus_master.id = business_infos.bus_premises_id
       where business_infos.is_active = 1 and user_id = ' . $request->user_id . 'order by business_infos.id';

        $data = DB::select($query);

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id, "Business", "select", $query1[0]['query'], "business_infos","fetch");
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    function getAllpromoterinfobybusid(Request $request)
    {
        //Soumen tested

        $parent_type = "Promoter";
        $master_type = "parent_type";
        DB::enableQueryLog();
        $parentData = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Promoter", "select", $query1[0]['query'], "promoter_info","fetch");
        $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

        $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

        DB::enableQueryLog();
        $promoterData = DB::select("select promoter_info.*,business_promoter_mapping.*,emailData.contact_value as email,mobileData.contact_value as mobile from business_promoter_mapping
        left join promoter_info on promoter_info.id = business_promoter_mapping.promoter_id
        left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
        left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
        where business_promoter_mapping.business_id = " . $request->bus_id . " and business_promoter_mapping.is_active = 1 and promoter_info.is_active = 1");

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id, "Promoter", "select", $query1[0]['query'], "promoter_info","fetch");
        //$data = count($promoterData);

        if (count($promoterData) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $promoterData
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    function getshareholderorPromotorInfoByid(Request $request)
    {

        $parent_type = "Promoter";
        $master_type = "parent_type";

        DB::enableQueryLog();
        $parentData = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id, "Promoter", "select", $query1[0]['query'], "promoter_info","fetch");
        $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

        $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

        $query = "select promoter_info.*,comm_address.id as coumnaddres_id,comm_address.add_line_1 as address_1,
        comm_address.add_line_2 as address_2,comm_address.landmark,comm_address.pin_id,comm_address.parent_type_id,pin_codes.pincode as pincode,
        business_promoter_mapping.share_percent as share_percent,business_promoter_mapping.business_id as bus_id,
        nationality.country as nationality,pin_codes.state_id as state_id,states.state_name as state_name,states.state_code as state_code,emailData.contact_value as email,
		mobileData.contact_value as mobile,master_table.name as property
        from promoter_info
        left join comm_address on comm_address.parent_id = promoter_info.id
        left join nationality on nationality. id = promoter_info.nationality_id
        left join pin_codes on pin_codes.id = comm_address.pin_id
        left join states on states.state_id = pin_codes.state_id
		left join master_table on master_table.id = promoter_info.property_id
        left join business_promoter_mapping on business_promoter_mapping.promoter_id  = promoter_info.id
        left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
        left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
        where promoter_info.id = " . $request->promo_or_shareholder_id;
        $prodata = DB::select($query);



        if (count($prodata) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $prodata
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function chekSharePercent(Request $request)
    {
        DB::enableQueryLog();
        $buspartnermapp = DB::table('business_promoter_mapping')->where('business_id', '=', $request->business_id)->sum('share_percent');
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id, "business_promoter_mapping", "select", $query1[0]['query'], "business_promoter_mapping","Check");
        if (!empty($buspartnermapp)) {
            $resultdata = ($buspartnermapp + $request->share);
            $availableShare = (100 - $buspartnermapp);
            $data['resultdata'] = $resultdata;
            $data['availableShare'] = $availableShare;
            if ($resultdata >= 100) {
                return response()->json([
                    "status" => false,
                    "message" => 'Share can not exceed.',
                    "Data" => $data
                ], 201);
            } else {
                return response()->json([
                    "status" => true,
                    "message" => 'Share avilable for this Businees.',
                    "Data" => $data
                ], 201);
            }
        } else {
            if (($request->share) > 100) {
                $data['resultdata'] = 0 + $request->share;
                $data['availableShare'] = 100;
                return response()->json([
                    "status" => false,
                    "message" => 'Share not avilable for this Businees.',
                    "Data" => $data
                ], 201);
            } else {
                $data['resultdata'] = 0 + $request->share;
                $data['availableShare'] = 100;
                return response()->json([
                    "status" => true,
                    "message" => 'Share avilable for this Businees.',
                    "Data" => $data
                ], 201);
            }
        }
    }

    function shareholderAndPersonalInfo(Request $request)
    {
        // echo "step1";
        // $shareholder_info = new Promotorinfo;
        $shareholder_info = Promotorinfo::firstOrNew(['id' => $request->promotor_id]);
        $bus_parter_map = new Business_promoter_mapping();
        $shareholder_info->first_name = $request->firstname;
        $shareholder_info->middle_name = $request->middlename;
        $shareholder_info->last_name = $request->lastname;
        $shareholder_info->type = $request->type;
        $shareholder_info->mobile  = $request->Mobile;
        $shareholder_info->email = $request->email;
        $shareholder_info->country_code      = $request->country_code;
        $shareholder_info->modified_by = 1;


        $shareholder_info->save();
        //echo "step2";
        $insert_id = $shareholder_info->id;
        if (!$insert_id) {
            Log::error('Failed to save personalinfo in pgsql. for ' . $request->business_info_id . ' ' . $request->lastname);

            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 201);
        }
        $req_id  =  $this->request_table($request);
        if (!empty($request->note_description) && !empty($req_id)) {
            $notes = $this->notes($request, $req_id);
        }

        $bus_parter_map->promoter_id = $insert_id;
        $bus_parter_map->business_id = $request->business_id;
        $bus_parter_map->share_percent = $request->share;
        $bus_parter_map->enable = 1;
        $bus_parter_map->is_active = 1;

        $bus_parter_map->created_by = 1;
        $bus_parter_map->save();
        //echo "step1";
        $data = $shareholder_info->getAttributes();
        $redis = $this->setReddis($data, 'shareholderinfo');
        if (!$redis) {
            Log::error('Failed to save in redis.' . $request->business_id);

            return response()->json([
                "message" => 'Failed to save in redis',
            ], 201);
        }

        $data['primary_id'] = $insert_id;
        if (isset($data['modified_by'])) {
            unset($data['modified_by']);
        }
        if ($request->promotor_id) {
            return response()->json([
                "status" => true,
                "message" => 'Successfuly Updated',
                "Data" => $data

            ], 201);
        } else {

            return response()->json([
                "status" => false,
                "message" => 'Successfuly inserted',
                "Data" => $data
            ], 201);
        }
    }



    function getBankingDetails(Request $request)
    {
        DB::enableQueryLog();
        $data = DB::table('banking_header AS bbf')
            ->join('master_table AS mt_nature_of_acc', 'mt_nature_of_acc.id', '=', 'bbf.nature_of_account')
            ->join('master_table AS mtbank', 'mtbank.id', '=', 'bbf.bank_id')
            ->where('bbf.parent_id', $request->parent_id)
            ->where('bbf.parent_type_id', $request->parent_type_id)
            ->select('bbf.*', 'mt_nature_of_acc.name AS nature_of_acc', 'mtbank.name AS bankname')
            ->get();

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
  $this->callLogFileStore($request->user_id, "Banking", "select", $query1[0]['query'], "banking_header","fetch");
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function getBusinessHeaderByAccountNo(Request $request)
    {
        if (Banking_header::where(['account_no' => $request->accountno])->count() > 0) {
            return response()->json([
                "status" => false,
                "message" => 'Account number already exists'
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'Account number does not exist'
            ], 201);
        }
    }

    function businessBankingInfo(Request $request)
    {
        DB::enableQueryLog();
        $bankinginfo = Banking_header::firstOrNew(['id' => $request->id]);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
		 $this->callLogFileStore($request->user_id, "Banking", "select", $query1[0]['query'], "banking_header","fetch");
        if ($bankinginfo->account_no != $request->accountno and $bankinginfo->bank_id != $request->bankname) {
            if (Banking_header::where(['account_no' => $request->accountno])->where(['bank_id' => $request->bankname])->count() > 0) {
                return response()->json([
                    "status" => false,
                    "message" => 'Already exist'
                ], 201);
            }
        }

        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }

        $bankinginfo->bank_id = $request->bankname;
        $bankinginfo->account_no = $request->accountno;
        $bankinginfo->nature_of_account = $request->natureacc;
        $bankinginfo->edc_pg_id = $request->edcOrPg;
        $bankinginfo->account_type = $request->accounttype;
        $bankinginfo->parent_type_id = $request->parent_type_id;
        $bankinginfo->parent_id = $request->parent_id;
        $bankinginfo->eligibility_flag = $request->eligibility_flag;

        if (Banking_header::where(['id' => $request->id])->count() > 0) {
            $bankinginfo->modified_on = now();
            if ($request->has('created_by')) {
                $bankinginfo->modified_by = $request->created_by;
            } else {
                $bankinginfo->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $bankinginfo->created_by = $request->created_by;
            } else {
                $bankinginfo->created_by = $request->user_id;
            }
            $bankinginfo->created_on = now();
            $bankinginfo->modified_on = now();
            $bankinginfo->modified_by = $request->created_by;
            $file_no = (string) Str::uuid();
            $bankinginfo->file_no = $file_no;


            $this->saveFileFolderMappingDetails('Bank', $file_no, $request->user_id);
        }
        $data = $bankinginfo->getAttributes();
        $redis = $this->setReddis($data, 'businessbankingInfo');
        if (!$redis) {
            Log::error('Failed to save in redis.' . $request->parent_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        $bankinginfo->save();
        $insert_id = $bankinginfo->id;


        if (!$insert_id) {
            Log::error('Failed to save bankinfo in pgsql. for ' . $request->parent_id . ' ' . $request->bankname);
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }

        DB::enableQueryLog();
        $query = 'select banking_header.id as id,banking_header.parent_type_id,banking_header.parent_id,banking_header.account_no,
                banking_header.bank_id,banking_header.account_type,bank.name as bank_name,master_table.name as account_type_name,banking_header.edc_pg_id,
                banking_header.nature_of_account from banking_header left join bank on bank.id = banking_header.bank_id
                left join master_table on master_table.id = banking_header.account_type::INTEGER
                where banking_header.is_active = 1 and banking_header.id = ' . $insert_id;

        $bankingHeaderDetails = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
 $this->callLogFileStore($request->user_id, "Banking", "select", $query1[0]['query'], "banking_header","Insert");
        $data['primary_id'] = $insert_id;
        if (isset($data['modified_by'])) {
            unset($data['modified_by']);
        }
        if ($request->id) {
            return response()->json([
                "status" => true,
                "message" => 'Banking details Updated Successfuly',
                "data" => $bankingHeaderDetails

            ], 201);
        } else {

            return response()->json([
                "status" => true,
                "message" => 'Banking details Saved Successfuly',
                "data" => $bankingHeaderDetails
            ], 201);
        }
    }

    
	//comma separation
	//DYNAMIC SAVE BANKING HEADER
    function saveBankingHeaderDetails(Request $request)
    {
        /*$generalSetting = GeneralSetting::where('parameter_name', 'Banking Month No')->get();
        $noOfMonth = $generalSetting[0]->parameter_value; */
        $calendarGrain = "Quater";
        if ($request->eligibilityFlag == 0) {
            $calendarGrain = 'Month';
            $generalSetting = GeneralSetting::select('parameter_value')->where('parameter_name', 'Banking Month No')->get();
            $noOfMonth = $generalSetting[0]->parameter_value;
            $calendarGrainData = $this->getLastMonthNameData($noOfMonth);
        }
        DB::enableQueryLog();
        $bankingHeader = DB::table('mstr_bank_detail_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

		$this->callLogFileStore($request->user_id, "Banking", "select", $query1[0]['query'], "mstr_bank_detail_parameter","Insert");
		$data['bankingHeader'] = $bankingHeader;
        foreach ($bankingHeader as $i => $i_value) {
            foreach ($request->headerDetails[$i_value->parameter_head] as $j => $j_value) {
                foreach ($calendarGrainData as $k => $k_value) {
                    $banking = BankingDetails::firstOrNew(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value['id'], 'calendar_id' => $k_value->id]);
                    $banking->bank_header_id = $request->headerId;
                    $banking->calendar_grain = $calendarGrain;
                    $banking->parameter_id = $j_value['id'];
                    $parameterValue = "month" . $j_value['id'] . $k_value->id;
                    //$banking->parameter_value = $j_value[$parameterValue];
                    if (array_key_exists($parameterValue, $j_value))
                        $banking->parameter_value = str_replace(',','',$j_value[$parameterValue]);
                    else
                        $banking->parameter_value = "";
                    $banking->calendar_id = $k_value->id;
                    if (BankingDetails::where(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value['id'], 'calendar_id' => $k_value->id])->count() > 0) {
                        $banking->modified_on = now();
                        if ($request->has('created_by')) {
                            $banking->modified_by = $request->created_by;
                        } else {
                            $banking->modified_by = $request->user_id;
                        }
                    } else {
                        if ($request->has('created_by')) {
                            $banking->created_by = $request->created_by;
                        } else {
                            $banking->created_by = $request->user_id;
                        }
                        $banking->created_on = now();
                        $banking->modified_on = now();
                        $banking->modified_by = $request->created_by;
                    }

                    $redis = $this->setReddis($data, 'Bankingdetails');
                    if (!$redis) {
                        Log::error('Failed to save  Banking details in redis.' . $banking->bank_header_id);
                        return response()->json([
                            "message" => 'Failed to save in redis',
                            "status" => false
                        ], 417);
                    }
                    $banking->save();
                    $insert_id = $banking->id;
                    if (!$insert_id) {
                        Log::error('Failed to save Banking details in pgsql. for ' . $banking->bank_header_id);
                        return response()->json([
                            "message" => 'Failed to save in pgsql',
                            "status" => false
                        ], 417);
                    }
                    if (isset($data['modified_by'])) {
                        unset($data['modified_by']);
                    }
                }
               
            }
        }
        return response()->json([
            "message" => 'Banking details Successfuly inserted',
            "status" => true
        ], 201);
    }

     // GET DETAILS BY HEADER ID.------> FOR MANUAL ENTRY GETTING DATA
    function getBankingDetailsByHeaderId(Request $request)
    {
        $calendarGrain = 'Month';
        DB::enableQueryLog();
        $generalSetting = GeneralSetting::select('parameter_value')->where('parameter_name', 'Banking Month No')->get();
        $noOfMonth = $generalSetting[0]->parameter_value;
        $calendarGrainData = $this->getLastMonthNameData($noOfMonth);
        $bankingHeader = DB::table('mstr_bank_detail_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();

        $query1 = DB::getQueryLog();
       // Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "Banking", "select", $query1[0]['query'], "mstr_bank_detail_parameter","fetch");
        $data['bankingHeader'] = $bankingHeader;
        foreach ($bankingHeader as $i => $i_value) {
            DB::enableQueryLog();
            $headerParameter = DB::table('mstr_bank_detail_parameter')->select('id', 'parameter_level_1', 'display_parameter_level_1','display_flag')->where('is_active', '=', 1)->where('parameter_head', '=', $i_value->parameter_head)->orderBy('parameter_level_1')->get();

            $query1 = DB::getQueryLog();
           // Log::info($query1[0]['query']);

            $this->callLogFileStore($request->user_id, "Banking", "select", $query1[0]['query'], "mstr_bank_detail_parameter","fetch");
            $monthDetailsDataArray = [];
            foreach ($headerParameter as $j => $j_value) {
                $monthDetailsData = '{"id" : ' . $j_value->id . ',"parameter_level_1" : "' . $j_value->parameter_level_1 . '","display_parameter_level_1" : "' . $j_value->display_parameter_level_1 . '","display_flag" : "' . $j_value->display_flag . '",';
                    //Log::info($monthDetailsData);
                    foreach ($calendarGrainData as $k => $k_value) {
                    $query = "select parameter_value from banking_details left join mstr_bank_detail_parameter on mstr_bank_detail_parameter.id = banking_details.parameter_id
                    where banking_details.bank_header_id = " . $request->headerId . " and banking_details.calendar_id = " . $k_value->id . "
                    and parameter_id = " . $j_value->id;

                    $detailsData = DB::select($query);
                    //Log::info($detailsData);
                    if (count($detailsData) > 0)
                        if ($detailsData[0]->parameter_value != null)
                            $monthDetailsData .= '"month' . $j_value->id . $k_value->id . '" : "' . $detailsData[0]->parameter_value . '",';
                        else
                            $monthDetailsData .= '"month' . $j_value->id . $k_value->id . '" : "",';
                    else
                        $monthDetailsData .= '"month' . $j_value->id . $k_value->id . '" : "",';
                }

                $monthDetailsData = rtrim($monthDetailsData, ',');
                $monthDetailsData .= '}';
                //$monthDetailsData = rtrim($monthDetailsData, ',');
                Log::info($monthDetailsData);
               
                $monthDetailsDataArray[$j] = json_decode($monthDetailsData);

            }
           //Log::info($monthDetailsDataArray);
            $data[$i_value->parameter_head] = $monthDetailsDataArray;
        }

        if (!$bankingHeader->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
            "status" => false
        ], 201);
    }



    function getAllState(Request $request)
    {
        if ($request->has('enable')) {
            $data = State::select('id', 'state_id', 'state_name', 'enable')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('state_id')->get();
        } else {
            $data = State::select('id', 'state_id', 'state_name', 'enable')->where('is_active', '=', 1)->orderBy('state_id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function getAllStateBygstTinId(Request $request)
    {
        $data = State::select('state_id', 'state_name')
            ->where('is_active', '=', 1)
            ->where('enable', '=', 1)
            ->where('state_id', '=', $request->gst_id)
            ->orderBy('state_name')
            ->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function getAllStateById(Request $request)
    {
        $data = State::select('state_name')
            ->where('is_active', '=', 1)
            ->where('enable', '=', 1)
            ->where('state_id', '=', $request->state_id)
            ->orderBy('state_name')
            ->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    // function getAllPromotorInfos(Request $request) {
    //     $data = DB::table('promoter_info')->skip($request->startlimit)->take($request->endlimit)->orderBy('name')->get();
    //     if(!$data->isEmpty()) {
    //         return response()->json([
    //             "message" => 'Data fetched successfully',
    //             "data"    => $data
    //         ], 201);
    //     }
    //     return response()->json([
    //         "message" => 'Data not available',
    //     ], 403);

    // }

    function getfinanceDetailsbybusinessid(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('finance_details')->where('bus_id', $request->business_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $data = DB::table('finance_details')->where('bus_id', $request->business_id)->where('is_active', '=', 1)->get();
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function updateFinanceManually(Request $request)
    {
        $finance_header = Finance_header::firstOrNew(['bus_id' => $request->business_id]);
        $finance_header->data_submit_type = $request->data_submit_type;
        $finance_header->parent_type_id = $request->parent_type_id;
        $finance_header->bus_id = $request->business_id;
        $finance_header->parent_id = $request->parent_id;
        $finance_header->enable = 1;
        $finance_header->is_active = 1;
        if (Finance_header::where('bus_id', '=', $request->business_id)->count() > 0) {
            $finance_header->modified_on = now();
            $finance_header->modified_by = 1;
        } else {
            $finance_header->created_by = 1;
            $finance_header->created_on = now();
        }

        $finance_header->record_status = $request->status;

        $finance_header->save();

        $insert_header_id = $finance_header->id;
        if (!$insert_header_id) {
            Log::error('Failed to save finance header in pgsql. for ' . $request->business_id . ' ' . $request->finance_parameter_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $req_id  =  $this->request_table($request);
        if (!empty($request->note_description) && !empty($req_id)) {
            $notes = $this->notes($request, $req_id);
        }
        foreach ($request->finance_parameter_id as $key => $rows) :
            // static
            $finance = Finance_data::firstOrNew(['mstr_finance_parameter_id' => $rows, 'bus_id' => $request->business_id]);

            $finance->bus_id = $request->business_id;
            $finance->finance_header_id = $insert_header_id;
            $finance->full_flag = $request->full_flag;
            $finance->mstr_finance_parameter_id = $rows;
            if (isset($request->Value[$key])) {
                $finance->value = $request->Value[$key];
            }
            if (isset($request->Year[$key])) {
                $finance->year = $request->Year[$key];
            }
            // static
            if (Finance_data::where('bus_id', '=', $request->business_id)->where('bus_id', '=', $request->business_id)->count() > 0) {
                $finance->modified_on = now();
                $finance->modified_by = 1;
            } else {
                $finance->created_by = 1;
                $finance->created_on = now();
            }
            $data = $finance->getAttributes();
            $redis = $this->setReddis($data, 'businessfinanceInfo');
            if (!$redis) {
                Log::error('Failed to save in redis finance.' . $rows->business_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            $finance->save();
            $insert_id = $finance->id;

            if (!$insert_id) {
                Log::error('Failed to save finance in pgsql. for ' . $request->business_id . ' ' . $request->finance_parameter_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }
            if (isset($data['modified_by'])) {
                unset($data['modified_by']);
            }
            $data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
        endforeach;
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $res_data
        ], 201);
    }
    public function getAllassetcategory(Request $request)
    {
        if ($request->has('enable')) {
            $getassetcategory =  AssetCategory::where('is_active', '=', true)->where('enable', '=', $request->enable)->get();
        } else {
            $getassetcategory =  AssetCategory::where('is_active', '=', true)->get();
        }
        if (count($getassetcategory) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getassetcategory
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    function loanForBusiness(Request $request)
    {
       
				        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }

        DB::enableQueryLog();
        $loan = Loan::firstOrNew(['id' => $request->loan_id]);

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "Loan", "select", $query1[0]['query'], "loan","Insert");
        $loan->parent_type_id = $request->parent_type_id;
        $loan->parent_id = $request->parent_id;
        $loan->Financer_id = $request->financer;
        $loan->Loan_type_id = $request->l_type;
        $loan->Loan_amount = $request->l_amount;
        $loan->Original_tenure_id = $request->l_tenture;
        $loan->EMI = $request->emi;
        $loan->Loan_still_open = $request->l_open;
        $loan->EMI_start_date = $request->emi_date;
        $loan->No_of_emi = $request->no_emi;
        $loan->Account_no = $request->acc_no;
        $loan->Remaining_emi = $request->rem_emi;
        $loan->Record_status = $request->status;
        $loan->emi_bounce_in_3_months = $request->emi_bounce_in_3_months;
        $loan->emi_bounce_in_6_months = $request->emi_bounce_in_6_months;
        $loan->obligation_considered = $request->obligation_considered;
        $loan->obligation_considered_less_than_12m = $request->obligation_considered_less_than_12m;
        $loan->obligation_considered_greater_than_12m = $request->obligation_considered_greater_than_12m;
        $loan->obligation_considered_greater_than_6m = $request->obligation_considered_greater_than_6m;
        // $loan->no_of_emi_bounced_3m = $request->no_of_emi_bounced_3m;
        // $loan->no_of_emi_bounced_6m = $request->no_of_emi_bounced_6m;
        $loan->Eligibility_flag = $request->Eligibility_flag;
        $loan->data_submit_type = 1;
		$loan->bank_id = $request->bank_id;
        $loan->bank_account_no = $request->bank_account_no;

        // echo $loan;exit;
        $data = $loan->getAttributes();
        $redis = $this->setReddis($data, 'businessLoanInfo');
        if (!$redis) {
            Log::error('Failed to save in redis loanforbusiness.' . $request->financer);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (Loan::where('id', '=', $request->loan_id)->count() > 0) {
            $loan->modified_on = now();
            if ($request->has('created_by')) {
                $loan->modified_by = $request->created_by;
            } else {
                $loan->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $loan->created_by = $request->created_by;
            } else {
                $loan->created_by = $request->user_id;
            }
            $loan->created_on = now();
            $loan->modified_on = now();
            $loan->modified_by = $request->created_by;
            $file_no = (string) Str::uuid();
            $loan->file_no = $file_no;

            $this->saveFileFolderMappingDetails('Loans', $file_no, $request->user_id);
        }
        $loan->save();
        $insert_id = $loan->id;



        if (!$insert_id) {
            Log::error('Failed to save loan in pgsql. for ' . $request->business_id . ' ' . $request->financer);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        // $req_id  =  $this->request_table($request);
        // if (!empty($request->note_description) && !empty($req_id)) {
        //     $notes = $this->notes($request, $req_id);
        // }
        $data['primary_id'] = $insert_id;

        if ($request->loan_id) {
            return response()->json([
                "status" => true,
                "message" => 'Loan Information Updated Successfuly',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'Loan Information inserted Successfuly',
                "Data" => $data
            ], 201);
        }
    }

    function workingCaptial(Request $request)
    {

        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }

        DB::enableQueryLog();
        $capital = WorkingCaptial::firstOrNew(['id' => $request->id]);

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "Working Capital", "select", $query1[0]['query'], "working_capital","Insert");
        $capital->parent_type_id = $request->parent_type_id;
        $capital->parent_id = $request->parent_id;
        $capital->type_id = $request->type;
        $capital->credit_limit = $request->creditlimit;
        $capital->bank_id = $request->bank_id;
        $capital->rate_of_interest = $request->rate_of_intrest;
        $capital->comments = $request->comments;
        $capital->last_sanction = $request->last_sanction;
        $capital->eligibility_flag = $request->eligibility_flag;
        if (WorkingCaptial::where('id', $request->id)->count() > 0) {
            $capital->modified_on = now();
            if ($request->has('created_by')) {
                $capital->modified_by = $request->created_by;
            } else {
                $capital->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $capital->created_by = $request->created_by;
            } else {
                $capital->created_by = $request->user_id;
            }
            $capital->created_on = now();
            $capital->modified_on = now();
            $capital->modified_by = $request->created_by;
            $file_no = (string) Str::uuid();
            $capital->file_no = $file_no;


            $this->saveFileFolderMappingDetails('Working Capital', $file_no, $request->user_id);
        }
        $capital->save();
        $insert_id = $capital->id;



        $data = $capital->getAttributes();
        $redis = $this->setReddis($data, 'businessWorkingCaptial');
        if (!$redis) {
            Log::error('Failed to save in redisworking_capital_id.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
                "status" => false
            ], 417);
        }

        if (!$insert_id) {
            //Log::error('Failed to save workingcapital in pgsql. for ' . $request->business_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in pgsql',
                "status" => false
            ], 417);
        }
        $data['working_capital_id'] = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'Working Capital Updated Successfuly',
                "status" => true,
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "message" => 'Working Capital Inserted Successfuly',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }
    function getbusinessgstbyid(Request $request)
    {
        if ($request->has('enable')) {
            $gst = GSTHeader::where('id', $request->business_gst_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $gst = GSTHeader::where('id', $request->business_gst_id)->where('is_active', '=', 1)->get();
        }
        if (!$gst->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $gst
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function getAllbusinessgst(Request $request)
    {

        if ($request->has('enable')) {
            $data = DB::table('gst_header')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $data = DB::table('gst_header')->where('is_active', '=', 1)->get();
        }

        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function getWorkingCapitalDetailsbyid(Request $request)
    {
        if ($request->has('enable')) {
            $working = WorkingCaptial::where('id', $request->id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->first();
        } else {
            $working = WorkingCaptial::where('id', $request->id)->where('is_active', '=', 1)->first();
        }
        if (!empty($working)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $working
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function getWorkingCapitalDetailsbyrowid(Request $request)
    {
        $data = WorkingCaptial::where('id', $request->row_id)->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }


    function businessgst(Request $request)
    {
        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }

        DB::enableQueryLog();
        $gst = GSTHeader::firstOrNew(['id' => $request->id]);

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "GST", "select", $query1[0]['query'], "gst_header","Insert");
        if ($gst->gst_no != $request->gst_in) {
            if (GSTHeader::where(['gst_no' => $request->gst_in])->count() > 0) {
                return response()->json([
                    "status" => false,
                    "message" => 'GST Number already exist'
                ], 201);
            }
        }
        $gst->parent_type_id = $request->parent_type_id;
        $gst->parent_id = $request->parent_id;
        $gst->gst_no = $request->gst_in;
        $gst->state_id = $request->state;
        $gst->eligibility_flag = $request->eligibility_flag;
		$gst->data_submit_type = 1;
        if (GSTHeader::where('id', '=', $request->id)->count() > 0) {
            $gst->modified_on = now();
            if ($request->has('created_by')) {
                $gst->modified_by = $request->created_by;
            } else {
                $gst->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $gst->created_by = $request->created_by;
            } else {
                $gst->created_by = $request->user_id;
            }
            $gst->created_on = now();
            $gst->modified_on = now();
            $gst->modified_by =  $request->created_by;
            $file_no = (string) Str::uuid();
            $gst->file_no = $file_no;


            $this->saveFileFolderMappingDetails('GST', $file_no, $request->user_id);
        }
        $data = $gst->getAttributes();
        $redis = $this->setReddis($data, 'businessGst');
        if (!$redis) {
            Log::error('Failed to save in redis businessgst.' . $request->parent_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in redis',
            ], 417);
        }
        $gst->save();
        $insert_id = $gst->id;



        if (!$insert_id) {
            Log::error('Failed to save businessGst in pgsql. for ' . $request->parent_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['primary_id'] = $insert_id;

        if ($request->id) {
            return response()->json([
                "status" => true,
                "message" => 'GST Updated Successfuly',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'GST Inserted Successfuly',
                "Data" => $data
            ], 201);
        }
    }


 function assets(Request $request)
    {

        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }

        DB::enableQueryLog();
        $assetheaders = AssetHeader::firstOrNew(['id' => $request->assets_id]);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Assets", "select", $query1[0]['query'], "asset_headers","Insert");

        DB::enableQueryLog();
        $assetdetails = AssetDetails::firstOrNew(['asset_header_id' => $request->assets_id]);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Assets", "select", $query1[0]['query'], "asset_details","Insert");

        $assetheaders->asset_type_id         = $request->asset_type_id;
        $assetheaders->asset_sub_type_id       = $request->asset_sub_type_id;
        $assetheaders->parent_type_id       = $request->parent_type_id;
        $assetheaders->parent_id       = $request->parent_id;
        $assetheaders->asset_name       = $request->asset_name;
        $assetheaders->eligibility_flag       = $request->eligibility_flag;
        $assetdetails->purpose_id = $request->purpose_id;
        $assetdetails->category_id   = $request->category_id;
        $assetdetails->pin_id    = $request->pin_id;
        $assetdetails->value      = $request->value;
        $assetdetails->insurance      = $request->insurance;
        $assetdetails->vehicle_no      = $request->vehicle_no;
        $assetdetails->door_site_no      = $request->door_site_no;
        $assetdetails->usage_type_id      = $request->usage_type_id;
        $assetdetails->size_of_plot_carpet      = $request->size_of_plot_carpet;
        $assetdetails->no_of_units_floor      = $request->no_of_units_floor;
        $assetdetails->measure_facing_road_id      = $request->measure_facing_road_id;
        $assetdetails->age_of_construction      = $request->age_of_construction;
        $assetdetails->total_no_of_floors      = $request->total_no_of_floors;
        $assetdetails->converted      = $request->converted;
        $assetdetails->type_of_floor_id      = $request->type_of_floor_id;
        // echo $assetheaders;exit;

        // static

        if (AssetHeader::where(['id' => $request->assets_id])->count() > 0) {
            $assetheaders->modified_on = now();
            if ($request->has('created_by')) {
                $assetheaders->modified_by = $request->created_by;
            } else {
                $assetheaders->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $assetheaders->created_by = $request->created_by;
            } else {
                $assetheaders->created_by = $request->user_id;
            }
            $assetheaders->created_on = now();
            $assetheaders->modified_on = now();
            $assetheaders->modified_by =  $request->created_by;
            $file_no = (string) Str::uuid();
            $assetheaders->file_no = $file_no;


            $this->saveFileFolderMappingDetails('Assets', $file_no, $request->user_id);
        }
        $data['assetHeader'] = $assetheaders->getAttributes();
        $assetheaders->save();
        //echo $assetheaders;
        $assetdetails->asset_header_id = $assetheaders->id;
        if (AssetDetails::where('asset_header_id', '=', $assetdetails->asset_header_id)->count() > 0) {
            $assetdetails->modified_on = now();
            if ($request->has('created_by')) {
                $assetdetails->modified_by = $request->created_by;
            } else {
                $assetdetails->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $assetdetails->created_by = $request->created_by;
            } else {
                $assetdetails->created_by = $request->user_id;
            }
            $assetdetails->created_on = now();
            $assetdetails->modified_on = now();
            $assetdetails->modified_by = $request->created_by;
        }

        $data['assetDetails'] = $assetdetails->getAttributes();
        $redis = $this->setReddis($data, 'businessAsset');
        if (!$redis) {
            Log::error('Failed to save in redis asset.' . $request->file_no);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }

        $assetdetails->save();
        $insert_id = $assetheaders->id;



        if (!$insert_id) {
            Log::error('Failed to save Asset in pgsql. for ' . $request->file_no);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['primary_id'] = $insert_id;
        if ($request->assets_id) {
            return response()->json([
                "status" => true,
                "message" => 'Assets Updated Successfuly',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'Assets Inserted Successfuly',
                "Data" => $data
            ], 201);
        }
    }


    function getAssetdetailsbyId(Request $request)
    {

        DB::enableQueryLog();
        $query = 'select asset_details.*,asset_headers.id as asset_header_id,asset_headers.file_no as file_no,asset_headers.parent_type_id as parent_type_id,
        asset_headers.parent_id as parent_id,asset_headers.asset_type_id,asset_headers.asset_sub_type_id,asset_headers.Asset_name,
        pin_master.area as area, pin_master.city_id as city_id, pin_master.state_id as state_id,state_master.state_name as state_name,
        city_master.city as city,pin_master.pincode as pincode
        from 	asset_details
        left join asset_headers on asset_headers.id = asset_details.asset_header_id
        left join pin_codes as pin_master on pin_master.id = asset_details.pin_id
        left join states as state_master on state_master.id = pin_master.state_id
        left join city as city_master on city_master.id = pin_master.city_id
        where asset_headers.id = ' . $request->assets_id;
        $prodata = DB::select($query);

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "Assets", "select", $query1[0]['query'], "asset_details","fetch");

        if (count($prodata) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $prodata
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }



    function getAssetdetailsbyParentIdAndType(Request $request)
    {
        $query = 'select asset_details.*,asset_headers.id as asset_header_id,asset_headers.file_no as file_no,asset_headers.parent_type_id as parent_type_id,
        asset_headers.parent_id as parent_id,asset_headers.asset_type_id,asset_headers.asset_sub_type_id,asset_headers.Asset_name,
        master_table.name as purpose_name,cat_master.name as category_name,usage_master.name as usage_type_name,measure_master.name as measure_facing_road_name,
        floor_master.name as type_of_floor_name,assettype_master.name as asset_type_name,assetsubtype_master.name as asset_sub_type_name,
        pin_master.area as area, pin_master.city_id as city_id, pin_master.state_id as state_id,state_master.state_name as state_name,
        city_master.city as city, pin_master.pincode as pincode
        from 	asset_details
        left join asset_headers on asset_headers.id = asset_details.asset_header_id
        left join master_table on master_table.id = asset_details.purpose_id
        left join master_table as cat_master on cat_master.id = asset_details.category_id
        left join master_table as usage_master on usage_master.id = asset_details.usage_type_id
        left join master_table as measure_master on measure_master.id = asset_details.measure_facing_road_id
        left join master_table as floor_master on floor_master.id = asset_details.type_of_floor_id
        left join master_table as assettype_master on assettype_master.id = asset_headers.asset_type_id
        left join master_table as assetsubtype_master on assetsubtype_master.id = asset_headers.asset_sub_type_id
        left join pin_codes as pin_master on pin_master.id = asset_details.pin_id
        left join states as state_master on state_master.id = pin_master.state_id
        left join city as city_master on city_master.id = pin_master.city_id
        where asset_headers.parent_id = ' . $request->parent_id . ' and asset_headers.parent_type_id = ' . $request->parent_type_id . 'order by asset_details.id';
        DB::enableQueryLog();
        $data = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore(1, "Asset", "Select", $query1[0]['query'], "asset_details","fetch");

        // $this->calltoLogErrorStore(1,"Asset","No records found","http://164.52.208.120:8082/delta/server.php/api/getAssetdetailsbyParentIdAndType",
        // "post","{'parent_id':$request->parent_id ,'parent_type_id':$request->parent_type_id }");
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            //Log::error('No records found');
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }



    function getAssetsDetails(Request $request)
    {

        if ($request->has('enable')) {

            $data = Asset::where('b_id', $request->business_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $data = Asset::where('b_id', $request->business_id)->where('is_active', '=', 1)->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function getAssetsDetailsbyRowid(Request $request)
    {
        $data = Asset::where('id', $request->row_id)->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

	//promoter is also saving in user table. user promoter mapping id done here 18-05-2021
    function addpromotorinfo(Request $request)
    {
        $parent_type = "Promoter";
        $master_type = "parent_type";
        $data1 = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

		DB::enableQueryLog();
        $promotor = Promotorinfo::firstOrNew(['id' => $request->promotor_id]);
		$query1 = DB::getQueryLog();
		Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id,"Promotor","Select",$query1[0]['query'],"promoter_info","Insert");
		
        $promotor->first_name = $request->first_name;
        $promotor->middle_name = $request->middlename;
        $promotor->last_name = $request->last_name;
        $promotor->PAN = $request->PAN;
        $promotor->panname = $request->panname;
        $promotor->dob = $request->dob;
        $promotor->type = $request->type;
        $promotor->nationality_id = $request->nationality_id;
        //$promotor->mobile = $request->Mobile;
        //$promotor->email = $request->email;
        $promotor->gender_id = $request->gender_id;
        $promotor->edu_qual_id = $request->edu_qual_id;
        $promotor->father_name = $request->father_name;
        $promotor->mother_name = $request->mother_name;
        $promotor->spouse_name = $request->spouse_name;
        $promotor->grc_no = $request->grc_no;
        $promotor->grc_type_id = $request->grc_type_id;
        $promotor->add_proof_id = $request->add_proof_id;
        $promotor->country_code = $request->country_code;
        $promotor->eligibility_flag = $request->eligibility_flag;
		$promotor->director = $request->director;
		$promotor->user_id = $request->user_id;
		$promotor->property_id = $request->property_id;

        if (Promotorinfo::where(['id' => $request->promotor_id])->count() > 0) {
            $promotor->modified_by = $request->user_id;
            $promotor->modified_on = now();
        } else {
            $promotor->created_by = $request->user_id ;
            $promotor->created_on = now();
            $promotor->modified_by = $request->user_id;
            $promotor->modified_on = now();
            $file_no = (string) Str::uuid();
            $promotor->file_no = $file_no;
            $this->saveFileFolderMappingDetails('Promoter',$file_no,$request->user_id);
        }
        $data = $promotor->getAttributes();
        $redis = $this->setReddis($data, 'promotorinfo');
        if (!$redis) {
            Log::error('Failed to save promotor in redis.' . $request->firstname);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" =>false,
                "message" => 'Failed to save in redis',
            ], 201);
        }
		DB::enableQueryLog();
        $promotor->save();
		$query1 = DB::getQueryLog();
		Log::info($query1[0]['query']);
		$this->callLogFileStore($request->user_id,"Promotor","Insert",$query1[0]['query'],"promoter_info","Insert");
        $insert_id = $promotor->id;
    
        //Communication Address Save
        $address = Comm_address::firstOrNew(['parent_id' => $request->promotor_id, 'parent_type_id' => $data1[0]->id]);
        $address->add_line_1 = $request->add_line_1;
        $address->add_line_2 = $request->add_line_2;
        $address->pin_id = $request->pin_id;
        $address->landmark = $request->landmark;
        $address->parent_id = $request->promotor_id;
        $address->parent_type_id = 2;
        if (Comm_address::where(['parent_id' => $request->promotor_id, 'parent_type_id' => $data1[0]->id])->count() > 0) {
            $address->modified_on = now();
            $address->modified_by = $request->user_id;
        } else {
            $address->created_by = $request->user_id;
            $address->created_on = now();
            $address->modified_on = now();
            $address->modified_by = $request->user_id;
        }
        $address->save();

        //Business promoter mapping
        $bus_parter_map = Business_promoter_mapping::firstOrNew(['business_id' => $request->bus_id, 'promoter_id' => $request->promotor_id]);
        $bus_parter_map->promoter_id = $insert_id;
        $bus_parter_map->business_id = $request->bus_id;
        $bus_parter_map->share_percent = $request->share;
        $bus_parter_map->enable = 1;
        $bus_parter_map->is_active = 1;

        if (Business_promoter_mapping::where(['business_id' => $request->bus_id, 'promoter_id' => $request->promotor_id])->count() > 0) {
            $bus_parter_map->modified_by = $request->user_id;
            $bus_parter_map->modified_on = now();
        } else {
            $bus_parter_map->created_by = 0;
            $bus_parter_map->created_on = now();
            $bus_parter_map->modified_by = $request->user_id;
            $bus_parter_map->modified_on = now();
        }
        $bus_parter_map->save();

        //Communication Phone and Email table data save
        if ($request->promotor_id == 0 || $request->promotor_id == '') {

            $contactType = $this->getMasterTableIdUsingMasterTypeAndName('Email','contact_type');
        
            $contactTypeMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile','contact_type');

            $comm_phone_email = Comm_phone_email::firstOrNew(['parent_id' => $request->promotor_id, 'parent_type_id' => $data1[0]->id]);
            $comm_phone_email->contact_type = $contactType;
            $comm_phone_email->contact_value = $request->email;
            $comm_phone_email->parent_type_id = $data1[0]->id;
            $comm_phone_email->parent_id = $insert_id;
            $comm_phone_email->dnd_flag = true;
            $comm_phone_email->enable = 1;
            $comm_phone_email->is_active = 1;
            $comm_phone_email->created_by = $request->user_id;
            $comm_phone_email->created_on = now();
            $comm_phone_email->modified_by = $request->user_id;
            $comm_phone_email->modified_on = now();
            //Log::info("data" . $comm_phone_email);
            $comm_phone_email->save();

            $comm_phone_email1 = Comm_phone_email::firstOrNew(['parent_id' => $request->promotor_id, 'parent_type_id' => $data1[0]->id]);
            $comm_phone_email1->contact_type = $contactTypeMob;
            $comm_phone_email1->contact_value = $request->Mobile;
            $comm_phone_email1->parent_type_id = $data1[0]->id;
            $comm_phone_email1->parent_id = $insert_id;
            $comm_phone_email1->dnd_flag = true;
            $comm_phone_email1->enable = 1;
            $comm_phone_email1->is_active = 1;
            $comm_phone_email1->created_by = $request->user_id;
            $comm_phone_email1->created_on = now();
            $comm_phone_email->modified_by = $request->user_id;
            $comm_phone_email->modified_on = now();
            $comm_phone_email1->save();
        }


        //Call rest api to store credential in user table
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/saveUser', [
            'pan' => $request->PAN,
            'email' => $request->email,
            'mobile' => $request->Mobile,
            'country_code' => $request->country_code
        ]);

        $data['promoter'] = $promotor;
        /* $data['address'] = $address;
        $data['communicationEmail'] = $comm_phone_email;
        $data['communicationPhone'] = $comm_phone_email1;
        $data['businessPartnerMapping'] = $bus_parter_map; */

        // if ($insert_id > 0) {
        //     return response()->json([
        //         "message" => 'Successfuly inserted the data',
        //         "status" => true,
        //         "Data" => $data
        //     ], 201);
        // } else {
        //     return response()->json([
        //         "message" => 'Error in promoter save',
        //         "status" => false,
        //         "Data" => $data
        //     ], 201);
        // }

        if ($request->promotor_id) {
            return response()->json([
                "message" => 'Promoter Information Updated Successfuly',
                "status" =>true,
                "Data" => $data

            ], 201);
        }else{
            return response()->json([
                "message" => 'Promoter Information Inserted Successfuly',
                "status" =>true,
                "Data" => $data

            ], 201); 
        }
    }

    function getFinanceParameterDetails(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('mstr_finance_parameter')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->where('year', '=', $request->year)->orderBy('sort_order')->get();
        } else {
            $data = DB::table('mstr_finance_parameter')->where('is_active', '=', 1)->orderBy('sort_order')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function getLoanDetails(Request $request)
    {
        $query = 'select loan.*, bank.name as financer_name,loan_types.name as loan_types,tenure_table.name as original_tenure_name,bank_master.name as bank_name
        from loan
        left join bank on bank.id  = loan."Financer_id"
        left join loan_types as loan_types on loan_types.id = loan. "Loan_type_id"
        left join master_table as tenure_table on tenure_table.id = loan."Original_tenure_id"
		left join bank as bank_master on bank_master.id = loan.bank_id
        where loan.parent_type_id = ' . $request->parent_type_id . ' and loan.parent_id = ' . $request->parent_id . 'order by loan.id';
        $data = DB::select($query);

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }


    function getLoanRowDetailsByloanid(Request $request)
    {
        $loan = Loan::where('id', $request->row_id)->get();
        if (!$loan->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $loan
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getAllLoans(Request $request)
    {

        if ($request->has('enable')) {
            $getloan =  Loan::where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $getloan =  Loan::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (count($getloan) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getloan
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    function getGstHeaderDetails(Request $request)
    {
        $gstHeader = GSTHeader::where('b_id', $request->business_id)->get();
        if (!$gstHeader->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $gstHeader
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }
    function getGstHeaderDetailsbyid(Request $request)
    {
        $gstHeader = GSTHeader::where('id', $request->header_id)->get();
        if (!$gstHeader->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $gstHeader
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function addGstDetails(Request $request)
    {

        foreach ($request->Calendar_grain as $key => $rows) :
            $gst = GstDetails::firstOrNew(['gst_header_id' => $request->GST_header_id, 'calendar_grain' => $rows]);
            $gst->gst_header_id         = $request->GST_header_id;
            $gst->calendar_grain       = $rows;
            if (isset($request->GST_turnover_3b[$key])) {
                $gst->gst_turnover_3b   = $request->GST_turnover_3b[$key];
            }
            if (isset($request->GST_paid_3b[$key])) {
                $gst->gst_paid_3b   = $request->GST_paid_3b[$key];
            }
            // static
            if (GstDetails::where(['gst_header_id' => $request->GST_header_id, 'calendar_grain' => $rows])->count() > 0) {
                $gst->modified_on = now();
                $gst->modified_by = 1;
            } else {
                $gst->created_by = 1;
                $gst->created_on = now();
            }
            $data = $gst->getAttributes();
            $redis = $this->setReddis($data, 'gstdetails');
            if (!$redis) {
                Log::error('Failed to save  gst details in redis.' . $rows->GST_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            $gst->save();
            $insert_id = $gst->id;
            if (!$insert_id) {
                Log::error('Failed to save gst details in pgsql. for ' . $rows->GST_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }
            $data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
        endforeach;
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $res_data
        ], 201);
    }

    function getGstDetailsByidV1(Request $request)
    {
        // if ($request->has('enable')) {
        //     $gstHeader = GstDetails::select('calendar_grain','gst_turnover_3b','gst_paid_3b','calendar_id')->where('gst_header_id', $request->GST_header_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        // } else {
        //     $gstHeader = GstDetails::select('calendar_grain','gst_turnover_3b','gst_paid_3b','calendar_id')->where('gst_header_id', $request->GST_header_id)->where('is_active', '=', 1)->orderBy('id')->get();
        // }

        $query = 'select gst_detail.calendar_grain, gst_detail.gst_turnover_3b, gst_detail.gst_paid_3b,
                gst_detail.calendar_id,gst_header.eligibility_flag as eligibility_flag
                from gst_detail
                left join gst_header on gst_header.id  = gst_detail.gst_header_id
                where gst_detail.gst_header_id = ' . $request->GST_header_id;

        $data = DB::select($query);


        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    //COMMENT ON 12-02-2021
    /* function getGstDetailsByid(Request $request)
    {
        $totalMonth = $this->getMonthNumber();
        if ($request->eligibility_flag == 0) {
            $calendarData = $this->getLastMonthNameData($totalMonth);
        } else {
            $calendarData = $this->getLastQuarterNameData($totalMonth);
        }
        $detailsDataArray = [];
        foreach ($calendarData as $i => $i_value) {
            $query = 'select * from gst_detail where gst_header_id = ' . $request->GST_header_id . 'and calendar_id =' . $i_value->id;
            $detailsData = DB::select($query);
            $jsonObject = '{ "parameter":"' . $i_value->label . '","calendar_grain":"' . $i_value->grain . '",
                "calendar_id":' . $i_value->id . ',"gst_turnover_3b":"","gst_paid_3b":""}';
            if (count($detailsData) > 0) {
                $jsonObject = '{ "parameter":"' . $i_value->label . '","calendar_grain":"' . $detailsData[0]->calendar_grain . '",
                    "calendar_id":' . $detailsData[0]->calendar_id . ',"gst_turnover_3b":' . $detailsData[0]->gst_turnover_3b . ',"gst_paid_3b":' . $detailsData[0]->gst_paid_3b . '}';
            }
            $detailsDataArray[$i] = json_decode($jsonObject);
        }

        if (count($detailsDataArray) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $detailsDataArray
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    } */

    //GET GST DETAILS BY ID
  /*  function getGstDetailsByid(Request $request)
    {
        $totalMonth = $this->getMonthNumber();
		Log::info($totalMonth);
		Log::info($request->eligibility_flag);
        if ($request->eligibility_flag == 0) {
            $calendarData = $this->getLastMonthNameData($totalMonth);
        } else {
            $calendarData = $this->getLastQuarterNameData($totalMonth);
        }
		Log::info($calendarData);
				 $headerData = DB::select('select data_submit_type from gst_header where id = ' . $request->GST_header_id);
				Log::info($headerData); 
        $detailsDataArray = [];
        foreach ($calendarData as $i => $i_value) {
            $query = 'select * from gst_detail where gst_header_id = ' . $request->GST_header_id . 'and calendar_id =' . $i_value->id;
            $detailsData = DB::select($query);
            $jsonObject = '{ "parameter":"' . $i_value->label . '","calendar_grain":"' . $i_value->grain . '",
                "calendar_id":' . $i_value->id . ',"gst_turnover_3b":"","gst_paid_3b":""}';
            if (count($detailsData) > 0) {
                $jsonObject = '{ "parameter":"' . $i_value->label . '","calendar_grain":"' . $detailsData[0]->calendar_grain . '",
                    "calendar_id":' . $detailsData[0]->calendar_id . ',"gst_turnover_3b":' . $detailsData[0]->gst_turnover_3b . ',"gst_paid_3b":' . $detailsData[0]->gst_paid_3b . '}';
            }  
						
						
            $detailsDataArray[$i] = json_decode($jsonObject);
        }

        if (count($detailsDataArray) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $detailsDataArray
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
*/
 //GET GST DETAILS BY ID
     function getGstDetailsByid(Request $request)
     {
        // $totalMonth = $this->getMonthNumber();
         $totalMonth=12;
        Log::info($totalMonth);
		 //Log::info($totalMonth);
         //Log::info($request->eligibility_flag);
         if ($request->eligibility_flag == 0) {
             $calendarData = $this->getLastMonthNamedetail($totalMonth);
         } else {
             $calendarData = $this->getLastQuarterNameData($totalMonth);
         }
         //Log::info($calendarData);
                  $headerData = DB::select('select data_submit_type from gst_header where id = ' . $request->GST_header_id);
                 //Log::info($headerData); 
         $detailsDataArray = [];
         foreach ($calendarData as $i => $i_value) {
             $query = 'select * from gst_detail where gst_header_id = ' . $request->GST_header_id . ' and calendar_id =' . $i_value->id;
			 Log::info($query );
             $detailsData = DB::select($query);
            /* $jsonObject = '{ "parameter":"' . $i_value->label . '","calendar_grain":"' . $i_value->grain . '",
                 "calendar_id":' . $i_value->id . ',"gst_turnover_3b":"","gst_paid_3b":""}';*/
             if (empty($detailsData)) {
                 //$jsonObject = '{ "parameter":"' . $i_value->label . '","calendar_grain":"","calendar_id":"" ,"gst_turnover_3b":"","gst_paid_3b":""}';
                 $detailsDataArray[$i] = [
                     "parameter" => $i_value->label,
                     "calendar_grain" => "",
                     "calendar_id"=>$i_value->id,
                     "gst_turnover_3b" => "",
                     "gst_paid_3b" => ""	
                 ];
             } elseif (!empty($detailsData)) {
         //Log::info("not empty");
         //Log:info(print_r($detailsData[0], true));
                 
               /*jsonObject='{ "parameter":"' . $i_value->label . '","calendar_grain":"' . $detailsData[0]->calendar_grain . '",
                     "calendar_id":' . $detailsData[0]->calendar_id . ',"gst_turnover_3b":' . $detailsData[0]->gst_turnover_3b . ',"gst_paid_3b":' . $detailsData[0]->gst_paid_3b . '}';*/
                 
                 $detailsDataArray[$i] = [
                     "parameter" => $i_value->label,
                     "calendar_grain" => ($detailsData[0]->calendar_grain != null) ? $detailsData[0]->calendar_grain : "",
                     "calendar_id"=> ($detailsData[0]->calendar_id != null) ? $detailsData[0]->calendar_id : "",
                     "gst_turnover_3b" => ($detailsData[0]->gst_turnover_3b != null) ? $detailsData[0]->gst_turnover_3b : "",
                     "gst_paid_3b" => ($detailsData[0]->gst_paid_3b != null) ? $detailsData[0]->gst_paid_3b : ""	
                 ];
             }
                         
                         
            //detailsDataArray[$i] = json_decode($jsonObject);
         }
         //Log::info($detailsDataArray);
         if (count($detailsDataArray) > 0) {
             return response()->json([
                 "status" => true,
                 "message" => 'Data fetched successfully',
                 "data"    => $detailsDataArray
             ], 201);
         }
         return response()->json([
             "status" => false,
             "message" => 'Data not available',
         ], 201);
     }
 
 
 //getAll intervals
    public function getAllIntervalsGST(Request $request)
    {
        if ($request->has('enable')) {
            //$items = DB::table('items')->whereIn('id', [1, 2, 3])->get();
            $interval = DB::table('general_settings')
                        ->select('parameter_name','parameter_value')
                        ->whereIn('parameter_name',['Quaterly','Halfyearly','Yearly','Monthly'])
                     -> where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $interval = GeneralSetting::where('is_active', '=', 1)->get();
        }
        if (count($interval) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $interval
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }
 
 //GET GST DETAILS BY ID for v2
        function getGstDetailsByidv2(Request $request)
      {
       DB::table('gst_header')
            ->where('id', $request->GST_header_id)
            ->update(['gst_interval_flag' => $request->gst_interval_flag]);
        
        if($request->gst_interval_flag == "" ){
            $query = "select general_settings.parameter_name,general_settings.parameter_value
        from  general_settings
        cross join  gst_header
        where general_settings.parameter_name ='GSTR3B' and  gst_header.id =  ". $request->GST_header_id ;
           } else {
        $query = "select Distinct general_settings.parameter_name,general_settings.parameter_value
        from  general_settings
         join gst_header on gst_header.gst_interval_flag = general_settings.parameter_value
        where gst_header.id =  " . $request->GST_header_id . "  and  gst_header.gst_interval_flag= '". $request->gst_interval_flag ."'"; 
        }

           $data = DB::select($query);
            $totalMonth =  (int)$data[0]->parameter_value;
        if ($request->eligibility_flag == 0) {
           $calendarData = $this->getLastMonthNamedetail($totalMonth);
        } else {
            $calendarData = $this->getLastQuarterNameData($totalMonth);
        }
		Log::info(print_r($calendarData, true));
         $detailsDataArray = [];
         if($request->gst_interval_flag == 2) {
            $gst_flag ="H";
        } else if($request->gst_interval_flag == 4){
            $gst_flag = "Q";
        }else{
            $gst_flag = "";
        }    
		  foreach ($calendarData as $i => $i_value) {
             $query = 'select * from gst_detail where gst_header_id = ' . $request->GST_header_id . ' and calendar_id =' . $i_value->id;
			 Log::info($query );
             $detailsData = DB::select($query);
             
             if (empty($detailsData)) {
                 $detailsDataArray[$i] = [
                     "parameter" => $i_value->label,
                     "calendar_grain" => "",
                     "calendar_id"=>$i_value->id,
                     "gst_turnover_3b" => "",
                     "gst_paid_3b" => "",
                     "total_month_value" => $gst_flag . ($i+1), 
                        	
                 ];
             } elseif (!empty($detailsData)) {
                 $detailsDataArray[$i] = [
                     "parameter" => $i_value->label,
                     "calendar_grain" => ($detailsData[0]->calendar_grain != null) ? $detailsData[0]->calendar_grain : "",
                     "calendar_id"=> ($detailsData[0]->calendar_id != null) ? $detailsData[0]->calendar_id : "",
                     "gst_turnover_3b" => ($detailsData[0]->gst_turnover_3b != null) ? $detailsData[0]->gst_turnover_3b : "",
                     "gst_paid_3b" => ($detailsData[0]->gst_paid_3b != null) ? $detailsData[0]->gst_paid_3b : "",
                     "total_month_value" => $gst_flag . ($i+1),	
                 ];
             }
         }
  
          if (count($detailsDataArray) > 0) {
              return response()->json([
                  "status" => true,
                  "message" => 'Data fetched successfully',
                  "data"    => $detailsDataArray
              ], 201);
          }
          return response()->json([
              "status" => false,
              "message" => 'Data not available',
          ], 201);
      }
	  
	  //get bank details for document v2
	//ganashree
//get bank details for document v2
	
	 function getBankDetailsByidv2(Request $request)
    {
	  DB::table('banking_header')
            ->where('id', $request->bank_header_id)
            ->update(['bank_interval_flag' => $request->bank_interval_flag]);
        
        if($request->bank_interval_flag == "" ){
            $query = "select general_settings.parameter_name,general_settings.parameter_value
        from  general_settings
        cross join  banking_header
        where general_settings.parameter_name ='GSTR3B' and  banking_header.id =  ". $request->bank_header_id ;
           }
            else {
        $query = "select Distinct general_settings.parameter_name,general_settings.parameter_value
        from  general_settings
         join banking_header on banking_header.bank_interval_flag = general_settings.parameter_value
        where banking_header.id =  " . $request->bank_header_id . "  and  banking_header.bank_interval_flag= '". $request->bank_interval_flag ."'"; 
        }

           $data = DB::select($query);
            $totalMonth =  (int)$data[0]->parameter_value;
            
        if ($request->eligibility_flag == 0) {
           $calendarData = $this->getLastMonthNamedetail($totalMonth);
        } else {
            $calendarData = $this->getLastQuarterNameData($totalMonth);
        } 
        
        $detailsDataArray = [];
        if($request->bank_interval_flag == 2) {
            $bank_flag ="H";
        } else if($request->bank_interval_flag == 4){
            $bank_flag = "Q";
        }else{
            $bank_flag = "";
        }
        foreach ($calendarData as $i => $i_value) {
            $query = 'select * from banking_details where bank_header_id = ' . $request->bank_header_id . ' and calendar_id =' . $i_value->id;
            Log::info($query );
            $detailsData = DB::select($query);
            
            if (empty($detailsData)) {
                $detailsDataArray[$i] = [
                    "label" => $i_value->label,
                    "calendar_grain" => "",
                    "calendar_id"=>$i_value->id,
                    "total_month_value" => $bank_flag . ($i+1), 
                           
                ];
            } elseif (!empty($detailsData)) {
                $detailsDataArray[$i] = [
                    "label" => $i_value->label,
                    "calendar_grain" => ($detailsData[0]->calendar_grain != null) ? $detailsData[0]->calendar_grain : "",
                    "calendar_id"=> ($detailsData[0]->calendar_id != null) ? $detailsData[0]->calendar_id : "",
                    "total_month_value" => $bank_flag . ($i+1),	
                ];
            }
        }
       if (count($detailsDataArray) > 0) {
              return response()->json([
                  "status" => true,
                  "message" => 'Data fetched successfully',
                  "data"    => $detailsDataArray
              ], 201);
          }
          return response()->json([
              "status" => false,
              "message" => 'Data not available',
          ], 201);
    }
	  
	  
    function addBankingDetails(Request $request)
    {
        foreach ($request->Calendar_grain as $key => $rows) :
            $banking = BankingDetails::firstOrNew(['bank_header_id' => $request->Bank_header_id, 'calendar_grain' => $rows]);
            $banking->bank_header_id         = $request->Bank_header_id;
            $banking->calendar_grain         = $rows;
            if (isset($request->Parameter_name[$key])) {
                $banking->parameter_name         = $request->Parameter_name[$key];
            }
            if (isset($request->Parameter_value[$key])) {
                $banking->parameter_value        = $request->Parameter_value[$key];
            }
            // static
            if (BankingDetails::where(['bank_header_id' => $request->Bank_header_id, 'calendar_grain' => $rows])->count() > 0) {
                $banking->modified_on = now();
                $banking->modified_by = 1;
            } else {
                $banking->created_by = 1;
                $banking->created_on = now();
            }
            $banking->record_status = $request->status;

            $data = $banking->getAttributes();
            $redis = $this->setReddis($data, 'Bankingdetails');
            if (!$redis) {
                Log::error('Failed to save  Banking details in redis.' . $rows->Bank_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            $banking->save();
            $insert_id = $banking->id;
            if (!$insert_id) {
                Log::error('Failed to save Banking details in pgsql. for ' . $rows->Bank_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }
            $req_id  =  $this->request_table($request);
            if (!empty($request->note_description) && !empty($req_id)) {
                $notes = $this->notes($request, $req_id);
            }
            $data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
        endforeach;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $res_data
        ], 201);
    }

    function getBankDetailsByid(Request $request)
    {
        if ($request->has('enable')) {
            $data = BankingDetails::where('bank_header_id', $request->header_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = BankingDetails::where('bank_header_id', $request->header_id)->where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

	
	
    function getMastertableDetails(Request $request)
    {
        if (!empty($request->enable)) {
			//Log::info("if");
				
			$query = "select  master_table.id,master_table.name,master_table.short_name,master_table.description
				from master_table
				join main_master on main_master.master_table_id  = master_table.master_table_id
				where main_master.name  =  '". $request->type ."' and master_table.is_active= 1 and master_table.enable = 1";
        } else {
			//Log::info("elsse");
			$query ="select  master_table.id,master_table.name,master_table.short_name,master_table.description
				from master_table
				join main_master on main_master.master_table_id  = master_table.master_table_id
				where main_master.name  =  '". $request->type ."' and master_table.is_active= 1";
            
        }
		//Log::info($query);
		$data = DB::select($query);
		
        if (count($data) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
            "status" => false
        ], 201);
    }

    // For multiple single time

    function getMastertableDetailsForMultiple(Request $request)
    {
        for ($i = 0; $i < count($request->type); $i++) {
            $data[$request->type[$i]] = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $request->type[$i])->where('main_master.is_active', '=', 1)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->orderBy('master_table.name')
                ->get();
        }
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    public function getMastertableDetailsById(Request $request)
    {
        $data = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $request->type)->where('master_table.id', $request->master_table_id)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->orderBy('master_table.name')
            ->get();
			//Log::info($data);
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function getDetailsbyPincode(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('pin_codes')->where('pincode', '=', $request->pincode)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $data = DB::table('pin_codes')->where('pincode', '=', $request->pincode)->where('is_active', '=', 1)->get();
        }
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function getEntityTypes(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('entity_types')
                ->select('id', 'entity', 'business', 'sort_order', 'type', 'share_percentage', 'is_active', 'enable')
                ->where('is_active', '=', 1)->where('enable', '=', $request->enable)
                ->orderBy('entity')
                ->get();
        } else {
            $data = DB::table('entity_types')
                ->select('id', 'entity', 'business', 'sort_order', 'type', 'share_percentage', 'is_active', 'enable')
                ->where('is_active', '=', 1)
                ->orderBy('entity')
                ->get();
        }
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
    function setReddis($array, $setname)
    {
        $redis = Redis::connection();
        $res =  $redis->set($setname, json_encode([
            $array
        ]));
        return $res;
    }

    public function addDocuments(Request $request)
    {
        $addDoc = Document::firstOrNew(['id' => $request->id]);
        $addDoc->name                   =   $request->name;
        $addDoc->short_name             =   $request->short_name;
        $addDoc->description            =   $request->description;
        $addDoc->single                 =   $request->single;
        $addDoc->digital_verification   =   $request->digital_verification;
        $addDoc->time_bound             =   $request->time_bound;
        $addDoc->short_order            =   $request->short_order;
        $addDoc->enable                 =   true;
        $addDoc->is_active              =   true;

        if (Document::where(['id' => $request->id])->count() > 0) {
            $addDoc->modified_on = now();
            $addDoc->modified_by = 1;
        } else {
            $addDoc->created_by = 1;
            $addDoc->created_on = now();
        }
        $addDoc->save();
        $insert_id = $addDoc->id;
        $data = $addDoc->getAttributes();
        $redis = $this->setReddis($data, 'entity');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['document_id']            = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'document updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'document saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

    public function editDocuments(Request $request)
    {
        //return $request;
        $update = Document::find($request->document_id);
        $update->name                   =   $request->name;
        $update->short_name             =   $request->short_name;
        $update->description            =   $request->description;
        $update->single                 =   $request->single;
        $update->digital_verification   =   $request->digital_verification;
        $update->time_bound             =   $request->time_bound;
        $update->short_order            =   $request->short_order;
        $update->enable                 =   1;
        $update->is_active              =   1;
        $update->created_by             =   1;
        $update->created_on             =   now();
        $update->modified_by            =   1;
        $update->modified_on            =   now();
        $update->save();
        $data['document_id']            = $request->document_id;
        if ($data['document_id']) {
            return response()->json([
                "status" => true,
                "message" => 'Successfuly updated',
                "Data" => $data
            ], 201);
        } else {

            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 201);
        }
    }

    public function getDocuments(Request $request)
    {
        if ($request->has('enable')) {
            $data = Document::where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = Document::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function deleteDocument(Request $request)
    {
        $deleteDocument = Document::find($request->id);
        $deleteDocument->is_active  = 0;
        $deleteDocument->save();
        if (!empty($deleteDocument)) {
            return response()->json([
                "status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }

    public function documentAuthorityAddOrEdit(Request $request)
    {
        //return $request->all();
        $docAuth = DocumentAuthority::firstOrNew(['id' => $request->document_authority_id]);
        $docAuth->name                       = $request->name;
        $docAuth->short_name                 = $request->short_name;
        $docAuth->description                = $request->description;
        $docAuth->state_id                   = $request->state_id;
        $docAuth->city_id                    = $request->city_id;
        $docAuth->enable                     =   true;
        $docAuth->is_active                  =   true;
        if (DocumentAuthority::where('id', $request->document_authority_id)->count() > 0) {
            $docAuth->modified_on = now();
            $docAuth->modified_by = 1;
        } else {
            $docAuth->created_by = 1;
            $docAuth->created_on = now();
        }
        $docAuth->save();
        $insert_id = $docAuth->id;
        $data = $docAuth->getAttributes();
        $redis = $this->setReddis($data, 'document_authority');
        if (!$redis) {
            Log::error('Failed to save in redis document_authority_id .' . $insert_id);
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in redis',
            ], 201);
        }
        if (!$insert_id) {
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 201);
        }
        $data['document_authority_id'] = $insert_id;
        if ($request->document_authority_id) {
            return response()->json([
                "message" => 'document updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'document saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

    public function getDocumentAuthorityById(Request $request)
    {
        $getDocumentAuthority = DocumentAuthority::where('id', $request->document_authority_id)->first();
        if (!empty($getDocumentAuthority)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getDocumentAuthority
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function deleteDocumentAuthorityById(Request $request)
    {
        $deleteDocumentAuthority = DocumentAuthority::find($request->document_authority_id);
        $deleteDocumentAuthority->is_active  = 0;
        $deleteDocumentAuthority->save();
        if (!empty($deleteDocumentAuthority)) {
            return response()->json([
                "status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }
	
    public function addDocumentMasterData(Request $request)
    {
        $addDocMaster = DocumentMaster::firstOrNew(['id' => $request->id]);
        $addDocMaster->document_id            = $request->document_id;
        $addDocMaster->document_authority_id  = $request->document_authority_id;
        $addDocMaster->sort_order             = $request->sort_order;
        $addDocMaster->enable                 =   true;
        $addDocMaster->is_active              =   true;
        if (DocumentMaster::where(['id' => $request->id])->count() > 0) {
            $addDocMaster->modified_on = now();
            $addDocMaster->modified_by = 1;
        } else {
            $addDocMaster->created_by = 1;
            $addDocMaster->created_on = now();
        }
        $addDocMaster->save();
        $insert_id = $addDocMaster->id;
        $data = $addDocMaster->getAttributes();
        $redis = $this->setReddis($data, 'entity');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['document_master_id']  =   $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'document updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'document saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }
	
    public function updateDocumentMasterData(Request $request)
    {

        $updateDocMaster = DocumentMaster::find($request->document_master_id);
        $updateDocMaster->document_id            = $request->document_id;
        $updateDocMaster->document_authority_id  = $request->document_authority_id;
        $updateDocMaster->sort_order             = $request->sort_order;
        $updateDocMaster->enable                 =   1;
        $updateDocMaster->is_active              =   1;
        $updateDocMaster->created_by             =   1;
        $updateDocMaster->created_on             =   now();
        $updateDocMaster->modified_by            =   1;
        $updateDocMaster->modified_on            =   now();
        $updateDocMaster->save();
        $data['document_master_id']           =   $updateDocMaster->id;
        if ($data['document_master_id']) {
            return response()->json([
                "status" => true,
                "message" => 'Successfuly update',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 201);
        }
    }


    public function getDocumentMasterDataById(Request $request)
    {
        $getMasterData          =  DocumentMaster::where('id', $request->id)->first();
        if (!empty($getMasterData)) {
            $documents              =  Document::where('id', $getMasterData->document_id)->get();
            $documentsAuthority     =  DocumentAuthority::where('id', $getMasterData->document_authority_id)->get();
            $data['document_master_id'] = $getMasterData->id;
            $data['document_data'] = $documents;
            $data['documentsAuthority'] = $documentsAuthority;
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function deleteDocumentMasterData(Request $request)
    {

        $deleteDocumentAuthorityMapping = DocumentMaster::find($request->id);
        $deleteDocumentAuthorityMapping->is_active  = 0;
        $deleteDocumentAuthorityMapping->save();
        if (!empty($deleteDocumentAuthorityMapping)) {
            return response()->json([
                "status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }

    public function assetCategory(Request $request)
    {
        $assetCat = AssetCategory::firstOrNew(['id' => $request->asset_category_id]);
        //Log::info($assetCat);
        $assetCat->name = $request->name;
        $assetCat->short_name = $request->short_name;
        $assetCat->description = $request->description;
        $assetCat->asset_type_id = $request->asset_type_id;
        $assetCat->sort_order             = $request->sort_order;
        $assetCat->enable                 = $request->enable;
        $assetCat->is_active              =   1;
        //Log::info($assetCat);
        exit();
        $assetCat->save();
        $insert_id = $assetCat->id;
        if (!empty($request->asset_category_id)) {
            $assetCat->modified_on = now();
            $assetCat->modified_by = 1;
        } else {
            $assetCat->created_by = 1;
            $assetCat->created_on = now();
        }
        $data = $assetCat->getAttributes();
        $redis = $this->setReddis($data, 'asset_category');
        if (!$redis) {
            Log::error('Failed to save in redis asset Category.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['asset_category_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }

    public function getAssetCategoryById(Request $request)
    {

        $getAssetCategory =  AssetCategory::where('id', $request->asset_category_id)->first();
        if (!empty($getAssetCategory)) {

            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getAssetCategory
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function assetSize(Request $request)
    {
        //return $assetSize =AssetSize::get();
        $assetSize = AssetSize::firstOrNew(['id' => $request->asset_size_id]);
        $assetSize->name = $request->name;
        $assetSize->short_name = $request->short_name;
        $assetSize->description = $request->description;
        $assetSize->asset_type_id = $request->asset_type_id;
        $assetSize->sort_order             = $request->sort_order;
        $assetSize->enable                 =   1;
        $assetSize->is_active              =   1;
        if (!empty($request->asset_size_id)) {
            $assetSize->modified_on = now();
            $assetSize->modified_by = 1;
        } else {
            $assetSize->created_by = 1;
            $assetSize->created_on = now();
        }
        $assetSize->save();
        $insert_id = $assetSize->id;
        $data = $assetSize->getAttributes();
        $redis = $this->setReddis($data, 'assetSize');
        if (!$redis) {
            Log::error('Failed to save in redis asset Size Id.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['asset_size_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getAssetSizeById(Request $request)
    {

        $getSizeCategory =  AssetSize::where('id', $request->asset_size_id)->first();
        if (!empty($getSizeCategory)) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $getSizeCategory
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function assetSubCategory(Request $request)
    {
        $assetSubCategory = AssetSubCategory::firstOrNew(['id' => $request->asset_sub_cat_id]);
        $assetSubCategory->name = $request->name;
        $assetSubCategory->short_name = $request->short_name;
        $assetSubCategory->description = $request->description;
        $assetSubCategory->asset_type_id = $request->asset_type_id;
        $assetSubCategory->sort_order             = $request->sort_order;
        $assetSubCategory->enable                 = $request->enable;
        $assetSubCategory->is_active              =   1;
        if (!empty($request->asset_sub_cat_id)) {
            $assetSubCategory->modified_on = now();
            $assetSubCategory->modified_by = 1;
        } else {
            $assetSubCategory->created_by = 1;
            $assetSubCategory->created_on = now();
        }
        $assetSubCategory->save();
        $insert_id = $assetSubCategory->id;
        $data = $assetSubCategory->getAttributes();
        $redis = $this->setReddis($data, 'assetSubCategory');
        if (!$redis) {
            Log::error('Failed to save in redis asset Sub Category Id.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['asset_sub_cat_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getAssetSubCategoryById(Request $request)
    {

        $getAssetSubCategory =  AssetSubCategory::where('id', $request->asset_sub_cat_id)->first();
        if (!empty($getAssetSubCategory)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getAssetSubCategory
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function AssetUsageType(Request $request)
    {
        $assetUsage = AssetUsageType::firstOrNew(['id' => $request->asset_usage_id]);
        $assetUsage->name = $request->name;
        $assetUsage->short_name = $request->short_name;
        $assetUsage->description = $request->description;
        $assetUsage->asset_type_id = $request->asset_type_id;
        $assetUsage->sort_order             = $request->sort_order;
        $assetUsage->enable                 = $request->enable;
        $assetUsage->is_active              =   1;
        if (!empty($request->asset_usage_id)) {
            $assetUsage->modified_on = now();
            $assetUsage->modified_by = 1;
        } else {
            $assetUsage->created_by = 1;
            $assetUsage->created_on = now();
        }
        $assetUsage->save();
        $insert_id = $assetUsage->id;
        $data = $assetUsage->getAttributes();
        $redis = $this->setReddis($data, 'AssetUsageType');
        if (!$redis) {
            Log::error('Failed to save in redis asset usage Id.' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['asset_usage_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getAssetUsageTypeById(Request $request)
    {

        $getAssetUsage =  AssetUsageType::where('id', $request->asset_usage_type_id)->first();
        if (!empty($getAssetUsage)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getAssetUsage
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function addbankingParameters(Request $request)
    {
        $assetSize = Banking_parameter::firstOrNew(['id' => $request->banking_parameters_id]);
        $assetSize->name = $request->name;
        $assetSize->short_name = $request->short_name;
        $assetSize->description = $request->description;
        $assetSize->level = $request->level;
        $assetSize->sort_order             = $request->sort_order;
        $assetSize->enable                 =   1;
        $assetSize->is_active              =   1;
        if (Banking_parameter::where('id', $request->banking_parameters_id)->count() > 0) {
            $assetSize->modified_on = now();
            $assetSize->modified_by = 1;
        } else {
            $assetSize->created_by = 1;
            $assetSize->created_on = now();
        }
        $assetSize->save();
        $insert_id = $assetSize->id;
        $data = $assetSize->getAttributes();
        $redis = $this->setReddis($data, 'bankingParameters');
        if (!$redis) {
            Log::error('Failed to save in redis banking_parameters_id .' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['banking_parameters_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getbankingParametersById(Request $request)
    {
        $bankingParameters =  Banking_parameter::where('id', $request->get_banking_parameter_id)->first();
        if (!empty($bankingParameters)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $bankingParameters
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function addIndustrySegment(Request $request)
    {

        $addSegment = Industry_segment::firstOrNew(['id' => $request->industry_segment_id]);
        $addSegment->name = $request->name;
        $addSegment->short_name = $request->short_name;
        $addSegment->description = $request->description;
        $addSegment->sort_order             = $request->sort_order;
        $addSegment->enable                 =   1;
        $addSegment->is_active              =   1;
        if (Industry_segment::where('id', $request->industry_segment_id)->count() > 0) {
            $addSegment->modified_on = now();
            $addSegment->modified_by = 1;
        } else {
            $addSegment->created_by = 1;
            $addSegment->created_on = now();
        }
        $addSegment->save();
        $insert_id = $addSegment->id;
        $data = $addSegment->getAttributes();
        $redis = $this->setReddis($data, 'asset_category');
        if (!$redis) {
            Log::error('Failed to save in redis industry_segment_id .' . $insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['industry_segment_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getIndustrySegmentById(Request $request)
    {

        $getIndustrySegmentById =  Industry_segment::where('id', $request->industry_segment_id)->first();
        if (!empty($getIndustrySegmentById)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getIndustrySegmentById
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function loanType(Request $request)
    {
        $loanType = LoanType::firstOrNew(['id' => $request->loan_type_id]);
        $loanType->name                       = $request->name;
        $loanType->short_name                 = $request->short_name;
        $loanType->description                = $request->description;
        $loanType->product_type_id            = $request->product_type_id;
        $loanType->sort_order                 = $request->sort_order;
        $loanType->enable                     =   1;
        $loanType->is_active                  =   1;
        if (LoanType::where('id', $request->loan_type_id)->count() > 0) {
            $loanType->modified_on = now();
            $loanType->modified_by = 1;
        } else {
            $loanType->created_by = 1;
            $loanType->created_on = now();
        }
        $loanType->save();
        $insert_id = $loanType->id;
        $data = $loanType->getAttributes();
        $redis = $this->setReddis($data, 'loanType');
        if (!$redis) {
            Log::error('Failed to save in redis loan_type_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['loan_type_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }

    public function getAllloanType(Request $request)
    {
        if ($request->has('enable')) {
        $getloanType =  LoanType::where('is_active', '=', 1)->where('enable', '=', $request->enable)->where('flag','=','Let')->orderBy('id')->get();
        } else {
            $getloanType =  LoanType::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (count($getloanType) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getloanType,
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function getAllPromotorInfos(Request $request)
    {
        if ($request->has('enable')) {
            $getpromotor = Promotorinfo::where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $getpromotor = Promotorinfo::where('is_active', '=', 1)->get();
        }
        if (count($getpromotor) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $getpromotor
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }


    public function addProduct(Request $request)
    {

        $addProducts = Product::firstOrNew(['id' => $request->product_id]);
        $addProducts->name                       = $request->name;
        $addProducts->description                = $request->description;
        $addProducts->financier_id               = $request->financier_id;
        $addProducts->sort_order                 = $request->sort_order;
        $addProducts->enable                     =   1;
        $addProducts->is_active                  =   1;
        if (Product::where('id', $request->product_id)->count() > 0) {
            $addProducts->modified_on = now();
            $addProducts->modified_by = 1;
        } else {
            $addProducts->created_by = 1;
            $addProducts->created_on = now();
        }
        $addProducts->save();
        $insert_id = $addProducts->id;
        $data = $addProducts->getAttributes();
        $redis = $this->setReddis($data, 'addProducts');
        if (!$redis) {
            Log::error('Failed to save in redis product_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['product_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }

    public function getProductById(Request $request)
    {
        $getProductById =  Product::where('id', $request->product_id)->first();
        if (!empty($getProductById)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getProductById
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
    /* public function addFinancier(Request $request)
    {
        $addFinancier = Financier::firstOrNew(['id' => $request->financier_id]);
        $addFinancier->name                       = $request->name;
        $addFinancier->short_name                 = $request->short_name;
        $addFinancier->description                = $request->description;
        $addFinancier->category                   = $request->category;
        $addFinancier->sort_order                 = $request->sort_order;
        $addFinancier->enable                     =   1;
        $addFinancier->is_active                  =   1;
        if (Financier::where('id', $request->financier_id)->count() > 0) {
            $addFinancier->modified_on = now();
            $addFinancier->modified_by = 1;
        } else {
            $addFinancier->created_by = 1;
            $addFinancier->created_on = now();
        }
        $addFinancier->save();
        $insert_id = $addFinancier->id;
        $data = $addFinancier->getAttributes();
        $redis = $this->setReddis($data, 'addFinancier');
        if (!$redis) {
            Log::error('Failed to save in redis financier_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['financier_id'] = $insert_id;
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    } */
    /* public function getFinancierById(Request $request)
    {
        $getFinancierById =  Financier::where('id', $request->financier_id)->first();
        if (!empty($getFinancierById)) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $getFinancierById
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 403);
        }
    } */
    public function documentListAddOrUpdate(Request $request)
    {
        $DocumentList = DocumentList::firstOrNew(['id' => $request->document_list_id]);
        $DocumentList->name                       = $request->name;
        $DocumentList->short_name                 = $request->short_name;
        $DocumentList->description                = $request->description;
        $DocumentList->sort_order                 = $request->sort_order;
        $DocumentList->enable                     =   1;
        $DocumentList->is_active                  =   1;
        if (DocumentList::where('id', $request->document_list_id)->count() > 0) {
            $DocumentList->modified_on = now();
            $DocumentList->modified_by = 1;
        } else {
            $DocumentList->created_by = 1;
            $DocumentList->created_on = now();
        }
        $DocumentList->save();
        $insert_id = $DocumentList->id;
        $data = $DocumentList->getAttributes();
        $redis = $this->setReddis($data, 'DocumentList');
        if (!$redis) {
            Log::error('Failed to save in redis Document List id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['document_list_id'] = $insert_id;
        return response()->json([
            "status" => true,
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getdocumentListById(Request $request)
    {
        $getdocument_listById =  DocumentList::where('id', $request->document_list_id)->first();
        if (!empty($getdocument_listById)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getdocument_listById
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function nationalityAddOrEdit(Request $request)
    {
        $addoreditNatinality = Nationality::firstOrNew(['id' => $request->nationality_id]);
        $addoreditNatinality->country                       = $request->country;
        $addoreditNatinality->alpha_2_code                 = $request->alpha_2_code;
        $addoreditNatinality->alpha_3_code                = $request->alpha_3_code;
        $addoreditNatinality->sort_order                 = $request->sort_order;
        $addoreditNatinality->country_code                = $request->country_code;
        $addoreditNatinality->currency                   = $request->currency;
        $addoreditNatinality->enable                     =   1;
        $addoreditNatinality->is_active                  =   1;
        if (Nationality::where('id', $request->nationality_id)->count() > 0) {
            $addoreditNatinality->modified_on = now();
            $addoreditNatinality->modified_by = 1;
        } else {
            $addoreditNatinality->created_by = 1;
            $addoreditNatinality->created_on = now();
        }

        $addoreditNatinality->save();
        $insert_id = $addoreditNatinality->id;
        $data = $addoreditNatinality->getAttributes();
        $redis = $this->setReddis($data, 'addoreditNatinality');
        if (!$redis) {
            Log::error('Failed to save in redis Natinality id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['nationality_id'] = $insert_id;
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getAllnationality(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('nationality')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('sort_order')->get();
        } else {
            $data = DB::table('nationality')->where('is_active', '=', 1)->orderBy('sort_order')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }
    public function getNationalityById(Request $request)
    {
        $nationality =  Nationality::where('id', $request->id)->first();
        if (!empty($nationality)) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $nationality
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function getCurrencyByCountryCode(Request $request)
    {
        $currency = Nationality::where('country_code', $request->country_code)->first();
        if (!empty($currency)) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data" => $currency
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }


    public function getAllCountrycode(Request $request)
    {
        return Nationality::all();
    }

    public function bankAddOrEdit(Request $request)
    {
        $bankAddOrEdit = Bank::firstOrNew(['id' => $request->bank_id]);
        $bankAddOrEdit->name                       =   $request->name;
        $bankAddOrEdit->short_name                 =   $request->short_name;
        $bankAddOrEdit->description                =   $request->description;
        $bankAddOrEdit->bank_category_id           =   $request->bank_category_id;
        $bankAddOrEdit->bank_rank_id               =   $request->bank_rank_id;
        $bankAddOrEdit->financier_flag             =   $request->financier_flag;
        $bankAddOrEdit->enable                     =   $request->enable;
        $bankAddOrEdit->sort_order                 =   $request->sort_order;
        $bankAddOrEdit->is_active                  =   true;
        if (Bank::where('id', $request->bank_id)->count() > 0) {
            $bankAddOrEdit->modified_on = now();
            $bankAddOrEdit->modified_by = 1;
        } else {
            $bankAddOrEdit->created_by = 1;
            $bankAddOrEdit->created_on = now();
        }
        $bankAddOrEdit->save();
        $insert_id = $bankAddOrEdit->id;
        $data = $bankAddOrEdit->getAttributes();
        $redis = $this->setReddis($data, 'bankAddOrEdit');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['bank_id'] = $insert_id;
        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Successfuly inserted',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'failed to save data'
            ], 201);
        }
    }

    public function getAllbank(Request $request)
    {
		DB::enableQueryLog();
        if ($request->has('enable')) {
            //$data = DB::table('bank')->where('financier_flag','=',1)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
            $data = DB::table('bank')->where('enable', '=', $request->enable)->where('is_active', '=', 1)->where('source','=','bank')->orderBy('name')->get();
        } else {
            $data = DB::table('bank')->where('enable', '=', 1)->where('is_active', '=', 1)->orderBy('name')->get();
        }
		$query1 = DB::getQueryLog();
        $this->callLogFileStore($request->user_id, "Bank", "select", $query1[0]['query'], "bank","fetch");
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function getBankById(Request $request)
    {
        $bankdata =  Bank::where('id', $request->bank_id)->where('is_active', '=', 1)->first();
        if (!empty($bankdata)) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $bankdata
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function deleteBankById(Request $request)
    {
        $disabledBank = Bank::find($request->bank_id);
        $disabledBank->is_active  = 0;
        $disabledBank->save();
        if (!empty($disabledBank)) {
            return response()->json([
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "message" => 'Failed to delete',
            ], 201);
        }
    }
    public function getBankingBusinessInfoByBusinessId(Request $request)
    {
        $query = 'select banking_header.id as id,banking_header.parent_type_id,banking_header.parent_id,banking_header.account_no,
				banking_header.bank_id,banking_header.account_type,bank.name as bank_name,master_table.name as account_type_name,banking_header.edc_pg_id,banking_header.nature_of_account
        from banking_header left join bank on bank.id = banking_header.bank_id
        left join master_table on master_table.id = banking_header.account_type::INTEGER where parent_id = ' . $request->parent_id . ' and parent_type_id = ' . $request->parent_type_id;
        $bankBusinessData = DB::select($query);

        if (count($bankBusinessData) > 0) {
            return response()->json([
                "message" => "Data fetch successfully",
                "status" => true,
                "data" => $bankBusinessData
            ], 200);
        } else {
            return response()->json([
                "message" => "No record found",
                "status" => false
            ], 200);
        }
    }
    public function cityAddOrEdit(Request $request)
    {

        $addOrUpdateCity = City::firstOrNew(['id' => $request->city_id]);
        $addOrUpdateCity->city                       =   $request->city;
        $addOrUpdateCity->gst_id                     =   $request->gst_id;
        $addOrUpdateCity->tier                       =   $request->tier;
        $addOrUpdateCity->hra_classification         =   $request->hra_classification;
        $addOrUpdateCity->enable                     =   $request->enable;
        $addOrUpdateCity->sort_order                 =   $request->sort_order;
        $addOrUpdateCity->is_active                  =   1;
        if (City::where('id', $request->city_id)->count() > 0) {
            $addOrUpdateCity->modified_on = now();
            $addOrUpdateCity->modified_by = 1;
        } else {
            $addOrUpdateCity->created_by = 1;
            $addOrUpdateCity->created_on = now();
        }
        $addOrUpdateCity->save();
        $insert_id = $addOrUpdateCity->id;
        $data = $addOrUpdateCity->getAttributes();
        $redis = $this->setReddis($data, 'addOrUpdateCity');
        if (!$redis) {
            Log::error('Failed to save in redis city_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['city_id'] = $insert_id;
        if ($request->city_id) {
            return response()->json([
                "message" => 'city name updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'city name saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }
    public function getAllCity(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('city')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('sort_order')->get();
        } else {
            $data = DB::table('city')->where('is_active', '=', 1)->orderBy('sort_order')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }
    public function getCityById(Request $request)
    {
        $getCity =  City::where('id', $request->city_id)->first();
        if (!empty($getCity)) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $getCity
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function deleteCityById(Request $request)
    {
        $disabledCity = City::find($request->city_id);
        $disabledCity->is_active  = 0;
        $disabledCity->save();
        if (!empty($disabledCity)) {
            return response()->json([
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "message" => 'Failed to delete',
            ], 201);
        }
    }


    public function getAllIndustryNames(Request $request)
    {
        if ($request->has('enable')) {

            $industry_name =  DB::table('industry_names')
                ->join('industry_group', 'industry_group.id', '=', 'industry_names.industry_group_id')
                ->select('industry_names.id', 'industry_names.name', 'industry_names.industry_group_id', 'industry_names.sort_order', 'industry_names.enable', 'industry_names.is_active')
                ->where('industry_names.is_active', '=', 1)->where('industry_names.enable', '=', $request->enable)
                ->get();
        } else {

            $industry_name =  DB::table('industry_names')
                ->join('industry_group', 'industry_group.id', '=', 'industry_names.industry_group_id')
                ->select('industry_names.id', 'industry_names.name', 'industry_names.industry_group_id', 'industry_names.sort_order', 'industry_names.enable', 'industry_names.is_active')
                ->where('industry_names.is_active', '=', 1)
                ->get();
        }
        if (count($industry_name) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $industry_name
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function industryGroupAddOrEdit(Request $request)
    {
        $industrygroup = IndustryGroup::firstOrNew(['id' => $request->industry_group_id]);
        $industrygroup->name                           =   $request->name;
        $industrygroup->industry_type_id               =   $request->industry_type_id;
        $industrygroup->enable                         =   $request->enable;
        $industrygroup->sort_order                     =   $request->sort_order;
        $industrygroup->is_active                      =   1;
        if (IndustryGroup::where('id', $request->industry_group_id)->count() > 0) {
            $industrygroup->modified_on = now();
            $industrygroup->modified_by = 1;
        } else {
            $industrygroup->created_by = 1;
            $industrygroup->created_on = now();
        }
        $industrygroup->save();
        $insert_id = $industrygroup->id;
        $data = $industrygroup->getAttributes();
        $redis = $this->setReddis($data, 'industrygroup');
        if (!$redis) {
            Log::error('Failed to save in redis industry_group_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['industry_group_id'] = $insert_id;
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
    public function getAllIndustryGroup(Request $request)
    {
        if ($request->has('enable')) {
            $industry_group = DB::table('industry_group')
                ->join('master_table', 'master_table.id', '=', 'industry_group.industry_type_id')
                ->select('industry_group.id', 'industry_group.name', 'industry_group.industry_type_id', 'industry_group.sort_order', 'industry_group.enable', 'industry_group.is_active')
                ->where('industry_group.is_active', '=', 1)->where('industry_group.enable', '=', $request->enable)
                ->get();
        } else {

            $industry_group = DB::table('industry_group')
                ->join('master_table', 'master_table.id', '=', 'industry_group.industry_type_id')
                ->select('industry_group.id', 'industry_group.name', 'industry_group.industry_type_id', 'industry_group.sort_order', 'industry_group.enable', 'industry_group.is_active')
                ->where('industry_group.is_active', '=', 1)
                ->get();
        }
        if (count($industry_group) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $industry_group
            ], 201);
        } else {
            return response()->json([
                "message" => 'Data not available',
            ], 201);
        }
    }
    public function deleteIndustryNames(Request $request)
    {
        $deleteName = IndustryNames::find($request->industry_name_id);
        if (!empty($deleteName)) {
            $deleteName->is_active = 0;
            $deleteName->save();
            return response()->json([
                "message" => 'Deleted successfully',
                "status" => true
            ], 200);
        } else {
            return response()->json([
                "message" => 'Data not available',
                "status" => false
            ], 201);
        }
    }
	
	public function deleteMastertableDetailsById(Request $request)
    {
        $deleteMainMaster = MainMaster::find($request->id);
        $deleteMainMaster->is_active = 0;
        $deleteMainMaster->save();
        $updateId = $deleteMainMaster->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }
    
    public function deleteIndustryGroup(Request $request)
    {
        $deleteIndustryGroup = IndustryGroup::find($request->id);
        $deleteIndustryGroup->is_active = 0;
        $deleteIndustryGroup->save();
        $updateId = $deleteIndustryGroup->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }
    
    public function myTestAddToLog()
    {
        //\LogActivity::addToLog('getAllbusinessInfos',$request->user_id);
        //LogActivity::addToLog('My Testing Add To Log.');
        dd('log insert successfully.');
    }


    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function logActivity()
    {
        //return $logs = \LogActivity::logActivityLists();
        return "test";
    }


    function getAllWorkingCapitalDetails(Request $request)
    {
        $query = 'select working_capital.*,business_infos.name as bus_name,bank.name as bank_name,master_table.name as typename
        from working_capital
        left join business_infos on business_infos.id = working_capital.parent_id
        left join bank on bank.id = working_capital.bank_id
        left join master_table on master_table.id = working_capital.type_id
        where working_capital.is_active = 1 and working_capital.parent_type_id = ' . $request->parent_type_id . ' and working_capital.parent_id = ' . $request->parent_id . ' order by working_capital.id';

        $workingcapitald = DB::select($query);
        if (count($workingcapitald) > 0) {
            return response()->json([
                "message" => "Data fetch successfully",
                "status" => true,
                "data" => $workingcapitald
            ], 200);
        } else {
            return response()->json([
                "message" => "No record found",
                "status" => false
            ], 200);
        }
    }


    public function deletebusinessinfo(Request $request)
    {

        $deleteDoc = BusinessInfo::find($request->bus_id);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();
        $updateId = $deleteDoc->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function deletepromotorinfo(Request $request)
    {
        $deleteDoc = Promotorinfo::find($request->promotor_id);
        $deleteShare = Business_promoter_mapping::find(['promoter_id' => $request->promotor_id]);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();

        $updateId = $deleteDoc->id;

        if ($updateId) {
            $deleteShare = Business_promoter_mapping::where(['promoter_id' => $request->promotor_id])->update(['share_percent' => 0]);
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }


    public function promoterOtp(Request $request)
    {
        $parent_type = "Promoter";
        $master_type = "parent_type";
        $data1 = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

        //$checkEmail = Comm_phone_email::select('parent_id')->where('contact_value', $request->value)->where('contact_type', 112)->where('parent_type_id', $data1[0]->id)->get();
        //$checkMobile = Comm_phone_email::select('parent_id')->where('contact_value', $request->value)->where('contact_type', 113)->where('parent_type_id', $data1[0]->id)->get();


        $query1 = "select * from comm_phone_email
        left join promoter_info on promoter_info.id = comm_phone_email.parent_id
        where contact_type = 112 and parent_type_id = 2 and promoter_info.is_active = 1 and contact_value ='" . $request->value . "'";
        $checkEmail = DB::select($query1);

        $query2 = "select * from comm_phone_email
        left join promoter_info on promoter_info.id = comm_phone_email.parent_id
        where contact_type = 113 and parent_type_id = 2 and promoter_info.is_active = 1 and contact_value ='" . $request->value . "'";
        $checkMobile = DB::select($query2);


        if (count($checkEmail) > 0) {
            return response()->json([
                "status" => false,
                "message" => 'Email Already exists',
            ], 201);
        }
        if (count($checkMobile) > 0) {
            return response()->json([
                "status" => false,
                "message" => 'Mobile Already exists',
            ], 201);
        }
        //Call rest api to check credential in otp table
        $response1 = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getOtpdetails', [
            'value' => $request->value
        ]);
        //Log::info($response1);
        $jsonRes = json_decode($response1);
        //Log::info($jsonRes->status);

        if ($jsonRes->status == 1) {
            return response()->json([
                "status" => 101,
                "message" => 'already validated'
            ], 201);
        } else {

            //$bus_parter_map = new Otp();
            $otps = Otp::firstOrNew(['id' => $request->otp_id]);
            $otps->type = $request->get('type');
            $otps->value = $request->get('value');
            $otps->form_id = $request->get('form_id');
            $otps->created_by = 1;
            $otps->created_on = now();

            $otp_type  = rand(100000, 999999);
            $data['otp'] = $otp_type;

            if ($request->type == 'mobile') {
                $response = Http::get('http://sms2.iissms.co.in/V2/http-api.php?apikey=Aq6qfwIfDz7O3J9M&senderid=AISINF&number=' . $request->value . '&message=' . $otp_type . ' is the OTP for your application');
                if ($response) {
                    $otps->otp = $otp_type;
                    $otps->validate_otp = false;
                    $otps->save();
                    $data['otps'] = $otps;
                    return response()->json([
                        "status" => true,
                        "message" => 'Otp sent successfully',
                        "Data" => $data
                    ], 201);
                } else {
                    return response()->json([
                        "status" => false,
                        "message" => 'Failed to Send OTP',
                    ], 201);
                }
            } else if ($request->type == 'email') {

                $respo = $this->sendEmail($request->value, $otp_type);
                if ($respo == 202 || $respo!=202) {
                    $otps->otp = $otp_type;
                    $otps->validate_otp = false;
                    $otps->save();
                    $data['otps'] = $otps;
                    return response()->json([
                        "status" => true,
                        "message" => 'Otp sent successfully',
                        "Data" => $data
                    ], 201);
                } else {
                    return response()->json([
                        "status" => false,
                        "message" => 'Failed to Send OTP',
                    ], 201);
                }
            }
        }
    }
    public function resendPromoterOtp(Request $request)
    {
        $checkOtp = Otp::where('value', $request->value)->get();
        $otps = new Otp();
        $otp_type  = rand(100000, 999999);

        $data['otp'] = $otp_type;
        if ($request->type == 'mobile') {
            $response = Http::get('http://sms2.iissms.co.in/V2/http-api.php?apikey=Aq6qfwIfDz7O3J9M&senderid=AISINF&number=' . $request->value . '&message=' . $otp_type . 'is the OTP for your application');
            if ($response) {
                $updateotp = Otp::select('otp')
                    ->where('value', $request->value)
                    ->update(['otp' => $otp_type]);
                return response()->json([
                    "status" => true,
                    "message" => 'Resent otp successfully',
                    "Data" => $data
                ], 201);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'Failed to Send OTP',
                ], 201);
            }
        } else if ($request->type == 'email') {
            $respo = $this->sendEmail($request->value, $otp_type);
            if ($respo == 202 || $respo!= 202) {
                $updateotp = Otp::select('otp')
                    ->where('value', $request->value)
                    ->update(['otp' => $otp_type]);
                return response()->json([
                    "status" => true,
                    "message" => 'Resent otp successfully',
                    "Data" => $data
                ], 201);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'Failed to Send OTP',
                ], 201);
            }
        }
    }
    function getbusinessgstbybusinessid(Request $request)
    {
        if ($request->has('enable')) {
            $gst = GSTHeader::where('b_id',  $request->business_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $gst = GSTHeader::where('b_id',  $request->business_id)->where('is_active', '=', 1)->get();
        }
        if (!$gst->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $gst
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    public function verifyOtp(Request $request)
    {
        $checkOtp = Otp::select('otp', 'value')
            ->where('value', '=', $request->value)
            ->where('form_id', '=', $request->form_id)
            ->where('otp', '=', $request->otp)
            ->get();

        if (!$checkOtp->isEmpty()) {
            $updateUser = Otp::select('otp')
                ->where('value', '=', $request->value)
                ->where('form_id', '=', $request->form_id)
                ->where('otp', '=', $request->otp)
                ->update(['validate_otp' => true]);


            return response()->json([
                "status" => true,
                "message" => 'Otp verified successfully',
                "data" => $checkOtp
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Please enter valid otp',
        ], 201);
    }

    function saveFinanceData(Request $request)
    {
        $finance_header = Finance_header::firstOrNew(['parent_id' => $request->parent_id, 'parent_type_id' => $request->parent_type_id]);
        $finance_header->data_submit_type = $request->data_submit_type;
        $finance_header->parent_type_id = $request->parent_type_id;
        $finance_header->parent_id = $request->parent_id;
        $finance_header->enable = 1;
        $finance_header->is_active = 1;
        if (Finance_header::where('parent_id', '=', $request->parent_id)->where('parent_type_id', '=', $request->parent_type_id)->count() > 0) {
            $finance_header->modified_on = now();
            $finance_header->modified_by = 1;
        } else {
            $finance_header->created_by = 1;
            $finance_header->created_on = now();
        }
        $finance_header->record_status = $request->status;
        $finance_header->save();

        $insert_header_id = $finance_header->id;
        if (!$insert_header_id) {
            Log::error('Failed to save finance header in pgsql. for ' . $request->parent_id . ' ' . $request->finance_parameter_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }

        foreach ($request->finance_data as $i => $i_value) {
            $finance = Finance_data::firstOrNew(['mstr_finance_parameter_id' => $i_value['finance_parameter_id'], 'finance_header_id' => $insert_header_id, 'year' => $i_value['year']]);
            $finance->finance_header_id = $insert_header_id;
            $finance->full_flag = $request->full_flag;
            $finance->mstr_finance_parameter_id = $i_value['finance_parameter_id'];
            $finance->value = $i_value['value'];
            $finance->year = $i_value['year'];

            if (Finance_data::where('mstr_finance_parameter_id', '=', $i_value['finance_parameter_id'])->where('finance_header_id', '=', $insert_header_id)->where('year', '=', $i_value['year'])->count() > 0) {
                $finance->modified_on = now();
                $finance->modified_by = 1;
            } else {
                $finance->created_by = 1;
                $finance->created_on = now();
            }
            $data = $finance->getAttributes();
            $redis = $this->setReddis($data, 'businessfinanceInfo');
            if (!$redis) {
                Log::error('Failed to save in redis finance.' . $request->parent_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            $finance->save();
            $insert_id = $finance->id;
            if (!$insert_id) {
                Log::error('Failed to save finance in pgsql. for ' . $request->parent_id . ' ' . $i_value['finance_parameter_id']);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }
            if (isset($data['modified_by'])) {
                unset($data['modified_by']);
            }
            $data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
        }
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $res_data
        ], 201);
    }

    //STATICALLY DONE FOR 3 YEARS
    function getLast3FinanceYear(Request $request)
    {
        $month = date('m');
        $year = date('Y');

        $year1 = '';
        $year2 = '';
        $year3 = '';

        if ($month > 8) {
            $year1 =  $year . '-' . ($year + 1);
            $year2 = ($year - 1) . '-' . $year;
            $year3 = ($year - 2) . '-' . ($year - 1);
        } else {
            $year1 = ($year - 1) . '-' . $year;
            $year2 = ($year - 2) . '-' . ($year - 1);
            $year3 = ($year - 3) . '-' . ($year - 2);
        }
        if($request->loanType == 1){
            $data = [$year1, $year2];
        }else {
            $data = [$year1, $year2, $year3];
        }
        
        $data = [$year1, $year2, $year3];
        return response()->json([
            "message" => 'welcome',
            "status" => true,
            "data" => $data
        ], 200);
    }

    public function sendEmail($mail, $otp)
    {
        $name = 'aagey';
        $htmlContent = "<p>Your OTP is <b>" . $otp . "</b></p>";
        $textContent = "<p>Your OTP is <b>" . $otp . "</b></p>";
        $from = new From('v.care@aagey.com', 'V CARE');
        $subject = "OTP Verification";
        $recipient = new To('v.care@aagey.com', 'V CARE');

        $email = new Mail();
        $email->setFrom($from);
        $email->setSubject($subject);
        $email->addto($mail);
        $email->addContent("text/plain", $textContent);
        $email->addContent("text/html", $htmlContent);

        $sendgrid = new \SendGrid('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');
        try {
            $respo = $sendgrid->send($email);
            $context = json_decode($respo->body());
            return $respo->statusCode();
            //  if ($respo->statusCode() == 202) {
            //     echo "Metric email has been sent";
            //   // return $respo;
            // } else {
            //    // return $respo;
            //     echo "Failed to send metric email";
            // }
        } catch (\Exception $e) {
            //echo "Failed";
        }
    }


    function getFinanceParameterDetailsByHeader(Request $request)
    {
        if ($request->has('enable')) {
            $uniqueHeader = DB::select('select DISTINCT parameter_head from mstr_finance_parameter');
            if (count($uniqueHeader) > 0) {
                foreach ($uniqueHeader as $i => $i_value) {
                    //echo $i_value->parameter_head;
                    $data[$i_value->parameter_head] = DB::table('mstr_finance_parameter')->where('is_active', '=', 1)->where('parameter_head', '=', $i_value->parameter_head)->where('enable', '=', $request->enable)->orderBy('sort_order')->get();
                }
            }
        } else {
            $uniqueHeader  =  DB::select('select DISTINCT parameter_head from mstr_finance_parameter');
            if (count($uniqueHeader) > 0) {
                foreach ($uniqueHeader as $i => $i_value) {
                    // echo $i_value->parameter_head;
                    $data[$i_value->parameter_head] = DB::table('mstr_finance_parameter')->where('is_active', '=', 1)->where('parameter_head', '=', $i_value->parameter_head)->orderBy('sort_order')->get();
                }
            }
        }
        //print_r($data); exit;
        if (count($data) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getFinanceDataByParentIdAndType(Request $request)
    {
        $query = 'select finance_details.mstr_finance_parameter_id as finance_parameter_id,finance_details.year,finance_details.value from finance_details left join finance_header on finance_header.id = finance_details.finance_header_id where finance_header.parent_id = ' . $request->parent_id . ' and finance_header.parent_type_id = ' . $request->parent_type_id;
        $finance_data = DB::select($query);

        if (count($finance_data) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data" => $finance_data
            ], 200);
        } else {
            return response()->json([
                "message" => 'No records found'
            ], 201);
        }
    }
    function saveBankingDetails(Request $request)
    {
        foreach ($request->banking_data as $i => $i_value) {
            $banking = BankingDetails::firstOrNew(['bank_header_id' => $request->Bank_header_id, 'calendar_grain' => $i_value['calendar_grain']]);
            $banking->bank_header_id         = $request->Bank_header_id;
            $banking->calendar_grain         = $i_value['calendar_grain'];
            $banking->parameter_id         = $i_value['parameter_id'];
            $banking->parameter_value         = $i_value['parameter_value'];
            $banking->calendar_id         = $i_value['calendar_id'];
            $banking->parameter_comments         = $i_value['parameter_comments'];

            if (BankingDetails::where(['bank_header_id' => $request->Bank_header_id, 'calendar_grain' => $i_value['calendar_grain']])->count() > 0) {
                $banking->modified_on = now();
                $banking->modified_by = 1;
            } else {
                $banking->created_by = 1;
                $banking->created_on = now();
            }
            $banking->record_status = $request->status;
            $data = $banking->getAttributes();
            $redis = $this->setReddis($data, 'Bankingdetails');
            if (!$redis) {
                Log::error('Failed to save  Banking details in redis.' . $banking->bank_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            $banking->save();
            $insert_id = $banking->id;
            if (!$insert_id) {
                Log::error('Failed to save Banking details in pgsql. for ' . $banking->bank_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }
            if (isset($data['modified_by'])) {
                unset($data['modified_by']);
            }
            //$data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
        }
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $res_data
        ], 201);
    }
    function getBankingParameterDetails(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('mstr_bank_detail_parameter')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('sort_order')->get();
        } else {
            $data = DB::table('mstr_bank_detail_parameter')->where('is_active', '=', 1)->orderBy('sort_order')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    //DYNAMIC SAVE API
    function saveGstDetails(Request $request)
    {
		//Log::info($request);
        foreach ($request->gst_data as $i => $i_value) {
            $gst = GstDetails::firstOrNew(['gst_header_id' => $request->GST_header_id, 'calendar_grain' => $i_value['calendar_grain'], 'calendar_id' => $i_value['calendar_id']]);
            $gst->gst_header_id         = $request->GST_header_id;
            $gst->calendar_grain         = $i_value['calendar_grain'];
           if($i_value['gst_turnover_3b'] != ""){
            $gst->gst_turnover_3b         = str_replace(',','', $i_value['gst_turnover_3b']);
            }
            if($i_value['gst_paid_3b'] != ""){
            $gst->gst_paid_3b         = str_replace(',','',$i_value['gst_paid_3b']);
            }
            $gst->calendar_id         = $i_value['calendar_id'];


            if (GstDetails::where(['gst_header_id' => $request->GST_header_id, 'calendar_grain' => $i_value['calendar_grain'], 'calendar_id' => $i_value['calendar_id']])->count() > 0) {
                $gst->modified_on = now();
                if ($request->has('created_by')) {
                    $gst->modified_by = $request->created_by;
                } else {
                    $gst->modified_by = $request->user_id;
                }
            } else {
                if ($request->has('created_by')) {
                    $gst->created_by = $request->created_by;
                } else {
                    $gst->created_by = $request->user_id;
                }
                $gst->created_on = now();
                $gst->modified_on = now();
                $gst->modified_by = $request->user_id;
            }
			
			//Log::info($gst);
            //$gst->record_status = $request->status;
            $data = $gst->getAttributes();
            $redis = $this->setReddis($data, 'gstdetails');
            if (!$redis) {
                Log::error('Failed to save  gst details in redis.' . $gst->gst_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in redis',
                ], 417);
            }
            $gst->save();
            $insert_id = $gst->id;
            if (!$insert_id) {
                Log::error('Failed to save gst details in pgsql. for ' . $gst->gst_header_id);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }

            //$data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
        }
		
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $res_data
        ], 201);
    }

    function getBusinessAndPromoterByUserId(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
            entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
            states.state_name as state_name
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            left join industry_group on industry_group.id = business_infos.industry_group_id
            left join pin_codes on pin_codes.id = business_infos.pin_id
            left join city on city.id = pin_codes.city_id
            left join states on states.state_id = pin_codes.state_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;


            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,promoter_info.type as type,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";

            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function getLoanDetailsByloanid(Request $request)
    {
        $loan = Loan::where('id', $request->loan_id)->get();
        if (!$loan->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $loan
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getFinanceParameterHead(Request $request)
    {

        if ($request->has('enable')) {
            $data = DB::table('mstr_finance_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->where('form_type', '=', $request->form_type)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
        } else {
            $data = DB::table('mstr_finance_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->where('form_type', '=', $request->form_type)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getFinanceParameterLevel1(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('mstr_finance_parameter')->select('parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $request->parameter_head)->where('form_type', '=', $request->form_type)->groupBy('parameter_level_1', 'display_parameter_level_1')->orderBy('parameter_level_1')->get();
        } else {
            $data = DB::table('mstr_finance_parameter')->select('parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $request->parameter_head)->where('form_type', '=', $request->form_type)->groupBy('parameter_level_1', 'display_parameter_level_1')->orderBy('parameter_level_1')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getFinanceParameterLevel2(Request $request)
    {
        if ($request->has('enable')) {
            $data = DB::table('mstr_finance_parameter')->select('id', 'parameter_level_2', 'display_parameter_level_2')->where('is_active', '=', 1)->where('parameter_level_1', '=', $request->parameter_level_1)->where('form_type', '=', $request->form_type)->orderBy('sort_order')->get();
        } else {
            $data = DB::table('mstr_finance_parameter')->select('id', 'parameter_level_2', 'display_parameter_level_2')->where('is_active', '=', 1)->where('parameter_level_1', '=', $request->parameter_level_1)->where('form_type', '=', $request->form_type)->orderBy('sort_order')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getBankParameterHead(Request $request)
    {

        if ($request->has('enable')) {
            $data = DB::table('mstr_bank_detail_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
        } else {
            $data = DB::table('mstr_bank_detail_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getBankParameterLevel1(Request $request)
    {
        /*  if ($request->has('enable')) {
            $data = DB::table('mstr_bank_detail_parameter')->select('id', 'parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $request->parameter_head)->orderBy('parameter_level_1')->get();
        } else {
            $data = DB::table('mstr_bank_detail_parameter')->select('id', 'parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $request->parameter_head)->orderBy('parameter_level_1')->get();
        } */
        $data = DB::table('mstr_bank_detail_parameter')->select('id', 'parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $request->parameter_head)->orderBy('parameter_level_1')->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function getBankingParameterHead()
    {
        $bankingHeader = DB::table('mstr_bank_detail_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
        $data['bankingHeader'] = $bankingHeader;
        foreach ($bankingHeader as $i => $i_value) {
            $data[$i_value->parameter_head] = DB::table('mstr_bank_detail_parameter')->select('id', 'parameter_level_1', 'display_parameter_level_1','display_flag')->where('is_active', '=', 1)->where('parameter_head', '=', $i_value->parameter_head)->orderBy('parameter_level_1')->get();
        }

        if (!$bankingHeader->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
            "status" => false
        ], 201);
    }

    function getAllBankingParameter()
    {
        $data = DB::table('mstr_bank_detail_parameter')->select('id', 'parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->orderBy('sort_order')->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }

    function deleteFromBankingHeader(Request $request)
    {
        DB::table('banking_header')->where('account_no', $request->field)->delete();
        return response()->json([
            "message" => 'Data not available',
        ], 201);
    }


    function saveDocumentToMongoDb(Request $request)
    {
        $mongoFileUpload = new MongoFileUpload();
        $mongoFileUpload->file = $request->file;
        $mongoFileUpload->save();
        $insert_id = $mongoFileUpload->_id;
        if (!$insert_id) {
            Log::error('Failed to save File In mongodb');
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save File In mongodb',
                "id" => null
            ], 417);
        } else {
            return response()->json([
                "message" => 'Saved Successfully',
                "id" => $insert_id
            ], 201);
        }
    }

    public function addDocumentChecklist(Request $request)
    {
        //$addDocCheck = new DocumentChecklist();
        $addDocCheck = DocumentChecklist::firstOrNew(['id'=>$request->document_checklist_id]);
        $addDocCheck->document_master_id   = $request->document_master_id;
        $addDocCheck->required_phase       = $request->required_phase;
        $addDocCheck->required             = $request->required;
        $addDocCheck->original_required    = $request->original_required;
        $addDocCheck->document_type        = $request->document_type;
        $addDocCheck->length               = $request->length;
        $addDocCheck->time_grain           = $request->time_grain;
        $addDocCheck->sort_order           = $request->sort_order;
        $addDocCheck->form                 = $request->form;
        $addDocCheck->enable                 =   true;
        $addDocCheck->is_active              =   true;
        if (DocumentChecklist::where(['id' => $request->id])->count() > 0) {
            $addDocCheck->modified_on = now();
            $addDocCheck->modified_by = 1;
        } else {
            $addDocCheck->created_by = 1;
            $addDocCheck->created_on = now();
        }
        $addDocCheck->save();
        $insert_id = $addDocCheck->id;
        $data = $addDocCheck->getAttributes();
        $redis = $this->setReddis($data, 'entity');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['document_checklist_id']           =   $insert_id;
        
        if ($request->document_checklist_id) {
            return response()->json([
                "message" => 'document updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'document saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

    public function updateDocumentChecklist(Request $request)
    {

        $updateDocCheck = DocumentChecklist::find($request->document_checklist_id);
        $updateDocCheck->document_master_id   = $request->document_master_id;
        $updateDocCheck->required_phase       = $request->required_phase;
        $updateDocCheck->required             = $request->required;
        $updateDocCheck->original_required    = $request->original_required;
        $updateDocCheck->document_type        = $request->document_type;
        $updateDocCheck->length               = $request->length;
        $updateDocCheck->time_grain           = $request->time_grain;
        $updateDocCheck->sort_order           = $request->sort_order;
        $updateDocCheck->form                 = $request->form;
        $updateDocCheck->enable                 =   1;
        $updateDocCheck->is_active              =   1;
        $updateDocCheck->created_by             =   1;
        $updateDocCheck->created_on             =   now();
        $updateDocCheck->modified_by            =   1;
        $updateDocCheck->modified_on            =   now();
        $updateDocCheck->save();
        $data['document_checklist_id']           =   $updateDocCheck->id;
        if ($data['document_checklist_id']) {
            return response()->json([
                "status" => true,
                "message" => 'Successfuly update',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 201);
        }
    }

    public function getDocumentChecklistById(Request $request)
    {
        $getDocumentChecklist = DocumentChecklist::where('id', $request->document_checklist_id)->first();
        if (!empty($getDocumentChecklist)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getDocumentChecklist
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

   public function deleteDocumentChecklistById(Request $request)
    {
        $deleteDocumentChecklist = DocumentChecklist::find($request->document_checklist_id);
        $deleteDocumentChecklist->is_active  = 0;
        $deleteDocumentChecklist->save();
        if (!empty($deleteDocumentChecklist)) {
            return response()->json([
                "status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }

    public function getGeneralSettingByParameter(Request $request)
    {
        //$data = GeneralSetting::where('is_active', '=', 1)->where('enable', '=', 1)->where('parameter_name', '=', $request->parameter_name)->get();
        $data = DB::table('general_settings')->where('is_active', '=', 1)->where('enable', '=', 1)->where('parameter_name', '=', $request->parameter_name)->get();
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function getGeneralSettingForMultiple(Request $request)
    {

        for ($i = 0; $i < count($request->parameter_name); $i++) {
            $data[$request->parameter_name[$i]] = DB::table('general_settings')
                ->where('parameter_name', '=', $request->parameter_name[$i])
                ->get();
        }
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    function getbusinessgstbyParentidAndType(Request $request)
    {
        if ($request->has('enable')) {
            $gst = GSTHeader::where('parent_type_id',  $request->parent_type_id)->where('parent_id',  $request->parent_id)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
        } else {
            $gst = GSTHeader::where('parent_type_id',  $request->parent_type_id)->where('parent_id',  $request->parent_id)->where('is_active', '=', 1)->get();
        }
        if (!$gst->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $gst
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    //FOR SHOWING STATUS      ------REFERENCE
    function getBankingDetailsBusinessAndPromoterById(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id, entity_types.entity as entity_type
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;
            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";

            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $businessArrayData = [];
            foreach ($businessData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select banking_header.id as id,banking_header.parent_type_id,banking_header.parent_id,banking_header.account_no,
                banking_header.bank_id,banking_header.account_type,bank.name as bank_name,master_table.name as account_type_name,banking_header.edc_pg_id,
                banking_header.nature_of_account,(select count(*) from banking_details where bank_header_id = banking_header.id) as countRow
                from banking_header left join bank on bank.id = banking_header.bank_id
                left join master_table on master_table.id = banking_header.nature_of_account
                where banking_header.is_active = 1 and parent_id = ' . $i_value->id . ' and parent_type_id = 1 order by banking_header.id';
                $bankingHeaderDetails = DB::select($query);
				$count = DB::select('select banking_header.id as id ,(select count(*) from banking_details where bank_header_id = banking_header.id) as countRow
                from banking_header where banking_header.is_active = 1 and parent_id = ' . $i_value->id . ' and parent_type_id = 1 order by banking_header.id');
                //Log::info($count);
                $countbank = 0;
                foreach($count as $j => $j_value){
                   //Log::info($j_value->countrow);
                   if($j_value->countrow > 0){
                        $countbank++;
                   }
                }
                $i_value->bankingHeader = $bankingHeaderDetails;
				$i_value->bankEntered = $countbank;
                $businessData[$i] = $i_value;
            }
            foreach ($promoterData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select banking_header.id as id,banking_header.parent_type_id,banking_header.parent_id,banking_header.account_no,
                banking_header.bank_id,banking_header.account_type,bank.name as bank_name,master_table.name as account_type_name,banking_header.edc_pg_id,
                banking_header.nature_of_account,(select count(*) from banking_details where bank_header_id = banking_header.id) as countRow
                from banking_header left join bank on bank.id = banking_header.bank_id
                left join master_table on master_table.id = banking_header.nature_of_account
                where banking_header.is_active = 1 and parent_id = ' . $i_value->id . ' and parent_type_id = 2 order by banking_header.id';
                $bankingHeaderDetails = DB::select($query);
				$count = DB::select('select banking_header.id as id ,(select count(*) from banking_details where bank_header_id = banking_header.id) as countRow
                from banking_header where banking_header.is_active = 1 and parent_id = ' . $i_value->id . ' and parent_type_id = 2 order by banking_header.id');
                //Log::info($count);
                $countbank = 0;
                foreach($count as $j => $j_value){
                   //Log::info($j_value->countrow);
                   if($j_value->countrow > 0){
                        $countbank++;
                   }
                }
                $i_value->bankingHeader = $bankingHeaderDetails;
				$i_value->bankEntered = $countbank;
                $promoterData[$i] = $i_value;
            }
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    function getWorkingCapitalDetailsBusinessAndPromoterById(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id, entity_types.entity as entity_type
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;
            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";
            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $businessArrayData = [];
            foreach ($businessData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select working_capital.*,business_infos.name as bus_name,bank.name as bank_name,master_table.name as typename
                from working_capital
                left join business_infos on business_infos.id = working_capital.parent_id
                left join bank on bank.id = working_capital.bank_id
                left join master_table on master_table.id = working_capital.type_id
                where working_capital.is_active = 1 and working_capital.parent_id = ' . $i_value->id . ' and working_capital.parent_type_id = 1 order by working_capital.id';
                $workingcapitald = DB::select($query);
                $i_value->workingCapital = $workingcapitald;
                $businessData[$i] = $i_value;
            }
            foreach ($promoterData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select working_capital.*,business_infos.name as bus_name,bank.name as bank_name,master_table.name as typename
                from working_capital
                left join business_infos on business_infos.id = working_capital.parent_id
                left join bank on bank.id = working_capital.bank_id
                left join master_table on master_table.id = working_capital.type_id
                where working_capital.is_active = 1 and working_capital.parent_id = ' . $i_value->id . ' and working_capital.parent_type_id = 2 order by working_capital.id';
                $workingcapitald = DB::select($query);
                $i_value->workingCapital = $workingcapitald;
                $promoterData[$i] = $i_value;
            }
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    function getLoansDetailsBusinessAndPromoterById(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id, entity_types.entity as entity_type
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;
            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";

            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $businessArrayData = [];
            foreach ($businessData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select loan.*, bank.name as financer_name,loan_types.name as loan_types,tenure_table.name as original_tenure_name,bank_master.name as bank_name
                from loan
                left join bank on bank.id  = loan."Financer_id"
                left join loan_types as loan_types on loan_types.id = loan. "Loan_type_id"
                left join master_table as tenure_table on tenure_table.id = loan."Original_tenure_id"
				left join bank as bank_master on bank_master.id = loan.bank_id
                where loan.is_active = 1 and loan.parent_id = ' . $i_value->id . ' and loan.parent_type_id = 1 order by loan.id';
                $loan = DB::select($query);
                $i_value->loanForBusiness = $loan;
                $businessData[$i] = $i_value;
            }
            foreach ($promoterData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select loan.*, bank.name as financer_name,loan_types.name as loan_types,tenure_table.name as original_tenure_name,bank_master.name as bank_name
                from loan
                left join bank on bank.id  = loan."Financer_id"
                left join loan_types as loan_types on loan_types.id = loan. "Loan_type_id"
                left join master_table as tenure_table on tenure_table.id = loan."Original_tenure_id"
				left join bank as bank_master on bank_master.id = loan.bank_id
                where loan.is_active = 1 and loan.parent_id = ' . $i_value->id . ' and loan.parent_type_id = 2 order by loan.id';
                $loan = DB::select($query);
                $i_value->loanForBusiness = $loan;
                $promoterData[$i] = $i_value;
            }
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    public function deleteBankingHeader(Request $request)
    {

        $deleteDoc = Banking_header::find($request->id);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();
        $updateId = $deleteDoc->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }


    function getAssetsDetailsBusinessAndPromoterById(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id, entity_types.entity as entity_type
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;
            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";

            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $businessArrayData = [];
            foreach ($businessData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select asset_details.*,asset_headers.id as asset_header_id,asset_headers.file_no as file_no,asset_headers.parent_type_id as parent_type_id,
                asset_headers.parent_id as parent_id,asset_headers.asset_type_id,asset_headers.asset_sub_type_id,asset_headers.Asset_name,asset_headers.eligibility_flag,
                master_table.name as purpose_name,cat_master.name as category_name,usage_master.name as usage_type_name,measure_master.name as measure_facing_road_name,
                floor_master.name as type_of_floor_name,assettype_master.name as asset_type_name,assetsubtype_master.name as asset_sub_type_name,
                pin_master.area as area, pin_master.city_id as city_id, pin_master.state_id as state_id,state_master.state_name as state_name,
                city_master.city as city, pin_master.pincode as pincode
                from 	asset_details
                left join asset_headers on asset_headers.id = asset_details.asset_header_id
                left join master_table on master_table.id = asset_details.purpose_id
                left join master_table as cat_master on cat_master.id = asset_details.category_id
                left join master_table as usage_master on usage_master.id = asset_details.usage_type_id
                left join master_table as measure_master on measure_master.id = asset_details.measure_facing_road_id
                left join master_table as floor_master on floor_master.id = asset_details.type_of_floor_id
                left join master_table as assettype_master on assettype_master.id = asset_headers.asset_type_id
                left join master_table as assetsubtype_master on assetsubtype_master.id = asset_headers.asset_sub_type_id
                left join pin_codes as pin_master on pin_master.id = asset_details.pin_id
                left join states as state_master on state_master.id = pin_master.state_id
                left join city as city_master on city_master.id = pin_master.city_id
                where asset_headers.is_active = 1 and asset_headers.parent_id = ' . $i_value->id . ' and asset_headers.parent_type_id = 1 order by asset_details.id';
                $assets = DB::select($query);
                $i_value->AssetsForBusiness = $assets;
                $businessData[$i] = $i_value;
            }
            foreach ($promoterData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select asset_details.*,asset_headers.id as asset_header_id,asset_headers.file_no as file_no,asset_headers.parent_type_id as parent_type_id,
                asset_headers.parent_id as parent_id,asset_headers.asset_type_id,asset_headers.asset_sub_type_id,asset_headers.Asset_name,asset_headers.eligibility_flag,
                master_table.name as purpose_name,cat_master.name as category_name,usage_master.name as usage_type_name,measure_master.name as measure_facing_road_name,
                floor_master.name as type_of_floor_name,assettype_master.name as asset_type_name,assetsubtype_master.name as asset_sub_type_name,
                pin_master.area as area, pin_master.city_id as city_id, pin_master.state_id as state_id,state_master.state_name as state_name,
                city_master.city as city, pin_master.pincode as pincode
                from 	asset_details
                left join asset_headers on asset_headers.id = asset_details.asset_header_id
                left join master_table on master_table.id = asset_details.purpose_id
                left join master_table as cat_master on cat_master.id = asset_details.category_id
                left join master_table as usage_master on usage_master.id = asset_details.usage_type_id
                left join master_table as measure_master on measure_master.id = asset_details.measure_facing_road_id
                left join master_table as floor_master on floor_master.id = asset_details.type_of_floor_id
                left join master_table as assettype_master on assettype_master.id = asset_headers.asset_type_id
                left join master_table as assetsubtype_master on assetsubtype_master.id = asset_headers.asset_sub_type_id
                left join pin_codes as pin_master on pin_master.id = asset_details.pin_id
                left join states as state_master on state_master.id = pin_master.state_id
                left join city as city_master on city_master.id = pin_master.city_id
                where asset_headers.is_active = 1 and asset_headers.parent_id = ' . $i_value->id . ' and asset_headers.parent_type_id = 2 order by asset_details.id';
                $assets = DB::select($query);
                $i_value->AssetsForBusiness = $assets;
                $promoterData[$i] = $i_value;
            }
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    //status purpose
    function getGstDetailsBusinessAndPromoterById(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id, entity_types.entity as entity_type
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;
            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";

            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $businessArrayData = [];
            foreach ($businessData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select gst_header.*,states.state_name as state_name,
								(select count(*) from gst_detail where gst_header_id = gst_header.id) as countRow
                from gst_header
                left join states on states.state_id = gst_header.state_id
                where gst_header.is_active = 1 and gst_header.parent_id = ' . $i_value->id . ' and gst_header.parent_type_id = 1 order by gst_header.id';
                $gst = DB::select($query);
                $i_value->GstForBusiness = $gst;
                $businessData[$i] = $i_value;
            }
            foreach ($promoterData as $i => $i_value) {
                // echo $i_value->parameter_head;
                $query = 'select gst_header.*,states.state_name as state_name,
								(select count(*) from gst_detail where gst_header_id = gst_header.id) as countRow
                from gst_header
                left join states on states.state_id = gst_header.state_id
                where gst_header.is_active = 1 and gst_header.parent_id = ' . $i_value->id . ' and gst_header.parent_type_id = 2 order by gst_header.id';
                $gst = DB::select($query);
                $i_value->GstForBusiness = $gst;
                $promoterData[$i] = $i_value;
            }
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


    public function deleteLoan(Request $request)
    {

        $deleteDoc = Loan::find($request->id);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();
        $updateId = $deleteDoc->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function deleteWorkingCapital(Request $request)
    {

        $deleteDoc = WorkingCaptial::find($request->id);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();
        $updateId = $deleteDoc->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function deleteAssetsHeader(Request $request)
    {

        $deleteDoc = AssetHeader::find($request->id);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();
        $updateId = $deleteDoc->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function deleteGstHeader(Request $request)
    {

        $deleteDoc = GSTHeader::find($request->id);
        $deleteDoc->is_active = 0;
        $deleteDoc->save();
        $updateId = $deleteDoc->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function getindustryByid(Request $request)
    {
        $data = DB::table('industry_group')->select('id', 'name')->where('is_active', '=', 1)->where('industry_type_id', '=', $request->industry_type_id)->get();

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function getIndustry(Request $request)
    {

        $data = DB::table('industry_names')->where('is_active', '=', 1)->where('industry_group_id', '=', $request->industry_group_id)->get();
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    //GET ALL BY BUSINESS AND PROMOTER ID
    function getFinanceDetailsBusinessAndPromoterById(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

            $query1 = 'select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
            business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id, entity_types.entity as entity_type,
            (select count(*) from finance_header where parent_type_id = 1 and parent_id = business_infos.id) as countRow
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id =' . $request->user_id;
            $query2 = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile,
            (select count(*) from finance_header where parent_type_id = 2 and parent_id = promoter_info.id) as countRow
             from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by promoter_info.id";

            $businessData = DB::select($query1);
            $promoterData = DB::select($query2);
            $data['businessList'] = $businessData;
            $data['promoterList'] = $promoterData;
        }

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    //GET FINANCE DYNAMIC DETAILS
    public function getFinanceHeaderParameterDetails()
    {
        $header = DB::table('mstr_finance_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->where('form_type', '=', 'Extended')->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
        foreach ($header as $i => $i_value) {
            $headerData['parameter_head'] = str_replace(' ', '', $i_value->parameter_head);
            $headerData['display_parameter_head'] = $i_value->display_parameter_head;
            $label1Parameter = DB::table('mstr_finance_parameter')->select('parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $i_value->parameter_head)->where('form_type', '=', 'Extended')->groupBy('parameter_level_1', 'display_parameter_level_1')->orderBy('parameter_level_1')->get();
            $labelData = [];
            foreach ($label1Parameter as $j => $j_value) {
                $lebel1Data['parameter_level_1'] = str_replace(' ', '', $j_value->parameter_level_1);
                $lebel1Data['display_parameter_level_1'] = $j_value->display_parameter_level_1;
                $label2Data = DB::table('mstr_finance_parameter')->select('id as value', 'display_parameter_level_2 as label')->where('is_active', '=', 1)->where('parameter_level_1', '=', $j_value->parameter_level_1)->where('form_type', '=', 'Extended')->orderBy('parameter_level_2')->get();
                $lebel1Data['label1Details'] = $label2Data;
                $labelData[$j] = $lebel1Data;
            }
            $headerData['headerDetails'] = $labelData;
            $data[$i] = $headerData;
        }
        return response()->json([
            "message" => 'Data retrive successfully',
            "status" => true,
            "data" => $data
        ], 201);
    }

    //SAVE FINANCE DETAILS
   /* public function saveFinanceDetails(Request $request)
    {
        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }
        $finance_header = Finance_header::firstOrNew(['parent_id' => $request->parent_id, 'parent_type_id' => $request->parent_type_id]);
        $finance_header->data_submit_type = 1;
        $finance_header->parent_type_id = $request->parent_type_id;
        $finance_header->parent_id = $request->parent_id;
        $finance_header->enable = 1;
        $finance_header->is_active = 1;
        $finance_header->eligibility_flag = $request->eligibility_flag;
        if (Finance_header::where('parent_id', '=', $request->parent_id)->where('parent_type_id', '=', $request->parent_type_id)->count() > 0) {
            $finance_header->modified_on = now();
            if ($request->has('created_by')) {
                $finance_header->modified_by = $request->created_by;
            } else {
                $finance_header->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $finance_header->created_by = $request->created_by;
            } else {
                $finance_header->created_by = $request->user_id;
            }
            $finance_header->created_on = now();
            $finance_header->modified_on = now();
            $finance_header->modified_by = $request->created_by;
            $file_no = (string) Str::uuid();
            $finance_header->file_no = $file_no;
            $this->saveFileFolderMappingDetails('Finance', $file_no, $request->user_id);
        }
        $finance_header->record_status = 1;
        $finance_header->save();
        $insert_header_id = $finance_header->id;

        $label1HeaderDetails = DB::table('mstr_finance_parameter')->select('parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('form_type', '=', 'Extended')->groupBy('parameter_level_1', 'display_parameter_level_1')->orderBy('parameter_level_1')->get();
        foreach ($label1HeaderDetails as $i => $i_value) {
            if (count($request->result[str_replace(' ', '', $i_value->parameter_level_1)]) > 0) {
				Log::info(print_r($request->result[str_replace(' ', '', $i_value->parameter_level_1)],true));
                foreach ($request->result[str_replace(' ', '', $i_value->parameter_level_1)] as $j => $j_value) {
					for ($k = 0; $k < 3; $k++) {
						//$searchForValue = ',';
						$yearvalue = $j_value['year' . ($k + 1) . 'value'];
						if( strpos($yearvalue, ",") !== false ) {
								 $yearval = str_replace(',','',$yearvalue);
							} else {
								$yearval = $yearvalue;
							}
						
						//Log::info($yearval);
                        $finance = Finance_data::firstOrNew(['mstr_finance_parameter_id' => $j_value['id'], 'finance_header_id' => $insert_header_id, 'year' => $j_value['year' . ($k + 1)]]);
                        $finance->finance_header_id = $insert_header_id;
                        $finance->full_flag = 1;
                        $finance->mstr_finance_parameter_id = $j_value['id'];
                        $finance->year = $j_value['year' . ($k + 1)];
                       // $finance->value = str_replace(',','',$j_value['year' . ($k + 1) . 'value']);
					   $finance->value = $yearval;
                        $finance->enable = 1;
                        $finance->is_active = 1;

                        if (Finance_data::where('mstr_finance_parameter_id', '=', $j_value['id'])->where('finance_header_id', '=', $insert_header_id)->where('year', '=', $j_value['year' . ($k + 1)])->count() > 0) {
                            $finance->modified_on = now();
                            if ($request->has('created_by')) {
                                $finance->modified_by = $request->created_by;
                            } else {
                                $finance->modified_by = $request->user_id;
                            }
                        } else {
                            if ($request->has('created_by')) {
                                $finance->created_by = $request->created_by;
                            } else {
                                $finance->created_by = $request->user_id;
                            }
                            $finance->created_on = now();
                            $finance->modified_on = now();
                            $finance->modified_by = $request->created_by;
                        }
                        $finance->save();
                        //$data = $finance->getAttributes();
                        //$res_data[] = $data;
                    }
                }
            }
        }

        return response()->json([
            "message" => 'Finance inserted Successfuly',
            "status" => true
            //"Data" => $res_data
        ], 201);
    }
*/
//SAVE FINANCE DETAILS
   public function saveFinanceDetails(Request $request)
    {
       // Log::info(print_r($request,true));
        //Log::info($request->user_id);
       // print_r($request, true);
       // exit();
        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }
        $finance_header = Finance_header::firstOrNew(['parent_id' => $request->parent_id, 'parent_type_id' => $request->parent_type_id]);
        $finance_header->data_submit_type = 1;
        $finance_header->parent_type_id = $request->parent_type_id;
        $finance_header->parent_id = $request->parent_id;
        $finance_header->enable = 1;
        $finance_header->is_active = 1;
        $finance_header->eligibility_flag = $request->eligibility_flag;
        if (Finance_header::where('parent_id', '=', $request->parent_id)->where('parent_type_id', '=', $request->parent_type_id)->count() > 0) {
            $finance_header->modified_on = now();
            if ($request->has('created_by')) {
                $finance_header->modified_by = $request->created_by;
            } else {
                $finance_header->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $finance_header->created_by = $request->created_by;
            } else {
                $finance_header->created_by = $request->user_id;
            }
            $finance_header->created_on = now();
            $finance_header->modified_on = now();
            $finance_header->modified_by = $request->created_by;
            $file_no = (string) Str::uuid();
            $finance_header->file_no = $file_no;
            $this->saveFileFolderMappingDetails('Finance', $file_no, $request->user_id);
        }
        $finance_header->record_status = 1;
        $finance_header->save();
        $insert_header_id = $finance_header->id;

        $label1HeaderDetails = DB::table('mstr_finance_parameter')->select('parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('form_type', '=', 'Extended')->groupBy('parameter_level_1', 'display_parameter_level_1')->orderBy('parameter_level_1')->get();
        foreach ($label1HeaderDetails as $i => $i_value) {
            if(isset($request->result[str_replace(' ', '', $i_value->parameter_level_1)])){
            if (count($request->result[str_replace(' ', '', $i_value->parameter_level_1)]) > 0) {
				Log::info(print_r($request->result[str_replace(' ', '', $i_value->parameter_level_1)],true));
                foreach ($request->result[str_replace(' ', '', $i_value->parameter_level_1)] as $j => $j_value) {
                    $years = 0;
					if($request->loan_type == 1){
						$years = 2;
					}
					else{
						$years = 3;
					}
                    //Log::info($years);
                    for ($k = 1; $k <= $years; $k++) {
						 if(isset($j_value['year' . ($k) . 'value'])){
						$yearvalue = $j_value['year' . ($k) . 'value'];
						//Log::info($yearvalue);
						if( strpos($yearvalue, ",") !== false ) {
								 $yearval = str_replace(',','',$yearvalue);
							} else {
								$yearval = $yearvalue;
							}
						
						//Log::info($yearval);
                        $finance = Finance_data::firstOrNew(['mstr_finance_parameter_id' => $j_value['id'], 'finance_header_id' => $insert_header_id, 'year' => $j_value['year' . ($k)]]);
                        $finance->finance_header_id = $insert_header_id;
                        $finance->full_flag = 1;
                        $finance->mstr_finance_parameter_id = $j_value['id'];
                        $finance->year = $j_value['year' . ($k)];
                        $finance->value = str_replace(',','',$j_value['year' . ($k) . 'value']);
					   $finance->value = $yearval;
                        $finance->enable = 1;
                        $finance->is_active = 1;
                        if (Finance_data::where('mstr_finance_parameter_id', '=', $j_value['id'])->where('finance_header_id', '=', $insert_header_id)
                        ->where('year', '=', $j_value['year' . ($k)])->count() > 0) {
                            $finance->modified_on = now();
                            if ($request->has('created_by')) {
                                $finance->modified_by = $request->created_by;
                            } else {
                                $finance->modified_by = $request->user_id;
                            }
                        } else {
                            if ($request->has('created_by')) {
                                $finance->created_by = $request->created_by;
                            } else {
                                $finance->created_by = $request->user_id;
                            }
                            $finance->created_on = now();
                            $finance->modified_on = now();
                            $finance->modified_by = $request->created_by;
                        }
                       //Log::info($finance);
                        $finance->save();
                        $data = $finance->getAttributes();
                        $res_data[] = $data;
						//Log::info(print_r($res_data[],true));
                    }
                }
                }
            }
        }
    }

        return response()->json([
            "message" => 'Finance inserted Successfuly',
            "status" => true,
            "Data" => $res_data
        ], 201);
    }



   public function getFinanceHeaderParameterDetailsByParentId(Request $request)
    {   
        $month = date('m');
        $year = date('Y');
        $year1 = '';
        $year2 = '';
        $year3 = '';
        if ($month > 8) {
            $year1 =  $year . '-' . ($year + 1);
            $year2 = ($year - 1) . '-' . $year;
            $year3 = ($year - 2) . '-' . ($year - 1);
        } else {
            $year1 = ($year - 1) . '-' . $year;
            $year2 = ($year - 2) . '-' . ($year - 1);
            $year3 = ($year - 3) . '-' . ($year - 2);
        }
        //$yearData = [$year1, $year2, $year3];
  if($request->loanType == 1){
            $yearData = [$year1, $year2];
        }else {
            $yearData = [$year1, $year2, $year3];
        }
        $finance_header = Finance_header::firstOrNew(['parent_id' => $request->parent_id, 'parent_type_id' => $request->parent_type_id]);
        if ($finance_header->id != '') {
            $header = DB::table('mstr_finance_parameter')->select('parameter_head', 'display_parameter_head')->where('is_active', '=', 1)->where('form_type', '=', 'Extended')->groupBy('parameter_head', 'display_parameter_head')->orderBy('parameter_head')->get();
            foreach ($header as $i => $i_value) {
                $headerData['parameter_head'] = str_replace(' ', '', $i_value->parameter_head);
                $headerData['display_parameter_head'] = $i_value->display_parameter_head;
                $label1Parameter = DB::table('mstr_finance_parameter')->select('parameter_level_1', 'display_parameter_level_1')->where('is_active', '=', 1)->where('parameter_head', '=', $i_value->parameter_head)->where('form_type', '=', 'Extended')->groupBy('parameter_level_1', 'display_parameter_level_1')->orderBy('parameter_level_1')->get();
                $labelData = [];
                foreach ($label1Parameter as $j => $j_value) {
                    $lebel1Data['parameter_level_1'] = str_replace(' ', '', $j_value->parameter_level_1);
                    $lebel1Data['display_parameter_level_1'] = $j_value->display_parameter_level_1;
                    $label2Data = DB::table('mstr_finance_parameter')->select('id as value', 'display_parameter_level_2 as label')->where('is_active', '=', 1)->where('parameter_level_1', '=', $j_value->parameter_level_1)->where('form_type', '=', 'Extended')->orderBy('parameter_level_2')->get();
                    $lebel1Data['label1Details'] = $label2Data;
                    $query1 = "select mstr_finance_parameter.id as value,display_parameter_level_2 as label from finance_details
                inner join mstr_finance_parameter on mstr_finance_parameter.id = finance_details.mstr_finance_parameter_id
                where finance_header_id = " . $finance_header->id . " and parameter_level_1='" . $j_value->parameter_level_1 . "'
                group by mstr_finance_parameter.id,display_parameter_level_2";
                    //Log::info($query1);
					$selectedData = DB::select($query1);
                    $lebel1Data['selectedParameter'] = $selectedData;
                    $selectedDataArray = [];
                    foreach ($selectedData as $k => $k_value) {
                        $parameterData = '{"id":' . $k_value->value . ',"display_parameter_level_2":"' . $k_value->label . '",';
                        for ($l = 0; $l < count($yearData); $l++) {
                            $query2 = "select value from finance_details
                        inner join mstr_finance_parameter on mstr_finance_parameter.id = finance_details.mstr_finance_parameter_id
                        where finance_header_id = " . $finance_header->id . " and mstr_finance_parameter.id = " . $k_value->value . " and finance_details.year ='" . $yearData[$l] . "'";
						//Log::info($query2 );
                            $paremeterValue = DB::select($query2);
							//Log::info($paremeterValue);
							if(isset($paremeterValue[0]->value)){
                            $parameterData .= '"year' . ($l + 1) . '":"' . $yearData[$l] . '","year' . ($l + 1) . 'value":"' . $paremeterValue[0]->value . '",';
                        }
						}
                        $parameterData = rtrim($parameterData, ',');
                        $parameterData .= '}';
                        $selectedDataArray[$k] = json_decode($parameterData);
                    }
                    $lebel1Data['selectedParameterValue'] = $selectedDataArray;
                    $labelData[$j] = $lebel1Data;
                }
                $headerData['headerDetails'] = $labelData;
                $data[$i] = $headerData;
            }
            return response()->json([
                "message" => 'Data retrive successfully',
                "status" => true,
                "data" => $data
            ], 201);
        }
        return response()->json([
            "message" => 'No record found',
            "status" => false
        ], 201);
    }

   /* public function saveLoan3rdPartyResult(Request $request)
    {
        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }



        //    print_r($request->result);
        //Log::info($request->result['RESPONSES']['RESPONSE']);

        for ($i = 0; $i < count($request->result['RESPONSES']['RESPONSE']); $i++) {

            $loanData = $request->result['RESPONSES']['RESPONSE'][$i]['LOAN-DETAILS'];
            $loan = Loan::firstOrNew(['id' => $request->loan_id]);
            $loan->parent_type_id = $request->parent_type_id;
            $loan->parent_id = $request->parent_id;
            $loan->Eligibility_flag = 0;
            $loan->data_submit_type = 0;
            if (array_key_exists("CREDIT-GUARANTOR", $loanData)) {
                $loanData['CREDIT-GUARANTOR'] = strtolower($loanData['CREDIT-GUARANTOR']);
                $bankData = DB::select("select * from bank where name = '" . $loanData['CREDIT-GUARANTOR'] . "'");
                //echo $bankData[0]->id;
                $loan['Financer_id'] = $bankData[0]->id;
            }
            if (array_key_exists("ACCT-TYPE", $loanData)) {
                $loanType = DB::select("select * from loan_types where name = '" . $loanData['ACCT-TYPE'] . "'");
                $loan['Loan_type_id'] = $loanType[0]->id;
            }
            if (array_key_exists("DISBURSED-AMT", $loanData)) {
                //echo (int)$loanData['DISBURSED-AMT'];
                $loan['Loan_amount'] = (int)str_replace(',', '', $loanData['DISBURSED-AMT']);
            }
            // if (array_key_exists("LAST-PAYMENT-DATE", $loanData) && array_key_exists("DISBURSED-DT", $loanData)) {
            //     //$loan['Original_tenure_id'] = (int)str_replace(',', '', date_diff(date_create($loanData['DISBURSED-DT']), date_create($loanData['LAST-PAYMENT-DATE']))->format("%a"));
            // }

            if (array_key_exists("INSTALLMENT-AMOUNT", $loanData)) {
                $loan['EMI'] = (int)str_replace(',', '', $loanData['INSTALLMENT-AMOUNT']);
            } else {
                if (array_key_exists("ACTUAL-PAYMENT", $loanData)) {
                    $loan['EMI'] = (int)str_replace(',', '', $loanData['ACTUAL-PAYMENT']);
                }
            }
            if (array_key_exists("ACTUAL-PAYMENT", $loanData)) {
                if ($loanData['ACTUAL-PAYMENT'] == 0) {
                    $loan['No_of_emi'] = 1;
                    $loan['Original_tenure_id'] = (int)$loan['Loan_amount'];
                } else {
                    $loan['No_of_emi'] = $loan['Loan_amount'] / $loan['EMI'];
                    $loan['Original_tenure_id'] = (int)($loan['Loan_amount'] / $loan['EMI']);
                    Log:
                    info('original tenure --- ' . $loan['Original_tenure_id']);
                }
            }

            if (array_key_exists("ACCOUNT-STATUS", $loanData)) {

                //$loan['Loan_still_open'] = $loanData['ACCOUNT-STATUS'];
                if ($loanData['ACCOUNT-STATUS'] = "Active") {
                    $loan['Loan_still_open'] = true;
                } else {
                    $loan['Loan_still_open'] = false;
                }
            }
            //   Log::info($loanData);
            //     exit();
            if (array_key_exists("COMBINED-PAYMENT-HISTORY", $loanData)) {
                Log::info("exitsss");

                // Log::info($loanData['COMBINED-PAYMENT-HISTORY']);

                $actulatPaymentHistory = $loanData['COMBINED-PAYMENT-HISTORY'];
                Log::info("act pay");
                Log::info($actulatPaymentHistory);

                if (gettype($actulatPaymentHistory) == 'string') {
                    $paymentHiistory = explode("|", $loanData['COMBINED-PAYMENT-HISTORY']);
                } else {
                    $paymentHiistory = [];
                }

                //    Log::info($paymentHiistory);
                $today = date_default_timezone_set('Asia/Kolkata');
                $today = date("Y-m-d");
                Log::info("count----");

                if (count($paymentHiistory) > 0) {
                    $startDate = str_replace(":", " ", explode(",", $paymentHiistory[count($paymentHiistory) - 2])[0]);
                    $startDate = date("Y-m-d", strtotime("$startDate"));
                    $loan['EMI_start_date'] = $startDate;
                } else {
                    Log::info("entred");
                    $loan['EMI_start_date'] = $today;
                }


                Log::info($loan['EMI_start_date']);
                // $endDate = str_replace(":"," ",explode(",",$paymentHiistory[0])[0]);
                // $endDate = date( "Y-m-d",strtotime("$endDate"));
                // $loan['EMI_end_date'] = $endDate;
                //$loan['No_of_emi'] = count($paymentHiistory) - 1;
                // current date
                Log::info($today);


                $period = date_diff(date_create($loan['EMI_start_date']), date_create($today))->format('%a'); // diff b/w  current date & start date

                $result = array($period);
                $sub_struct_month = ($result[0] / 30);
                $sub_struct_month = floor($sub_struct_month);

                Log::info('Total Month   --   ' . $loan['Original_tenure_id']);
                Log::info('Subtract Month   ---  ' . $sub_struct_month);


                if (($loan['Original_tenure_id'] - $sub_struct_month) > 6) {
                    $loan['obligation_considered_greater_than_6m'] = abs(6 * $loan['EMI']);
                    Log::info('obligation_considered_greater_than_6m --- ' . $loan['obligation_considered_less_than_12m']);
                } else {
                    $loan['obligation_considered_less_than_12m'] = abs(($loan['Original_tenure_id'] - $sub_struct_month) * $loan['EMI']);
                    Log::info('obligation_considered_less_than_12m --- ' . $loan['obligation_considered_less_than_12m']);
                }

                if (($loan['Original_tenure_id'] - $sub_struct_month) > 12) {
                    $loan['obligation_considered_greater_than_12m'] = abs(6 * $loan['EMI']);
                    Log::info('obligation_considered_greater_than_12m --- ' . $loan['obligation_considered_greater_than_12m']);
                }


                $query1 = "select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),':',cal_year) as label,'Month' as grain
                from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
                GROUP BY id,month_name,cal_year
                order by id DESC
                LIMIT 3";

                $data = DB::select($query1);
                //Log::info($data);
                $count = 0;
                if (gettype($actulatPaymentHistory) == 'string') {
                    for ($j = 0; $j < count($data); $j++) {
                        if (strpos($actulatPaymentHistory, $data[$j]->label) === false) {
                            $count++;
                        }
                    }
                }


                //Log::info($count);
                $loan['emi_bounce_in_3_months'] = $count;
                Log::info('emi_bounce_in_3_months ----' . $loan['emi_bounce_in_3_months']);


                $query2 = "select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),':',cal_year) as label,'Month' as grain
                from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
                GROUP BY id,month_name,cal_year
                order by id DESC
                LIMIT 6";
                $data = DB::select($query2);

                $count = 0;
                if (gettype($actulatPaymentHistory) == 'string') {
                    for ($j = 0; $j < count($data); $j++) {
                        if (strpos($actulatPaymentHistory, $data[$j]->label) === false) {
                            $count++;
                        }
                    }
                }
                $loan['emi_bounce_in_6_months'] = $count;
                Log::info('emi_bounce_in_6_months ----' . $loan['emi_bounce_in_6_months']);
            }

            if (array_key_exists("ACCT-NUMBER", $loanData)) {
                $loan['Account_no'] = $loanData['ACCT-NUMBER'];
            }
            if (array_key_exists("OVERDUE-AMT", $loanData)) {
                $loan['Remaining_emi'] = (int)str_replace(',', '', $loanData['OVERDUE-AMT']);
            }


            if (Loan::where('id', '=', $request->loan_id)->count() > 0) {
                $loan->modified_on = now();
                if ($request->has('created_by')) {
                    $loan->modified_by = $request->created_by;
                } else {
                    $loan->modified_by = $request->user_id;
                }
            } else {
                if ($request->has('created_by')) {
                    $loan->created_by = $request->created_by;
                } else {
                    $loan->created_by = $request->user_id;
                }
                $loan->created_on = now();
                $loan->modified_on = now();
                $loan->modified_by = $request->created_by;
                $file_no = (string) Str::uuid();
                $loan->file_no = $file_no;

                //$this->saveFileFolderMappingDetails('Loans', $file_no, $request->user_id);
            }
            //Log::info("Current Index" .$i);
            //Log::info($loan);

            $loan->save();
        }
        return response()->json([
            "message" => 'Loan information saved successfully',
            "status" => true,
            "data" => $loan
        ], 201);
        return response()->json([
            "message" => 'Failed to save Loan data',
            "status" => false
        ], 201);
    }*/
	
	public function saveLoan3rdPartyResult(Request $request)
    {
        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }



        //    print_r($request->result);
       // Log::info(count($request->result['RESPONSES']['RESPONSE']));
    if(count($request->result['RESPONSES']['RESPONSE']) > 1){
        for ($i = 0; $i < count($request->result['RESPONSES']['RESPONSE']); $i++) {

            $loanData = $request->result['RESPONSES']['RESPONSE'][$i]['LOAN-DETAILS'];
            $loan = Loan::firstOrNew(['id' => $request->loan_id]);
            $loan->parent_type_id = $request->parent_type_id;
            $loan->parent_id = $request->parent_id;
            $loan->Eligibility_flag = 0;
            $loan->data_submit_type = 0;
            $loan->source = "crif";
            if (array_key_exists("CREDIT-GUARANTOR", $loanData)) {
                $loanData['CREDIT-GUARANTOR'] = strtolower($loanData['CREDIT-GUARANTOR']);
                $bankData = DB::select("select * from bank where name = '" . $loanData['CREDIT-GUARANTOR'] . "'");
               // Log::info("select * from bank where name = '" . $loanData['CREDIT-GUARANTOR'] . "'");
                if(!empty($bankData)){
                    $loan['Financer_id'] = $bankData[0]->id;
                }else{
                    $loan->Financer_id = $request->financer;   
                }
            }
            if (array_key_exists("ACCT-TYPE", $loanData)) {
                $loanType = DB::select("select * from loan_types where name = '" . $loanData['ACCT-TYPE'] . "'");
				//$loanType = DB::select("select * from loan_types where name = 'Credit Card'");
				//Log::info(print_r("select * from loan_types where name = '" . $loanData['ACCT-TYPE'] . "'"));
                if(!empty($loanType)){
                $loan['Loan_type_id'] = $loanType[0]->id;
				//Log::info($loan['Loan_type_id']);
                }else{
                    $loan->Loan_type_id = $request->Loan_type;   
                }
				
            }
            if (array_key_exists("DISBURSED-AMT", $loanData)) {
                //echo (int)$loanData['DISBURSED-AMT'];
                $loan['Loan_amount'] = (int)str_replace(',', '', $loanData['DISBURSED-AMT']);
            }
            // if (array_key_exists("LAST-PAYMENT-DATE", $loanData) && array_key_exists("DISBURSED-DT", $loanData)) {
            //     //$loan['Original_tenure_id'] = (int)str_replace(',', '', date_diff(date_create($loanData['DISBURSED-DT']), date_create($loanData['LAST-PAYMENT-DATE']))->format("%a"));
            // }

            if (array_key_exists("INSTALLMENT-AMOUNT", $loanData)) {
                $loan['EMI'] = (int)str_replace(',', '', $loanData['INSTALLMENT-AMOUNT']);
            } else {
                if (array_key_exists("ACTUAL-PAYMENT", $loanData)) {
                    $loan['EMI'] = (int)str_replace(',', '', $loanData['ACTUAL-PAYMENT']);
                }
            }
            if (array_key_exists("ACTUAL-PAYMENT", $loanData)) {
                if ($loanData['ACTUAL-PAYMENT'] == 0) {
                    $loan['No_of_emi'] = 1;
                    $loan['Original_tenure_id'] = (int)$loan['Loan_amount'];
                } else {
                    $loan['No_of_emi'] = $loan['Loan_amount'] / $loan['EMI'];
                    $loan['Original_tenure_id'] = (int)($loan['Loan_amount'] / $loan['EMI']);
                    Log:
                    info('original tenure --- ' . $loan['Original_tenure_id']);
                }
            }

            if (array_key_exists("ACCOUNT-STATUS", $loanData)) {

                //$loan['Loan_still_open'] = $loanData['ACCOUNT-STATUS'];
                if ($loanData['ACCOUNT-STATUS'] = "Active") {
                    $loan['Loan_still_open'] = true;
                } else {
                    $loan['Loan_still_open'] = false;
                }
            }
            //   Log::info($loanData);
            //     exit();
            if (array_key_exists("COMBINED-PAYMENT-HISTORY", $loanData)) {
               // Log::info("exitsss");

                // Log::info($loanData['COMBINED-PAYMENT-HISTORY']);

                $actulatPaymentHistory = $loanData['COMBINED-PAYMENT-HISTORY'];
                //Log::info("act pay");
                //Log::info($actulatPaymentHistory);

                if (gettype($actulatPaymentHistory) == 'string') {
                    $paymentHiistory = explode("|", $loanData['COMBINED-PAYMENT-HISTORY']);
                } else {
                    $paymentHiistory = [];
                }

                //    Log::info($paymentHiistory);
                $today = date_default_timezone_set('Asia/Kolkata');
                $today = date("Y-m-d");
               // Log::info("count----");

                if (count($paymentHiistory) > 0) {
                    $startDate = str_replace(":", " ", explode(",", $paymentHiistory[count($paymentHiistory) - 2])[0]);
                    $startDate = date("Y-m-d", strtotime("$startDate"));
                    $loan['EMI_start_date'] = $startDate;
                } else {
                    Log::info("entred");
                    $loan['EMI_start_date'] = $today;
                }


               // Log::info($loan['EMI_start_date']);
                // $endDate = str_replace(":"," ",explode(",",$paymentHiistory[0])[0]);
                // $endDate = date( "Y-m-d",strtotime("$endDate"));
                // $loan['EMI_end_date'] = $endDate;
                //$loan['No_of_emi'] = count($paymentHiistory) - 1;
                // current date
               // Log::info($today);


                $period = date_diff(date_create($loan['EMI_start_date']), date_create($today))->format('%a'); // diff b/w  current date & start date

                $result = array($period);
                $sub_struct_month = ($result[0] / 30);
                $sub_struct_month = floor($sub_struct_month);

                Log::info('Total Month   --   ' . $loan['Original_tenure_id']);
                Log::info('Subtract Month   ---  ' . $sub_struct_month);


                if (($loan['Original_tenure_id'] - $sub_struct_month) > 6) {
                    $loan['obligation_considered_greater_than_6m'] = abs(6 * $loan['EMI']);
                    Log::info('obligation_considered_greater_than_6m --- ' . $loan['obligation_considered_less_than_12m']);
                } else {
                    $loan['obligation_considered_less_than_12m'] = abs(($loan['Original_tenure_id'] - $sub_struct_month) * $loan['EMI']);
                    Log::info('obligation_considered_less_than_12m --- ' . $loan['obligation_considered_less_than_12m']);
                }

                if (($loan['Original_tenure_id'] - $sub_struct_month) > 12) {
                    $loan['obligation_considered_greater_than_12m'] = abs(6 * $loan['EMI']);
                    Log::info('obligation_considered_greater_than_12m --- ' . $loan['obligation_considered_greater_than_12m']);
                }


                $query1 = "select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),':',cal_year) as label,'Month' as grain
                from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
                GROUP BY id,month_name,cal_year
                order by id DESC
                LIMIT 3";

                $data = DB::select($query1);
                //Log::info($data);
                $count = 0;
                if (gettype($actulatPaymentHistory) == 'string') {
                    for ($j = 0; $j < count($data); $j++) {
                        if (strpos($actulatPaymentHistory, $data[$j]->label) === false) {
                            $count++;
                        }
                    }
                }


                //Log::info($count);
                $loan['emi_bounce_in_3_months'] = $count;
                Log::info('emi_bounce_in_3_months ----' . $loan['emi_bounce_in_3_months']);


                $query2 = "select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),':',cal_year) as label,'Month' as grain
                from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
                GROUP BY id,month_name,cal_year
                order by id DESC
                LIMIT 6";
                $data = DB::select($query2);

                $count = 0;
                if (gettype($actulatPaymentHistory) == 'string') {
                    for ($j = 0; $j < count($data); $j++) {
                        if (strpos($actulatPaymentHistory, $data[$j]->label) === false) {
                            $count++;
                        }
                    }
                }
                $loan['emi_bounce_in_6_months'] = $count;
                Log::info('emi_bounce_in_6_months ----' . $loan['emi_bounce_in_6_months']);
            }

            if (array_key_exists("ACCT-NUMBER", $loanData)) {
                $loan['Account_no'] = $loanData['ACCT-NUMBER'];
            }
            if (array_key_exists("OVERDUE-AMT", $loanData)) {
                $loan['Remaining_emi'] = (int)str_replace(',', '', $loanData['OVERDUE-AMT']);
            }


            if (Loan::where('id', '=', $request->loan_id)->count() > 0) {
                $loan->modified_on = now();
                if ($request->has('created_by')) {
                    $loan->modified_by = $request->created_by;
                } else {
                    $loan->modified_by = $request->user_id;
                }
            } else {
                if ($request->has('created_by')) {
                    $loan->created_by = $request->created_by;
                } else {
                    $loan->created_by = $request->user_id;
                }
                $loan->created_on = now();
                $loan->modified_on = now();
                $loan->modified_by = $request->created_by;
                $file_no = (string) Str::uuid();
                $loan->file_no = $file_no;

                //$this->saveFileFolderMappingDetails('Loans', $file_no, $request->user_id);
            }
            //Log::info("Current Index" .$i);
            //Log::info($loan);

            $loan->save();
        }
    }else{
        if(count($request->result['RESPONSES']['RESPONSE']) > 0){
            $loanData = $request->result['RESPONSES']['RESPONSE']['LOAN-DETAILS'];
            Log::info($loanData);
            $loan = Loan::firstOrNew(['id' => $request->loan_id]);
            $loan->parent_type_id = $request->parent_type_id;
            $loan->parent_id = $request->parent_id;
            $loan->Eligibility_flag = 0;
            $loan->data_submit_type = 0;
            if (array_key_exists("CREDIT-GUARANTOR", $loanData)) {
                $loanData['CREDIT-GUARANTOR'] = strtolower($loanData['CREDIT-GUARANTOR']);
                $bankData = DB::select("select * from bank where name = '" . $loanData['CREDIT-GUARANTOR'] . "'");
                //echo $bankData[0]->id;
                if(!empty($bankData)){
                    $loan['Financer_id'] = $bankData[0]->id;
                }else{
                    $loan->Financer_id = $request->financer;   
                }
            }
            if (array_key_exists("ACCT-TYPE", $loanData)) {
                $loanType = DB::select("select * from loan_types where name = '" . $loanData['ACCT-TYPE'] . "'");
                if(!empty($loanType)){
                    $loan['Loan_type_id'] = $loanType[0]->id;
                    }else{
                        $loan->Loan_type_id = $request->Loan_type;   
                    }
            }
            if (array_key_exists("DISBURSED-AMT", $loanData)) {
                //echo (int)$loanData['DISBURSED-AMT'];
                $loan['Loan_amount'] = (int)str_replace(',', '', $loanData['DISBURSED-AMT']);
            }
            // if (array_key_exists("LAST-PAYMENT-DATE", $loanData) && array_key_exists("DISBURSED-DT", $loanData)) {
            //     //$loan['Original_tenure_id'] = (int)str_replace(',', '', date_diff(date_create($loanData['DISBURSED-DT']), date_create($loanData['LAST-PAYMENT-DATE']))->format("%a"));
            // }

            if (array_key_exists("INSTALLMENT-AMOUNT", $loanData)) {
                $loan['EMI'] = (int)str_replace(',', '', $loanData['INSTALLMENT-AMOUNT']);
            } else {
                if (array_key_exists("ACTUAL-PAYMENT", $loanData)) {
                    $loan['EMI'] = (int)str_replace(',', '', $loanData['ACTUAL-PAYMENT']);
                }
            }
            if (array_key_exists("ACTUAL-PAYMENT", $loanData)) {
                if ($loanData['ACTUAL-PAYMENT'] == 0) {
                    $loan['No_of_emi'] = 1;
                    $loan['Original_tenure_id'] = (int)$loan['Loan_amount'];
                } else {
                    $loan['No_of_emi'] = $loan['Loan_amount'] / $loan['EMI'];
                    $loan['Original_tenure_id'] = (int)($loan['Loan_amount'] / $loan['EMI']);
                    Log::info('original tenure --- ' . $loan['Original_tenure_id']);
                }
            }

            if (array_key_exists("ACCOUNT-STATUS", $loanData)) {

                //$loan['Loan_still_open'] = $loanData['ACCOUNT-STATUS'];
                if ($loanData['ACCOUNT-STATUS'] = "Active") {
                    $loan['Loan_still_open'] = true;
                } else {
                    $loan['Loan_still_open'] = false;
                }
            }
            //   Log::info($loanData);
            //     exit();
            if (array_key_exists("COMBINED-PAYMENT-HISTORY", $loanData)) {
                Log::info("exitsss");

                // Log::info($loanData['COMBINED-PAYMENT-HISTORY']);

                $actulatPaymentHistory = $loanData['COMBINED-PAYMENT-HISTORY'];
                //Log::info("act pay");
                //Log::info($actulatPaymentHistory);

                if (gettype($actulatPaymentHistory) == 'string') {
                    $paymentHiistory = explode("|", $loanData['COMBINED-PAYMENT-HISTORY']);
                } else {
                    $paymentHiistory = [];
                }

                //    Log::info($paymentHiistory);
                $today = date_default_timezone_set('Asia/Kolkata');
                $today = date("Y-m-d");
                //Log::info("count----");

                if (count($paymentHiistory) > 0) {
                    $startDate = str_replace(":", " ", explode(",", $paymentHiistory[count($paymentHiistory) - 2])[0]);
                    $startDate = date("Y-m-d", strtotime("$startDate"));
                    $loan['EMI_start_date'] = $startDate;
                } else {
                    //Log::info("entred");
                    $loan['EMI_start_date'] = $today;
                }


                Log::info($loan['EMI_start_date']);
                // $endDate = str_replace(":"," ",explode(",",$paymentHiistory[0])[0]);
                // $endDate = date( "Y-m-d",strtotime("$endDate"));
                // $loan['EMI_end_date'] = $endDate;
                //$loan['No_of_emi'] = count($paymentHiistory) - 1;
                // current date
                //Log::info($today);


                $period = date_diff(date_create($loan['EMI_start_date']), date_create($today))->format('%a'); // diff b/w  current date & start date

                $result = array($period);
                $sub_struct_month = ($result[0] / 30);
                $sub_struct_month = floor($sub_struct_month);

                Log::info('Total Month   --   ' . $loan['Original_tenure_id']);
                Log::info('Subtract Month   ---  ' . $sub_struct_month);


                if (($loan['Original_tenure_id'] - $sub_struct_month) > 6) {
                    $loan['obligation_considered_greater_than_6m'] = abs(6 * $loan['EMI']);
                    Log::info('obligation_considered_greater_than_6m --- ' . $loan['obligation_considered_less_than_12m']);
                } else {
                    $loan['obligation_considered_less_than_12m'] = abs(($loan['Original_tenure_id'] - $sub_struct_month) * $loan['EMI']);
                    Log::info('obligation_considered_less_than_12m --- ' . $loan['obligation_considered_less_than_12m']);
                }

                if (($loan['Original_tenure_id'] - $sub_struct_month) > 12) {
                    $loan['obligation_considered_greater_than_12m'] = abs(6 * $loan['EMI']);
                    Log::info('obligation_considered_greater_than_12m --- ' . $loan['obligation_considered_greater_than_12m']);
                }


                $query1 = "select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),':',cal_year) as label,'Month' as grain
                from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
                GROUP BY id,month_name,cal_year
                order by id DESC
                LIMIT 3";

                $data = DB::select($query1);
                //Log::info($data);
                $count = 0;
                if (gettype($actulatPaymentHistory) == 'string') {
                    for ($j = 0; $j < count($data); $j++) {
                        if (strpos($actulatPaymentHistory, $data[$j]->label) === false) {
                            $count++;
                        }
                    }
                }


                //Log::info($count);
                $loan['emi_bounce_in_3_months'] = $count;
                Log::info('emi_bounce_in_3_months ----' . $loan['emi_bounce_in_3_months']);


                $query2 = "select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),':',cal_year) as label,'Month' as grain
                from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
                GROUP BY id,month_name,cal_year
                order by id DESC
                LIMIT 6";
                $data = DB::select($query2);

                $count = 0;
                if (gettype($actulatPaymentHistory) == 'string') {
                    for ($j = 0; $j < count($data); $j++) {
                        if (strpos($actulatPaymentHistory, $data[$j]->label) === false) {
                            $count++;
                        }
                    }
                }
                $loan['emi_bounce_in_6_months'] = $count;
                Log::info('emi_bounce_in_6_months ----' . $loan['emi_bounce_in_6_months']);
            }

            if (array_key_exists("ACCT-NUMBER", $loanData)) {
                $loan['Account_no'] = $loanData['ACCT-NUMBER'];
            }
            if (array_key_exists("OVERDUE-AMT", $loanData)) {
                $loan['Remaining_emi'] = (int)str_replace(',', '', $loanData['OVERDUE-AMT']);
            }


            if (Loan::where('id', '=', $request->loan_id)->count() > 0) {
                $loan->modified_on = now();
                if ($request->has('created_by')) {
                    $loan->modified_by = $request->created_by;
                } else {
                    $loan->modified_by = $request->user_id;
                }
            } else {
                if ($request->has('created_by')) {
                    $loan->created_by = $request->created_by;
                } else {
                    $loan->created_by = $request->user_id;
                }
                $loan->created_on = now();
                $loan->modified_on = now();
                $loan->modified_by = $request->created_by;
                $file_no = (string) Str::uuid();
                $loan->file_no = $file_no;

                //$this->saveFileFolderMappingDetails('Loans', $file_no, $request->user_id);
            }
            //Log::info("Current Index" .$i);
            //Log::info($loan);

            $loan->save();  
        }
    }
        return response()->json([
            "message" => 'Loan information saved successfully',
            "status" => true,
            "data" => $loan
        ], 201);
        return response()->json([
            "message" => 'Failed to save Loan data',
            "status" => false
        ], 201);
    }

    public function saveFileFolderMappingDetails($fileType, $fileNo, $userId)
    {
        $parent_type = $fileType;
        $master_type = "file_types";
        $fileTypeData = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

        $fileTypeData[0]->id;
        $folderData = DB::select('select * from folder_file_mapping
        left join customer on customer.pan = folder_file_mapping.bpan
        where customer.primary_user_id = ' . $userId);
        $folderData[0]->folder_no;

        $folder = new FolderFileMapping();
        $folder->bpan = $folderData[0]->bpan;
        $folder->folder_no =  $folderData[0]->folder_no;
        $folder->file_type = $fileTypeData[0]->id;
        $folder->file_no = $fileNo;
        $folder->enable = 1;
        $folder->is_active = 1;

        $folder->created_by = $userId;
        $folder->created_on = now();
        $folder->modified_by = $userId;
        $folder->modified_on = now();

        $folder->save();
    }

    public function getMasterTableIdUsingMasterTypeAndName($parent_type, $master_type)
    {
        $fileTypeData = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

        return $fileTypeData[0]->id;
    }

    public function getcalendargrain()
    {
        $generalSetting = GeneralSetting::select('parameter_value')->where('parameter_name', 'Banking Month No')->get();
        $noOfMonth = $generalSetting[0]->parameter_value;
        $calendarGrainData = $this->getLastMonthNameData($noOfMonth);
        if (count($calendarGrainData) > 0) {
            return response()->json([
                "message" => 'Data retrive successfully',
                "status" => true,
                "data" => $calendarGrainData
            ], 201);
        } else {
            return response()->json([
                "message" => 'Something went wrong',
                "status" => false
            ], 201);
        }
    }

    public function getGSTParameterList(Request $request)
    {
        $totalMonth = $this->getMonthNumber();
        if ($request->eligibility_flag == 0) {
            $data = $this->getLastMonthNameData($totalMonth);
        } else {
            $data = $this->getLastQuarterNameData($totalMonth);
        }

        if (count($data) > 0) {
            return response()->json([
                "message" => 'Data retrive successfully',
                "status" => true,
                "data" => $data
            ], 201);
        } else {
            return response()->json([
                "message" => 'Something went wrong',
                "status" => false
            ], 201);
        }
    }

    public function getMonthNumber()
    {
		
		
        // $monthData = DB::select("select
        // DATE_PART('month', AGE(now()::date,
        // case
        // when extract(MONTH from NOW()) = 10 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        // when extract(MONTH from NOW()) = 11 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        // when extract(MONTH from NOW()) = 12 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        // ELSE concat(extract(YEAR from NOW())-1,'-','04','-','01')::date
        // END)) as months");
		
		$FromDate = DB::select("SELECT case
        when extract(MONTH from NOW()) = 10 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        when extract(MONTH from NOW()) = 11 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        when extract(MONTH from NOW()) = 12 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        ELSE concat(extract(YEAR from NOW())-1,'-','04','-','01')::date
        END as fromdate");
				
		//Log::info($FromDate);
		$strfrom = $FromDate[0]->fromdate;
		//Log::info($From);
			
		//$strfrom = '" . $strfrom . "';
		//Log::info($strfrom);
		
		
		$monthData = DB::select("SELECT datediff('month','". $strfrom ."'::date, NOW()::date) as months");
		
	
        return $monthData[0]->months;
    }


    //COMMENT ON 12-02-2021
    public function getLastMonthNameData($limit)
    {
        $calendarGrainData = DB::select("select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),' ',cal_year) as label,'Month' as grain
        from calendar where day = 1 AND cal_date < NOW() - INTERVAL '1 Month'
        GROUP BY id,month_name,cal_year
        order by id DESC
        LIMIT " . $limit);
        return $calendarGrainData;
    }


//for GST Month configuration
 /*public function getLastMonthNamedetail($limit) {

        $FromDate = DB::select("SELECT case
        when extract(MONTH from NOW()) = 10 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        when extract(MONTH from NOW()) = 11 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        when extract(MONTH from NOW()) = 12 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        ELSE concat(extract(YEAR from NOW())-1,'-','04','-','01')::date
        END as fromdate");
				
		//Log::info($FromDate);
		$strfrom = $FromDate[0]->fromdate;
		Log::info($strfrom);

        $end_date = date('Y-m-d', strtotime("+11 months", strtotime($strfrom)));
			
		//$strfrom = '" . $strfrom . "';
		Log::info($end_date);

        $calendarGrainData = DB::select("select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),' ',cal_year) as label,'Month' as grain
        from calendar where day = 1 AND cal_date BETWEEN '" . $strfrom . "' and '". $end_date . "'
        GROUP BY id,month_name,cal_year
        order by id DESC
        LIMIT " . $limit);

        return $calendarGrainData;

    }
*/
public function getLastMonthNamedetail($limit) {

        $FromDate = DB::select("SELECT case
        when extract(MONTH from NOW()) = 10 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        when extract(MONTH from NOW()) = 11 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        when extract(MONTH from NOW()) = 12 then concat(extract(YEAR from NOW()),'-','04','-','01')::date
        ELSE concat(extract(YEAR from NOW())-1,'-','04','-','01')::date
        END as fromdate");
				
		//Log::info($FromDate);
		$strfrom = $FromDate[0]->fromdate;
		//Log::info($strfrom);
        $current_date =  date('Y-m-d');
        $From_date = date('Y-m-d', strtotime("-1 months", strtotime($current_date)));
        $end_date = date('Y-m-d', strtotime("+11 months", strtotime($strfrom)));
        $end_date_last = date('Y-m-d', strtotime("-12 months", strtotime($From_date)));
			
		//$strfrom = '" . $strfrom . "';
		//Log::info($end_date_last);

        $calendarGrainData = DB::select("select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),' ',cal_year) as label,'Month' as grain
        from calendar where day = 1 AND cal_date BETWEEN '" . $end_date_last . "' and '". $From_date . "'
        GROUP BY id,month_name,cal_year
        order by id DESC
        LIMIT " . $limit);

        return $calendarGrainData;

    }


    //     public function getLastMonthNameData($limit)
    // {
    // $calendarGrainData = DB::select("select id,month_name,cal_year, concat(LEFT(TRIM(month_name),3),' ',cal_year) as label,'Month' as grain
    // from calendar where day = 1 AND cal_date < cast('2020-04-12' as date) - INTERVAL '1 Month'
    // GROUP BY id,month_name,cal_year
    // order by id DESC
    // LIMIT " . $limit);
    // return $calendarGrainData;
    // }


    public function getLastQuarterNameData($limit)
    {
        $quarterLimit = (int) $limit / 3;
        if ($limit % 3 != 0) {
            $quarterLimit = $quarterLimit + 1;
        }
        $calendarGrainData = DB::select("select id,cal_quarter, cal_year,
        concat(LEFT(TRIM(month_name),3),' ',cal_year,' - ',LEFT(TRIM(to_char(cal_date + INTERVAL '2 MONTH','Month')),3),' ',cal_year) as label,'Quarter' as grain
        from calendar where day = 1 and cal_month in(1,4,7,10) AND cal_date < NOW() - INTERVAL '1 Month'
        GROUP BY id,cal_quarter
        order by id DESC
        LIMIT " . $quarterLimit);
        return $calendarGrainData;
    }

    public function getAllBusinessbyid(Request $request)
    {

        $parent_type = "Business";
        $master_type = "parent_type";

        $parentData = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

        $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

        $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

        $businessData = DB::select('select business_infos.name as business_name,business_infos."BPAN" as bpan,pin_codes.pincode as pincode,customer.date_of_incorporation as date_of_incorporation,
        emailData.contact_value as email,mobileData.contact_value as mobile , pin_codes.area as area,city.city as city,
        states.state_name as state
        from business_infos
        left join pin_codes on pin_codes.id  = business_infos.pin_id
        left join customer on customer.primary_user_id = business_infos.user_id
        left join city on city.id = pin_codes.city_id
        left join states on states.id = pin_codes.state_id
        left join comm_phone_email as emailData on emailData.parent_id = customer.id and emailData.parent_type_id = ' . $parentData[0]->id . ' and emailData.contact_type = ' . $contactTypeId . '
        left join comm_phone_email as mobileData on mobileData.parent_id = customer.id and mobileData.parent_type_id = ' . $parentData[0]->id . ' and mobileData.contact_type = ' . $contactTypeIdMob . '
        where business_infos.id = ' . $request->bus_id);

        if (count($businessData) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $businessData
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function getDocumentDetails(Request $request)
    {
        $document = DB::table('document_store')
            ->where('parent_type_id', '=', $request->parent_type_id)->where('parent_id', '=', $request->parent_id)
            ->select('document_store.document_checklist_id')
            ->get();

        //Log::info($document);
        //echo $document[0]->document_checklist_id;

        //Log::info($document[0]->document_checklist_id);

        if (count($document) > 0) {
            $getdoc = DB::select('select document_check_list.form as form,document.name as document_name
            from document_check_list
            left join document_master on document_master.id = document_check_list.document_master_id
            left join document on document.id = document_master.document_id
            where document_check_list.id = ' . $document[0]->document_checklist_id);
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getdoc
            ], 201);
        } else {
            if ($request->parent_type_id == 1) {

                $query1 = ("select document_check_list.form as form,document.name as document_name,
            document_authority.name as authority_name
            from document_check_list
            left join document_master on document_master.id = document_check_list.document_master_id
            left join document on document.id = document_master.document_id
            left join document_store on document_store.document_checklist_id = document_check_list.id
            left join business_infos on business_infos.id = document_store.parent_id
            left join pin_codes on pin_codes.id = business_infos.pin_id
            left join document_authority on document_authority.state_id = pin_codes.state_id
            where form ='" . $request->form . "'");
                $businessData = DB::select($query1);
                $data['businessList'] = $businessData;
            } else {

                $query2 = ("select document_check_list.form as form,document.name as document_name,
            document_authority.name as authority_name
            from document_check_list
            left join document_master on document_master.id = document_check_list.document_master_id
            left join document on document.id = document_master.document_id
            left join document_store on document_store.document_checklist_id = document_check_list.id
            left join public.comm_address on comm_address.parent_id = document_store.parent_id
            left join pin_codes on pin_codes.id = comm_address.pin_id
            left join document_authority on document_authority.state_id = pin_codes.state_id
            where form ='" . $request->form . "'");

                $promoterData = DB::select($query2);
                $data['promoterList'] = $promoterData;

                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
        }
    }

    public function getDetailsDocument(Request $request)
    {
        /* DB::enableQueryLog();
        $query = "select a.id as document_check_list_id,a.name as document_name,'' as file_name,'' as file_type,
        '' as modified_date,b.* from (select document_check_list.id,document.name from document_check_list
        left join document_master on document_master.id = document_check_list.document_master_id
        left join document on document.id = document_master.document_id
        left join document_authority on document_authority.id = document_master.document_authority_id
        left join pin_codes on pin_codes.city_id = document_authority.city_id
        where pin_codes.id in(select pin_id from customer where primary_user_id = ".$request->user_id.") and form = '".$request->form."') as a
        left join (select * from document_store where parent_type_id = ".$request->parent_type_id." and parent_id = ".$request->parent_id.") as b on b.document_checklist_id = a.id";

        $DocumentList = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id,"Document","select",$query1[0]['query'],"document_store"); */
        if($request->form == 10){
            $query1 = "select document_check_list.id,document_master.name,master_table.name as required_phase  from document_check_list
        left join document_authority_mapping on document_authority_mapping.id = document_check_list.document_master_id
        left join document_master on document_master.id = document_authority_mapping.document_id
        left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
        left join pin_codes on pin_codes.city_id = document_authority_master.city_id
        left join master_table on master_table.id = document_check_list.required_phase
        where pin_codes.id in(select pin_id from customer where primary_user_id = " . $request->user_id . ") and document_check_list.is_active = true and required_phase = ". $request->required_phase ."";
        $DocumentList = DB::select($query1);
        if (count($DocumentList) > 0) {
            foreach ($DocumentList as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                //Log::info($documentArray);
                $DocumentList[$k]->documentArray = $documentArray;
            }
        }
        }elseif($request->form == 11){
				$query1 = "select document_check_list.id,document_master.name,master_table.name as required_phase  from document_check_list
            left join document_authority_mapping on document_authority_mapping.id = document_check_list.document_master_id
            left join document_master on document_master.id = document_authority_mapping.document_id
            left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
            left join pin_codes on pin_codes.city_id = document_authority_master.city_id
            left join master_table on master_table.id = document_check_list.required_phase
            where pin_codes.id in(select pin_id from customer where primary_user_id = " . $request->user_id . ")and document_check_list.is_active = true";
            $DocumentList = DB::select($query1);
			if (count($DocumentList) > 0) {
            foreach ($DocumentList as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                //Log::info($documentArray);
                $DocumentList[$k]->documentArray = $documentArray;
            }
        }
		}else{
        DB::enableQueryLog();
        $query = "select document_check_list.id,document_master.name,master_table.name as required_phase  from document_check_list
        left join document_authority_mapping on document_authority_mapping.id = document_check_list.document_master_id
        left join document_master on document_master.id = document_authority_mapping.document_id
        left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
        left join pin_codes on pin_codes.city_id = document_authority_master.city_id
        left join master_table on master_table.id = document_check_list.required_phase
        where pin_codes.id in(select pin_id from customer where primary_user_id = " . $request->user_id . ") and required_phase = ". $request->required_phase ." and document_check_list.is_active = true and form ='" . $request->form . "'";

        $DocumentList = DB::select($query);
        $query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Document", "select", $query1[0]['query'], "document_store","fetch");
        //Log::info($DocumentList);
        if (count($DocumentList) > 0) {
            foreach ($DocumentList as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                //Log::info($documentArray);
                $DocumentList[$k]->documentArray = $documentArray;
            }
        }
    }

        if (count($DocumentList) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $DocumentList
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'data not found'
            ], 200);
        }
    }

   
    public function callLogFileStore($userId, $formType, $queryType, $query, $tableName, $userAction)
    {

        $audit_trail = new Audit_trail();
        $audit_trail->user_id = $userId;
        $audit_trail->ip_address = $_SERVER['REMOTE_ADDR'];
        $audit_trail->form_type = $formType;
        $audit_trail->query_type = $queryType;
        $audit_trail->query = $query;
        $audit_trail->table_name = $tableName;
        $audit_trail->created_by = $userId;
        $audit_trail->created_on = now();
        $audit_trail->modified_by = $userId;
        $audit_trail->modified_on = now();
        $audit_trail->is_active = 1;
        $audit_trail->enable = true;
        $audit_trail->user_action = $userAction;

        $audit_trail->save();
        $mongo_insert_id = $audit_trail->_id;

        Log::info('mongodb insert Id' . $mongo_insert_id);
        if (!$mongo_insert_id) {
            Log::error('Failed to save File In mongodb.' . $mongo_insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "message" => 'Failed to save File In mongodb',
                "id" => null
            ], 201);
        }
    }

    public function calltoLogErrorStore(Request $request)
    {
        $error_log = new Error_log();
        $error_log->user_id = $request->user_id;
        $error_log->ip_address = $_SERVER['REMOTE_ADDR'];
        $error_log->error_message = $request->error_message;
        $error_log->api_path = $request->apiPath;
        $error_log->method = $request->method;
        $error_log->parameters = $request->parameters;
        $error_log->created_by = $request->created_by;
        $error_log->created_on = now();
        $error_log->modified_by = $request->created_by;
        $error_log->modified_on = now();
        $error_log->is_active = 1;
        $error_log->enable = true;

        $error_log->save();
        $mongo_insert_id = $error_log->_id;

        //Log::info('mongodb insert Id' . $mongo_insert_id);
        if (!$mongo_insert_id) {
            Log::error('Failed to save File In mongodb.' . $mongo_insert_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save File In mongodb',
                "id" => null
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'successfully saved in mongodb'
            ], 201);
        }
    }

  /*public function captureGST3rdPartyResult(Request $request)
    {
        $gstMainPath = DB::select("select DISTINCT base_key_path, base_key_type from gst_mapping_column");
        foreach ($gstMainPath as $k => $k_value) {

            $gstField = DB::select("select DISTINCT * from gst_mapping_column where base_key_path = '" . $k_value->base_key_path . "' and enable = 1 and is_active = 1");
            $actualData = $request->data;
            $mainPath = explode(".", $k_value->base_key_path);
			
            for ($i = 0; $i < count($mainPath); $i++) {	
			if(array_key_exists($mainPath[$i], $actualData)){
                $actualData = $actualData[$mainPath[$i]];
				//Log::info(print_r($actualData));
				//exit();
			}else{
				$actualData="";
				}
			}
			
			//exit();
			//log::info($gstField);
            for ($j = 0; $j < 5; $j++) {
                foreach ($gstField as $m => $m_value) {
                    $mainField = explode(".", $m_value->source_column);
					log::info($mainField);
                    $actualData1 = $actualData[j];
					//Log::info(print_r($actualData1));
					//exit();
                    for ($i = 0; $i < count($mainField); $i++) {
						if(array_key_exists($mainPath[$i], $actualData)){
                        $actualData1 = $actualData1[$mainField[$i]];
					}else{
						Log::info(print_r($actualData1));
						exit();
						 $actualData1 = $actualData1[$mainField[$i]];
						}
					}
					//Log::info(print_r($actualData1));
					//exit();
					//Log::info($m_value->transformation);
                    if ($m_value->transformation == 1) {
                        $date = "";
                        $calendar_id = "";
                        $date = substr($actualData1, 2, 4) . "-" . substr($actualData1, 0, 2) . "-01";
						//echo $date; exit();
                        $dayData = DB::select("select DATE_PART('days', DATE_TRUNC('month', '" . $date . "'::date) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL) as dayCount");
						
                        //$calendar_id = substr($actualData1, 2, 4) . substr($actualData1, 0, 2) . $dayData[0]->daycount;
                        $calendar_id = substr($actualData1, 2, 4) . substr($actualData1, 0, 2) . '01';
						//Log::info($calendar_id);
                    }
                }

                $gstDetails = GstDetails::firstOrNew(['gst_header_id' => $request->gst_header_id, 'calendar_grain' => 'Month', 'calendar_id' => $calendar_id]);

                foreach ($gstField as $m => $m_value) {
                    $mainField = explode(".", $m_value->source_column);
                    $actualData1 = $actualData[$j];
                    for ($i = 0; $i < count($mainField); $i++) {
                        $actualData1 = $actualData1[$mainField[$i]];
                    }
                    $gstDetails[$m_value->destination_column] = $actualData1;
                }
                $gstDetails->gst_header_id = $request->gst_header_id;
                $gstDetails->enable = 1;
                $gstDetails->is_active = 1;
                $gstDetails->created_by = 1;
                $gstDetails->created_on = now();
                $gstDetails->modified_by = 1;
                $gstDetails->modified_on = now();
                $gstDetails->calendar_grain = "Month";
                $gstDetails->save();
            }
        }

        return response()->json([
            "status" => true,
            "message" => 'Successfully Saved',
            "data" => $gstDetails
        ], 201);

        /* for ($i = 0; $i < count($request->data['result']['previous']['monthWiseSummary']); $i++) {
$date = substr($request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod'], 2, 4) . "-" . substr($request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod'], 0, 2) . "-01";
$dayData = DB::select("select DATE_PART('days', DATE_TRUNC('month', '" . $date . "'::date) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL) as dayCount");
Log::info($dayData[0]->daycount);
$calendar_id = substr($request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod'], 2, 4) . substr($request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod'], 0, 2) . $dayData[0]->daycount;
$retPeriodDate = substr($request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod'], 2, 4) . "-" . substr($request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod'], 0, 2) . "-" . $dayData[0]->daycount;
$gstDetails = GstDetails::firstOrNew(['gst_header_id' => $request->gst_header_id, 'calendar_grain' => 'Month', 'calendar_id' => $calendar_id]);
$gstDetails->gstDetails = $request->gst_header_id;


Log::info("month of payment " . $request->data['result']['previous']['monthWiseSummary'][$i]['retPeriod']);
Log::info("invoice value " . $request->data['result']['previous']['monthWiseSummary'][$i]['gstr3b']['ttlVal']);
//Log::info("invoice value " . $request->data['result']['previous']['monthWiseSummary'][$i]['gstr3b']['ttlTax']);

//$gstDetails = GstDetails::firstOrNew(['gst_header_id' => $request->GST_header_id, 'calendar_grain' => 'Month', 'calendar_id' => $i_value['calendar_id']]);
}

for ($i = 0; $i < count($request->data['result']['previous']['gstr3b']['details']); $i++) {

// $gstDetails = GstDetails::firstOrNew(['gst_header_id' => $request->GST_header_id, 'calendar_grain' => 'Month', 'calendar_id' => $i_value['calendar_id']]);

//For the invoice paid values look at the object month_wise_summary. Read the following keys from this object


//For the tax paid info look at the object gstr3b. Read the following keys from this object
Log::info("month of payment " . $request->data['result']['previous']['gstr3b']['details'][$i]['retPeriod']);
Log::info("interest paid " . $request->data['result']['previous']['gstr3b']['details'][$i]['ttlIntr']);
Log::info("late fee paid " . $request->data['result']['previous']['gstr3b']['details'][$i]['ttlLateFee']);
Log::info("tax paid in cash " . $request->data['result']['previous']['gstr3b']['details'][$i]['ttVal']['ttCshPd']);
Log::info("tax paid in cash " . $request->data['result']['previous']['gstr3b']['details'][$i]['ttVal']['ttItcPd']);
} 
    }
*/
  public function captureGST3rdPartyResult(Request $request)
    {
        $gstMainPath = DB::select("select DISTINCT base_key_path, base_key_type from gst_mapping_column");
        foreach ($gstMainPath as $k => $k_value) {
            $gstField = DB::select("select DISTINCT * from gst_mapping_column where base_key_path = '" . $k_value->base_key_path . "' and enable = 1 and is_active = 1");
			//Log::info(print_r($gstField,true));
            $actualData = $request->data;
			
            $mainPath = explode(".", $k_value->base_key_path);
            for ($i = 0; $i < count($mainPath); $i++) {
				if(array_key_exists($mainPath[$i], $actualData)){					
                $actualData = $actualData[$mainPath[$i]];
				}
            }
		
            for ($j = 0; $j < count($actualData); $j++) {
                foreach ($gstField as $m => $m_value) {
                    $mainField = explode(".", $m_value->source_column);
                    $actualData1 = $actualData[$j];
                    for ($i = 0; $i < count($mainField); $i++) {
						if(array_key_exists($mainField[$i], $actualData1)){
                        $actualData1 = $actualData1[$mainField[$i]];
						}
                    }
                    if ($m_value->transformation === 1) {
                        $date = "";
                        $calendar_id = "";
                        $date = substr($actualData1, 2, 4) . "-" . substr($actualData1, 0, 2) . "-01";
                        $dayData = DB::select("select DATE_PART('days', DATE_TRUNC('month', '" . $date . "'::date) + '1 MONTH'::INTERVAL - '1 DAY'::INTERVAL) as dayCount");
                        $calendar_id = substr($actualData1, 2, 4) . substr($actualData1, 0, 2) . '01';	
						
                    }
                }
					
	                $gstDetails = GstDetails::firstOrNew(['gst_header_id' => $request->gst_header_id, 'calendar_grain' => 'Month', 'calendar_id' => $calendar_id]);
					//Log::info($gstDetails);
					foreach ($gstField as $m => $m_value) {
					//Log::info(print_r($gstField,true));
                    $mainField = explode(".", $m_value->source_column);
				//	Log::info($m_value->source_column);
                    $actualData1 = $actualData[$j];
                    for ($i = 0; $i < count($mainField); $i++) {
					//	Log::info($mainField[$i]);
						if(array_key_exists($mainField[$i], $actualData1)){
                        $actualData1 = $actualData1[$mainField[$i]];
						}
						
					}
					//Log::info($actualData1);
					//Log::info($m_value->destination_column);
						$gstDetails[$m_value->destination_column] = $actualData1;
                }
                $gstDetails->gst_header_id = $request->gst_header_id;
                $gstDetails->enable = 1;
                $gstDetails->is_active = 1;
                $gstDetails->created_by = 1;
                $gstDetails->created_on = now();
                $gstDetails->modified_by = 1;
                $gstDetails->modified_on = now();
                $gstDetails->calendar_grain = "Month";
				$gstDetails->calendar_id = $calendar_id;
                $gstDetails->save();
            }
        }

        return response()->json([
            "status" => true,
            "message" => 'Successfully Saved',
            "data" => $gstDetails
        ], 201);

        

	}



// loan type status count and percentage
public function getRequestByStatus(Request $request)
{
$queryAll = "select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,master_table.name as profession,business_infos.id as business_id
from request
left join customer on customer.primary_user_id = request.user_id
left join loan_types on loan_types.id = request.business_channel_id
left join master_table on master_table.id = request.profession_id
left join business_infos on business_infos.name = customer.business_name
where request.is_active = 1 and request.enable = " . $request->enable;
$allDataCount = count(DB::select($queryAll));
$arr1 = ['Submitted', 'In_Progress', 'Approved', 'Submitted_to_bank', 'Disbursed', 'Rejected'];
$color = ['success','info','primary','warning','danger','danger'];
$dataArray = [];
for ($i = 0; $i < count($arr1); $i++) {
$finalArr = [];
$query = "select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,business_infos.id as business_id
from request
left join customer on customer.primary_user_id = request.user_id
left join loan_types on loan_types.id = request.business_channel_id
left join business_infos on business_infos.name = customer.business_name

where request.is_active = 1 and request.status = '" . $arr1[$i] . "' and request.enable = " . $request->enable;
//Log::info($query);
$data = DB::select($query);
$finalArr["key"] = $arr1[$i];
$finalArr["color"] = $color[$i];
$finalArr["count"] = count($data);
$finalArr['percentage'] = ((count($data) * 100) / $allDataCount);
$dataArray[$i] = $finalArr;
//Log::info($finalArr);
}
//Log::info($finalArr);
//Log::info($finalArr);
$queryAll = "select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,business_infos.id as business_id
from request
left join customer on customer.primary_user_id = request.user_id
left join loan_types on loan_types.id = request.business_channel_id
left join business_infos on business_infos.name = customer.business_name

where request.is_active = 1 and request.enable = " . $request->enable;
$allData = count(DB::select($queryAll));
if (count($finalArr) > 0) {
return response()->json([
"status" => true,
"totalrequest" => $allDataCount,
"message" => "succesfull",
"data" => $dataArray
]);
} else {
return response()->json([
"status" => false,
"message" => "not available"

]);
}
}



    public function getnotifications($type, $value, $notification_body, $user_id,$subject=null)
    {

        //Call rest api to store credentials in notification table for email .
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/saveNotification', [
            'type' => $type,
            'value' => $value,
            'notification_body' => $notification_body,
            'notification_flag' => 'true',
            'ip_address' => $_SERVER['REMOTE_ADDR'],
            'subject' => $subject,
            'form_id' => 112,
            'user_id' => $user_id,
            'enable' => 1,
            'is_active' => 1,
        ]);
        Log::info($response);
    }

    /// get all the loan request for CPA
    public function getRequestTableByStatus(Request $request)
    {
        $queryAll = "select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,master_table.name as profession,business_infos.id as business_id
 from request
                    left join customer on customer.primary_user_id = request.user_id
                    left join master_table on master_table.id = request.profession_id
                    left join loan_types on loan_types.id = request.business_channel_id
					left join business_infos on business_infos.name = customer.business_name

                     where request.is_active = 1 and request.status =  '" . $request->status . "' order by request.id";
        //Log::info($queryAll);
        $result = DB::select($queryAll);
        //Log::info($result);

        if (count($result) > 0) {
            return response()->json([
                "status" => true,
                "message" => "fetched suscessfully",
                "data" => $result
            ]);
        } else {
            return response()->json([
                "status" => false,
                "message" => "data not available"
            ]);
        }
    }

    ///loan status by user
    public function getUserAllLoanStatus(Request $request)
    {
        $queryInProgress = 'select * from request where user_id=' . $request->user_id . " and  status = 'in_progress' ";
        $queryApproved = 'select * from request where user_id=' . $request->user_id . " and  status = 'approved' ";
        Log::info($queryInProgress);
        $progressResult = DB::select($queryInProgress);
        $approvedResult = DB::select($queryApproved);
        $progressCount = count($progressResult);
        $approvedCount = count($approvedResult);
        $data['status'] = "approved";
        $data['count'] = $approvedCount;
        $data1['status'] = "submitted";
        $data1['count'] = $progressCount;
        $finalArr[0] = $data;
        $finalArr[1] = $data1;
        return response()->json([
            "status" => true,
            "message" => "succesfully fetched",
            "data" => $finalArr
        ]);
    }


    public function roleBasedLogin(Request $request)
    {
        //Log::info($request);

        $response = Http::post('http://localhost:8082/server/aagey-lending-platform-be/Identitymanagement/server.php/api/getUsersByRole', [
            'id' => $request->user_id
        ]);
        //Log::info($response);
        $responseBody = json_decode($response->getBody());
        $role_id = $responseBody->data->role_id;
        //Log::info($role_id);
        if (!empty($role_id)) {
            if ($role_id == 1) {

                $query1 = 'select * from request where owner_id =' . $request->owner_id;
                $data = DB::select($query1);

                if (count($data) > 0) {

                    return response()->json([
                        "status" => true,
                        "message" => "succesfully fetched",
                        "data" => $data
                    ]);
                }
            } elseif ($role_id == 2) {
                $query2 = 'select * from request where user_id =' . $request->user_id;
                $data = DB::select($query2);
                if (count($data) > 0) {

                    return response()->json([
                        "status" => true,
                        "message" => "succesfully fetched",
                        "data" => $data
                    ]);
                }
            } else {
                $request = DB::select('select * from request where is_active = 1');

                if (count($request) > 0) {

                    return response()->json([
                        "status" => true,
                        "message" => "succesfully fetched",
                        "data" => $request
                    ]);
                }
            }
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not found',
            ], 201);
        }
    }

    public function assigningCpa(Request $request)
    {
        $count = 0;
        for ($i = 0; $i < count($request->request_id); $i++) {
            $assigncpa = RequestTable::find($request->request_id[$i]);
            //Log::info($assigncpa);
			$refid = $assigncpa->reference_id;
            if ($assigncpa->id != null) {
                $assigncpa->owner_id = $request->user_id;

                $assigncpa->save();
                $count++;
				$message = "Application " . $refid . " has been assigned to you. Please login to the platform.aagey.com for further action";
            }
        }
		//notification to cpa
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
            'id' => $request->user_id
        ]);
        //Log::info($response);
        $responseBody = json_decode($response->getBody());
        //Log::info($responseBody->status);
        if($responseBody->status == 1){
        //Log::info($responseBody->data->email);
        $data['email'] = $responseBody->data->email;
        $email = $data['email'];
        //Log::info($email);
        $data['mobile'] = $responseBody->data->mobile;
        $mobile = $data['mobile'];
        //Log::info($mobile);

        $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned  successfully');
        }else{
            return response()->json([
                "message" => 'No record found on this user_id',
                "status" => false
            ], 201);
        }
         //notifiacation to sca
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
            'role_id' => 3
        ]);

        //Log::info($response);
        //Log::info($response->getBody());
        $responseBody = $response;
        //Log::info($responseBody = json_decode($response->getBody()));
        //Log::info($responseBody);
        $dataArray = [];

        for ($i = 0; $i < count($responseBody['data']); $i++) {
            $mobile = $responseBody['data'][$i]['mobile'];
            $email = $responseBody['data'][$i]['email'];
            //Log::info($mobile);
            //Log::info($email);

            $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned  successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned  successfully');
        }
		

        if ($count > 0) {
            return response()->json([
                "message" => 'CPA assigned successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function capturePerfiosData(Request $request)
		{
            //Log::info(print_r($request->Data, true));

		$bankingDetails = [];
		$bankingDetails['parent_type_id'] = $request->parent_type_id;
		$bankingDetails['parent_id'] = $request->parent_id;
		$bankingDetails['Eligibility_flag'] = 0;
		//Log::info($request);
		//Customer Basic Information Store
		if($request->result['CustomerInfo']['@attributes']){
		$bankingDetails['name'] = $request->result['CustomerInfo']['@attributes']['name'];
		$bankingDetails['bank'] = $request->result['CustomerInfo']['@attributes']['bank'];
		$bankingDetails['address'] = $request->result['CustomerInfo']['@attributes']['address'];
		$bankingDetails['email'] = $request->result['CustomerInfo']['@attributes']['email'];
		$bankingDetails['mobile'] = $request->result['CustomerInfo']['@attributes']['mobile'];
		$bankingDetails['landline'] = $request->result['CustomerInfo']['@attributes']['landline'];
		$bankingDetails['pan'] = $request->result['CustomerInfo']['@attributes']['pan'];
		$bankingDetails['perfiosTransactionId'] = $request->result['CustomerInfo']['@attributes']['perfiosTransactionId'];
		$bankingDetails['customerTransactionId'] = $request->result['CustomerInfo']['@attributes']['customerTransactionId'];
		}
		//Log::info($bankingDetails);
        //Log::info($request->result['Xns']['Xn']);
		$startDate = $request->result['Xns']['Xn'][0]['@attributes']['date'];
		$endDate = $request->result['Xns']['Xn'][count($request->result['Xns']['Xn']) - 1]['@attributes']['date'];

		if (substr($startDate, -2) != '01') {
		$startDate = substr($startDate, 0, strlen($startDate) - 2) . '01';
		}
		$endDate = substr($endDate, 0, 5) . (number_format(substr($endDate, 5, 2)) + 1) . '-01';

		$dayData = DB::select("select cast(cal_date as date) as date from calendar where cal_date >= cast('" . $startDate . "' as date) and cal_date < cast('" . $endDate . "' as date)");

		$dayOpenCloseArrayData = [];
		foreach ($dayData as $k => $k_value) {
		$j = 0;
		$dateArray = [];
		for ($i = 0; $i < count($request->result['Xns']['Xn']); $i++) {
		if ($k_value->date == $request->result['Xns']['Xn'][$i]['@attributes']['date']) {
		$dateArray[$j] = $request->result['Xns']['Xn'][$i];
		$j++;
		}
		}
		//Log::info($dateArray);
		$openCloseArray = [];
		if (count($dateArray) > 0) {
		$balance = (float)$dateArray[0]['@attributes']['balance'];
		$amount = (float)$dateArray[0]['@attributes']['amount'];
		$openCloseArray['open'] = (float)($balance - ($amount));
		$openCloseArray['close'] = (float)$dateArray[count($dateArray) - 1]['@attributes']['balance'];
		} else {
		$openCloseArray['open'] = 0;
		$openCloseArray['close'] = 0;
		}
		$dayOpenCloseArrayData[$k_value->date] = $openCloseArray;
		}
		//Log::info($dayOpenCloseArrayData);

		for ($i = 1; $i < count($dayData); $i++) {
		if ($dayOpenCloseArrayData[$dayData[$i]->date]['close'] == 0) {
		$dayOpenCloseArrayData[$dayData[$i]->date]['open'] = $dayOpenCloseArrayData[$dayData[$i - 1]->date]['close'];
		$dayOpenCloseArrayData[$dayData[$i]->date]['close'] = $dayOpenCloseArrayData[$dayData[$i - 1]->date]['close'];
		}
		}

		for ($i = count($dayData) - 1; $i >= 0; $i--) {
		if ($dayOpenCloseArrayData[$dayData[$i]->date]['close'] == 0) {
		$dayOpenCloseArrayData[$dayData[$i]->date]['open'] = $dayOpenCloseArrayData[$dayData[$i + 1]->date]['close'];
		$dayOpenCloseArrayData[$dayData[$i]->date]['close'] = $dayOpenCloseArrayData[$dayData[$i + 1]->date]['close'];
		}
		}

		$actualDateData = DB::select("select a.*,b.* from (select id as calendar_id,'Month' as calendar_grain,cast(cal_date as date) as date,
		cast(extract(day from cal_date) as Integer) as dayNumber
		from calendar
		where cal_date >= cast('" . $startDate . "' as date) and cal_date < cast('" . $endDate . "' as date)
		and extract(day from cal_date)
		in (select cast(source_parameter_level_1 as Integer) from mstr_bank_detail_parameter where parameter_head = 'Balance_as_on_dates')) as a
		left join
		(select id,cast(source_parameter_level_1 as Integer) as source_parameter_level_1 from mstr_bank_detail_parameter where parameter_head = 'Balance_as_on_dates')
		as b on b.source_parameter_level_1 = a.dayNumber");
		//Log::info($actualDateData);
		//Log::info($dayOpenCloseArrayData);
       
		foreach ($actualDateData as $j => $j_value) {
		//Log::info($j_value->date);
		//Log::info($dayOpenCloseArrayData[$j_value->date]);
		$actualCalendarId = substr_replace($j_value->calendar_id, "01", 6);
		$banking = BankingDetails::firstOrNew(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value->id, 'calendar_id' => $actualCalendarId]);
		$banking->bank_header_id = $request->headerId;
		$banking->calendar_grain = $j_value->calendar_grain;
		$banking->parameter_id = $j_value->id;
		$banking->parameter_value = $dayOpenCloseArrayData[$j_value->date]['close'];
		$banking->calendar_id = $actualCalendarId;
		if (BankingDetails::where(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value->id, 'calendar_id' => $actualCalendarId])->count() > 0) {
		$banking->modified_on = now();
		if ($request->has('created_by')) {
		$banking->modified_by = $request->created_by;
		} else {
		$banking->modified_by = $request->user_id;
		}
		} else {
		if ($request->has('created_by')) {
		$banking->created_by = $request->created_by;
		} else {
		$banking->created_by = $request->user_id;
		}
		$banking->created_on = now();
		$banking->modified_on = now();
		$banking->modified_by = $request->created_by;
		}
        
		$banking->save();
		//Log::info($banking);
		}

		// Banking parameters

		$actualBankingParameter = DB::select("select id,source_parameter_level_1 as source_parameter_level_1
		from mstr_bank_detail_parameter
		where parameter_head = 'Banking_parameters' and source_parameter_level_1 is not null");

		for ($i = 0; $i < count($request->result['MonthlyDetails']['MonthlyDetail']); $i++) {
		//Log::info($request->result['MonthlyDetails']['MonthlyDetail']);
		foreach ($actualBankingParameter as $j => $j_value) {
		$calenderId = str_replace("-", "", $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['startDate']);
		$banking_parameter = BankingDetails::firstOrNew(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value->id, 'calendar_id' => $calenderId]);
		$banking_parameter->bank_header_id = $request->headerId;
		$banking_parameter->calendar_grain = 'month';

        $banking_parameter->parameter_id = $j_value->id;
        if(isset($request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes'][$j_value->source_parameter_level_1])) {
		$banking_parameter->parameter_value = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes'][$j_value->source_parameter_level_1];
        }
		$banking_parameter->calendar_id = $calenderId;

		if (BankingDetails::where(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value->id, 'calendar_id' => $calenderId])->count() > 0) {
		$banking_parameter->modified_on = now();
		if ($request->has('created_by')) {
		$banking_parameter->modified_by = $request->created_by;
		} else {
		$banking_parameter->modified_by = $request->user_id;
		}
		} else {
		if ($request->has('created_by')) {
		$banking_parameter->created_by = $request->created_by;
		} else {
		$banking_parameter->created_by = $request->user_id;
		}
		$banking_parameter->created_on = now();
		$banking_parameter->modified_on = now();
		$banking_parameter->modified_by = $request->created_by;
		}
        $banking_parameter->save();
		//Log::info($banking_parameter);
		}
		}
        for ($i = 0; $i < count($request->result['EMIECSLOANXns']['EMIECSLOANXn']); $i++) {
            foreach ($actualBankingParameter as $j => $j_value) {
                $calenderId = str_replace("-", "", $request->result['EMIECSLOANXns']['EMIECSLOANXn'][$i]['@attributes']['date']);
                $banking_parameter = BankingDetails::firstOrNew(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value->id, 'calendar_id' => $calenderId]);
                $banking_parameter->bank_header_id = $request->headerId;
                $banking_parameter->calendar_grain = 'month';
                $banking_parameter->parameter_id = $j_value->id;
                if(isset($request->result['EMIECSLOANXns']['EMIECSLOANXn'][$i]['@attributes'][$j_value->source_parameter_level_1])){
                    $banking_parameter->parameter_value = $request->result['EMIECSLOANXns']['EMIECSLOANXn'][$i]['@attributes'][$j_value->source_parameter_level_1];
               // Log::info($request->result['EMIECSLOANXns']['EMIECSLOANXn'][$i]['@attributes'][$j_value->source_parameter_level_1]);
                }
            if (BankingDetails::where(['bank_header_id' => $request->headerId, 'parameter_id' => $j_value->id, 'calendar_id' => $calenderId])->count() > 0) {
                $banking_parameter->modified_on = now();
                if ($request->has('created_by')) {
                $banking_parameter->modified_by = $request->created_by;
                } else {
                $banking_parameter->modified_by = $request->user_id;
                }
                } else {
                if ($request->has('created_by')) {
                $banking_parameter->created_by = $request->created_by;
                } else {
                $banking_parameter->created_by = $request->user_id;
                }
                $banking_parameter->created_on = now();
                $banking_parameter->modified_on = now();
                $banking_parameter->modified_by = $request->created_by;
                }
                $banking_parameter->save();
        }
        }


        for ($i = 0; $i < count($request->result['EMIECSLOANXns']['EMIECSLOANXn']); $i++) {
                $amount = $request->result['EMIECSLOANXns']['EMIECSLOANXn'][$i]['@attributes']['amount'];
                $parent_type_id = $request->parent_type_id;
                $parent_id = $request->parent_id;
               // $banking_parameter->modified_on = now();
             $loan = Loan::firstOrNew(['id' => $request->loan_id]);
             $loan->parent_id = $parent_id;
             $loan->parent_type_id = $parent_type_id;
             $loan->EMI = $amount;
             $loan->bank_id = $request->bank_id;
             $loan->Account_no = $request->account_no;
             $loan->source= "Perfios";
             if ($request->has('created_by')) {
                $loan->modified_by = $request->created_by;
                } else {
                $loan->modified_by = $request->user_id;
                }
                if ($request->has('created_by')) {
                    $loan->created_by = $request->created_by;
                    } else {
                    $loan->created_by = $request->user_id;
                    }
                    $loan->created_on = now();
                    $loan->modified_on = now();
                    $loan->modified_by = $request->created_by;
                    $loan->save();
        }
      



		// Extra Fields
		for ($i = 0; $i < count($request->result['MonthlyDetails']['MonthlyDetail']); $i++) {
		//Log::info($request->result['MonthlyDetails']['MonthlyDetail'][$i]['_balAvg']);
        $calenderId = str_replace("-", "", $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['startDate']);
		$banking_extrafields = Banking_details_extra_fields::firstOrNew(['id' => $request->id]);
		$banking_extrafields->bal_avg = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['balAvg'];
		$banking_extrafields->bal_max = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['balMax'];
		$banking_extrafields->bal_min = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['balMin'];
		$banking_extrafields->cash_deposits = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['cashDeposits'];
		$banking_extrafields->cash_withdrawals = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['cashWithdrawals'];
		$banking_extrafields->chq_deposits = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['chqDeposits'];
		$banking_extrafields->chq_issues = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['chqIssues'];
		$banking_extrafields->credits = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['credits'];
		$banking_extrafields->debits = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['debits'];
		$banking_extrafields->emi_ecs_loan_issues = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['emiEcsLoanIssues'];
		$banking_extrafields->inw_bounces = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['inwBounces'];
		$banking_extrafields->inw_chq_bounces = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['inwChqBounces'];
		$banking_extrafields->loan_disbursals = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['loanDisbursals'];
		$banking_extrafields->month_name = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['monthName'];
		$banking_extrafields->outw_bounces = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['outwBounces'];
		$banking_extrafields->outw_chq_bounces = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['outwChqBounces'];
		$banking_extrafields->start_date = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['startDate'];
		$banking_extrafields->total_cash_deposit = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalCashDeposit'];
		$banking_extrafields->total_cash_withdrawal = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalCashWithdrawal'];
		$banking_extrafields->total_chq_deposit = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalChqDeposit'];
		$banking_extrafields->total_chq_issue = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalChqIssue'];
		$banking_extrafields->total_credit = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalCredit'];
		$banking_extrafields->total_debit = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalDebit'];
		$banking_extrafields->total_emi_ecs_loan_issue = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalEmiEcsLoanIssue'];
		$banking_extrafields->total_inv_expense = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalInvExpense'];
		$banking_extrafields->total_inv_income = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalInvIncome'];
		$banking_extrafields->total_loan_disbursal = $request->result['MonthlyDetails']['MonthlyDetail'][$i]['@attributes']['totalLoanDisbursal'];
		$banking_extrafields->enable = 1;
		$banking_extrafields->is_active = 1;
        $banking_extrafields->calendar_id = $calenderId;
        $banking_extrafields->bank_header_id = $request->headerId;
        $banking_extrafields->calendar_grain = "Month";
		if (Banking_details_extra_fields::where(['id' => $request->id])->count() > 0) {
		$banking_extrafields->modified_on = now();
		if ($request->has('created_by')) {
		$banking_extrafields->modified_by = $request->created_by;
		} else {
		$banking_extrafields->modified_by = $request->user_id;
		}
		} else {
		if ($request->has('created_by')) {
		$banking_extrafields->created_by = $request->created_by;
		} else {
		$banking_extrafields->created_by = $request->user_id;
		}
		$banking_extrafields->created_on = now();
		$banking_extrafields->modified_on = now();
		$banking_extrafields->modified_by = $request->created_by;
		}
		//Log::info($banking_extrafields);
		$banking_extrafields->save();
		}



		return response()->json([
		"message" => 'Banking data saved successfully',
		"status" => true,
		"data" => $dayOpenCloseArrayData
		], 201);
		}

    public function getFinAndFatCheckData(Request $request)
    {
        $data = DB::select("select proc_financial_eval_results.id,file_no,proc_financial_eval_results.parameter_id,proc_financial_eval_results.year,
            parameter_name,parameter_value,upper_range_value,lower_range_value,
            CASE
            WHEN parameter_value >= lower_range_value and parameter_value <= upper_range_value THEN 1
            ELSE 0
            END
            from proc_financial_eval_results
            left join proc_financial_eval_param on proc_financial_eval_param.id = proc_financial_eval_results.parameter_id
            left join proc_financial_eval_rules on proc_financial_eval_rules.parameter_id = proc_financial_eval_param.id
            where file_no = '" . $request->file_no . "' and parameter_category = '" . $request->parameter_category . "'");
        if (count($data) > 0) {
            return response()->json([
                "message" => 'Successfully get the FAT and FIN check data',
                "status" => true,
                "data" => $data
            ], 201);
        } else {
            return response()->json([
                "message" => 'Error in getting FAT and FIN check data',
                "status" => false
            ], 201);
        }
    }
	
    public function deleteassetcategory(Request $request)
    {
        $deleteAssetCat = AssetCategory::find($request->asset_category_id);
        $deleteAssetCat->is_active = 0;
        $deleteAssetCat->save();
        $updateId = $deleteAssetCat->asset_category_id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function getAllassetusagetype(Request $request)
    {
        if ($request->has('enable')) {
            $getassetusagetype =  AssetUsageType::where('is_active', '=', true)->where('enable', '=', $request->enable)->get();
        } else {
            $getassetusagetype =  AssetUsageType::where('is_active', '=', true)->get();
        }
        if (count($getassetusagetype) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getassetusagetype
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function deleteassetusagetype(Request $request)
    {

        $deleteassetusagetype = AssetUsageType::find($request->asset_usage_type_id);
        $deleteassetusagetype->is_active = 0;
        $deleteassetusagetype->save();
        $updateId = $deleteassetusagetype->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function getAllassetsubcategory(Request $request)
    {
        if ($request->has('enable')) {
            $getAllassetsubcategory =  AssetSubCategory::where('is_active', '=', true)->where('enable', '=', $request->enable)->get();
        } else {
            $getAllassetsubcategory =  AssetSubCategory::where('is_active', '=', true)->get();
        }
        if (count($getAllassetsubcategory) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getAllassetsubcategory
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function deleteassetsubcategory(Request $request)
    {

        $deleteassetsubcategory = AssetSubCategory::find($request->asset_sub_cat_id);
        $deleteassetsubcategory->is_active = 0;
        $deleteassetsubcategory->save();
        $updateId = $deleteassetsubcategory->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

     public function deletestates(Request $request)
    {

        $deletestates = State::find($request->id);
		  Log::info($deletestates);
        $deletestates->is_active = 0;
        $deletestates->save();
        $updateId = $deletestates->id;
		 if ($updateId) {
       
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function saveStates(Request $request)
    {
        $states = State::firstOrNew(['id' => $request->id]);
        //Log::info($states);
        $states->state_name = $request->name;
        $states->state_id = $request->state_id;
        $states->enable = $request->enable;
        $states->is_active = 1;
        if (State::where(['id' => $request->id])->count() > 0) {
            $states->modified_on = now();
            $states->modified_by = 1;
        } else {
            $states->created_by = 1;
            $states->created_on = now();
        }
        //Log::info($states);

        $states->save();
        $insert_id = $states->id;
        //Log::info($states);

        $data = $states->getAttributes();
        $redis = $this->setReddis($data, 'states');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['states_id'] = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'State updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'State saved Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        }
    }

    public function saveEntity(Request $request)
    {
        $entity = Entity_types::firstOrNew(['id' => $request->id]);
        $entity->entity = $request->entity;
        $entity->business = $request->business;
        $entity->type = $request->type;
        $entity->share_percentage = $request->share_percentage;
        $entity->sort_order = $request->sort_order;
        $entity->enable = $request->enable;
        $entity->is_active = 1;
        if (Entity_types::where(['id' => $request->id])->count() > 0) {
            $entity->modified_on = now();
            $entity->modified_by = 1;
        } else {
            $entity->created_by = 1;
            $entity->created_on = now();
        }
        $entity->save();
        $insert_id = $entity->id;

        $data = $entity->getAttributes();
        $redis = $this->setReddis($data, 'entity');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['entity_id'] = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'Entity updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'Entity saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

    public function deleteEntityType(Request $request)
    {
        $deleteentity = Entity_types::find($request->id);
        $deleteentity->is_active = 0;
        $deleteentity->save();
        $updateId = $deleteentity->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function saveIndustryGroup(Request $request)
    {
        $industry_group = IndustryGroup::firstOrNew(['id' => $request->id]);
        $industry_group->name = $request->name;
        $industry_group->industry_type_id = $request->industry_type_id;
        $industry_group->sort_order = $request->sort_order;
        $industry_group->enable = $request->enable;
        $industry_group->is_active = 1;
        if (IndustryGroup::where(['id' => $request->id])->count() > 0) {
            $industry_group->modified_on = now();
            $industry_group->modified_by = 1;
        } else {
            $industry_group->created_by = 1;
            $industry_group->created_on = now();
        }
        $industry_group->save();
        $insert_id = $industry_group->id;

        $data = $industry_group->getAttributes();
        $redis = $this->setReddis($data, 'industry_group');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['industry_group_id'] = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'Industry group updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'Industry group saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

public function masterAddOrEdit(Request $request)
    {
        $master_name = Mastertable::firstOrNew(['id' => $request->id]);
        $master_name->name                           =   $request->name;
        $master_name->short_name               =   $request->short_name;
		$master_name->description               =   $request->description;
		$master_name->master_table_id               =   $request->master_table_id;
        $master_name->sort_order = $request->sort_order;
        $master_name->enable = 1;
        $master_name->is_active = 1;
        if (Mastertable::where(['id' => $request->id])->count() > 0) {
            $master_name->modified_on = now();
            $master_name->modified_by = 1;
        } else {
            $master_name->created_by = 1;
            $master_name->created_on = now();
        }
        $master_name->save();
        $insert_id = $master_name->id;


        $data = $master_name->getAttributes();
        $redis = $this->setReddis($data, 'master_name');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
				], 417);
			}
			$data['master_id'] = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'Master name updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'Master name saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

    public function industryNamesAddOrEdit(Request $request)
    {
        $industry_name = IndustryNames::firstOrNew(['id' => $request->id]);
        $industry_name->name                           =   $request->name;
        $industry_name->industry_group_id               =   $request->industry_group_id;
        $industry_name->sort_order = $request->sort_order;
        $industry_name->enable = $request->enable;
        $industry_name->is_active = 1;
        if (IndustryNames::where(['id' => $request->id])->count() > 0) {
            $industry_name->modified_on = now();
            $industry_name->modified_by = 1;
        } else {
            $industry_name->created_by = 1;
            $industry_name->created_on = now();
        }
        $industry_name->save();
        $insert_id = $industry_name->id;


        $data = $industry_name->getAttributes();
        $redis = $this->setReddis($data, 'industry_name');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['industry_name_id'] = $insert_id;
        if ($request->id) {
            return response()->json([
                "message" => 'Industry name updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'Industry name saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }

    public function deleteNationality(Request $request)
    {
        $deletenationality = Nationality::find($request->id);
        $deletenationality->is_active = 0;
        $deletenationality->save();
        $updateId = $deletenationality->id;
        if ($updateId) {
            return response()->json([
                "message" => 'Data deleted successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function getBusinessByCPA(Request $request)
        {
       /* $query = 'select * from request where owner_id = ' .$request->user_id;
        $Data = DB::select($query);
        //Log::info($Data);
        //$businessData = [];
        $data_array = [];
        foreach($Data as $i => $i_value){
        //Log::info($i_value->user_id);
        $businessData = DB::select('select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
        business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
        business_infos.user_id as user_id,
        entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
        states.state_name as state_name
        from business_infos
        left join entity_types on entity_types.id = business_infos.entity_id
        left join industry_group on industry_group.id = business_infos.industry_group_id
        left join pin_codes on pin_codes.id = business_infos.pin_id
        left join city on city.id = pin_codes.city_id
        left join states on states.id = pin_codes.state_id
        where business_infos.is_active = 1 and business_infos.created_by = ' . $i_value->user_id . '
        UNION
        select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
        business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
        business_infos.user_id as user_id,
        entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
        states.state_name as state_name
        from business_infos
        left join entity_types on entity_types.id = business_infos.entity_id
        left join industry_group on industry_group.id = business_infos.industry_group_id
        left join pin_codes on pin_codes.id = business_infos.pin_id
        left join city on city.id = pin_codes.city_id
        left join states on states.id = pin_codes.state_id
        where business_infos.is_active = 1 and business_infos.created_by = ' . $request->user_id);

        foreach ($businessData as $k => $item) {
        $data[$k]= $item;
        }
        Log::info($businessData);
        // $data[$i]= $businessData;
        }
        //Log::info($data);


        if (count($data) > 0){
        return response()->json([
        "message" => 'Data fetched successfully',
        "status" => true,
        "data" => $data
        ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }*/
		  $query = 'select * from request where owner_id = ' .$request->user_id;
        $request_data = DB::select($query);                                                                                                                        
        //Log::info($Data);
        //$businessData = [];
        $data_array = [];
        if (!empty($request_data)) {
            foreach($request_data as $i => $i_value) {
            
                    $businessData = DB::select('select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                    business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                    business_infos.user_id as user_id,
                    entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                    states.state_name as state_name
                    from business_infos
                    left join entity_types on entity_types.id = business_infos.entity_id
                    left join industry_group on industry_group.id = business_infos.industry_group_id
                    left join pin_codes on pin_codes.id = business_infos.pin_id
                    left join city on city.id = pin_codes.city_id
                    left join states on states.state_id = pin_codes.state_id
                    where business_infos.is_active = 1 and business_infos.created_by = ' . $i_value->user_id . '
                    UNION
                    select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                    business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                    business_infos.user_id as user_id,
                    entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                    states.state_name as state_name
                    from business_infos
                    left join entity_types on entity_types.id = business_infos.entity_id
                    left join industry_group on industry_group.id = business_infos.industry_group_id
                    left join pin_codes on pin_codes.id = business_infos.pin_id
                    left join city on city.id = pin_codes.city_id
                    left join states on states.state_id = pin_codes.state_id
                    where business_infos.is_active = 1 and business_infos.created_by = ' . $request->user_id);
        
            
                //Log::info($i_value->user_id); 
            
                foreach ($businessData as $k => $item) {
                    $data_array[$k]= $item;
                }
               // Log::info($businessData);
                // $data[$i]= $businessData;
            }
        } else {
            $businessData = DB::select(' select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                business_infos.user_id as user_id,
                entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                states.state_name as state_name
                from business_infos
                left join entity_types on entity_types.id = business_infos.entity_id
                left join industry_group on industry_group.id = business_infos.industry_group_id
                left join pin_codes on pin_codes.id = business_infos.pin_id
                left join city on city.id = pin_codes.city_id
                left join states on states.state_id = pin_codes.state_id
                where business_infos.is_active = 1 and business_infos.created_by = ' . $request->user_id);
        }
        //Log::info($data);
        $data = (!empty($data_array)) ? $data_array : $businessData;

        if (count($data) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $data,
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
        }

    public function getRequestdetailsByCPA(Request $request)
    {
        $requestData = DB::select("select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,
        business_infos.pin_id as pin_id,customer.pan as pan,master_table.name as profession
        from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
		left join master_table on master_table.id = request.profession_id
        left join business_infos on business_infos.name = customer.business_name
        where request.is_active = 1 and request.created_by  = " . $request->user_id . "
        UNION
        select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,
        business_infos.pin_id as pin_id,customer.pan as pan,master_table.name as profession
        from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
        left join master_table on master_table.id = request.profession_id
        left join business_infos on business_infos.name = customer.business_name
        where request.is_active = 1 and request.owner_id  = " . $request->user_id . " order by id");

        //Log::info($requestData);
        if (count($requestData) > 0) {
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $requestData
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }

    public function getPromoterByCPA(Request $request)
    {
        if ($request->has('user_id')) {
            $parent_type = "Promoter";
            $master_type = "parent_type";
            $parentData = DB::table('master_table')
                ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
                ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
                ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
                ->get();

            $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

            $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');


            $query = "select promoter_info.id as id,promoter_info.id as promoter_id,promoter_info.first_name as name,promoter_info.first_name as first_name,promoter_info.last_name as last_name,promoter_info.type as type,business_infos.name as business_name,
            emailData.contact_value as email, mobileData.contact_value as mobile from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
            left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and business_infos.created_by = " . $request->user_id . ") order by promoter_info.id";

            $promoterData = DB::select($query);
        }

        if (count($promoterData) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $promoterData
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }


            public function getFinCheckFatCheckDataHeaderWise(Request $request)
         {
        $headerData = DB::select("select parameter_name_level_1,sort_order
        from proc_financial_eval_results
        left join proc_financial_eval_param on proc_financial_eval_param.id = proc_financial_eval_results.parameter_id
        left join proc_financial_eval_rules on proc_financial_eval_rules.parameter_id = proc_financial_eval_param.id
        where folder_no = '" . $request->folder_no . "' and parameter_category = '" . $request->parameter_category . "'
        group by sort_order,parameter_name_level_1 order by sort_order");
        $data['header'] = $headerData;
       
        $headerDetailsData = [];
        if (count($headerData) > 0) {
        foreach ($headerData as $i => $i_value) {
        $headerRow = DB::select("select  DISTINCT  parameter_name, proc_financial_eval_results.id,folder_no,proc_financial_eval_results.parameter_id,proc_financial_eval_results.year,
        parameter_name_level_1,parameter_sort,
        parameter_value,parameter_evaluation_status,
        CASE
        WHEN parameter_evaluation_status = 'okay' THEN 'GREEN'
        WHEN parameter_evaluation_status = 'sorry' THEN 'RED'
		WHEN parameter_evaluation_status = 'yes' THEN 'GREEN'
        WHEN parameter_evaluation_status = 'no' THEN 'RED'
        ELSE 'ORANGE'
        END as status,
        (select count(*) from proc_financial_deviation_master where question_id = proc_financial_eval_results.parameter_id ) as count
        from proc_financial_eval_results
        inner join proc_financial_eval_param on proc_financial_eval_param.id = proc_financial_eval_results.parameter_id
        inner join proc_financial_eval_rules on proc_financial_eval_rules.parameter_id = proc_financial_eval_param.id
        where   folder_no = '" . $request->folder_no . "' and parameter_category = '" . $request->parameter_category . "'
        and parameter_name_level_1 = '" . $i_value->parameter_name_level_1 . "'  order by parameter_sort");
       // $data[$i_value->parameter_name_level_1] = $headerRow;
        //$headerDetails['headerName'] = $i_value->parameter_name_level_1;
        //$headerDetails['headerDetails'] = $headerRow;
        //Log::info($headerDetails);
        $headerDetailsData[$i] = [
            'headerName' => $i_value->parameter_name_level_1,
            'headerDetails' => $headerRow
        ];
        }
        } else {
        return response()->json([
        "message" => 'No Record Found',
        "status" => false
        ], 201);
        }
        $data['headerDetails'] = $headerDetailsData;
        if (count($data) > 0) {
        return response()->json([
        "message" => 'Successfully get the FAT and FIN check data',
        "status" => true,
        "data" => $data
        ], 201);
        } else {
        return response()->json([
        "message" => 'Error in getting FAT and FIN check data',
        "status" => false
        ], 201);
        }
        }

    public function checkAllPagesDetails($userId)
    {
        $getRecord = DB::select("select 1 as id,'Business Information' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status
            from business_infos where is_active = 1 and user_id = " . $userId . "
            UNION
            select 2 as id ,'Promoter Information' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status
            from business_promoter_mapping where is_active = 1 and business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ")
            UNION
            select 3 as id,'Lets Get Started' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status
            from request where is_active = 1 and user_id = " . $userId . "
            UNION
            select 4 as id, 'Financial' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status from finance_header
            where is_active = 1 and parent_type_id in(1,2) and parent_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ") or
            parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . "))
            UNION
            select 5 as id, 'Bank Accounts' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status from banking_header
            where is_active = 1 and parent_type_id in(1,2) and parent_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ") or
            parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . "))
            UNION
            select 6 as id, 'Loans' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status from loan
            where is_active = 1 and parent_type_id in(1,2) and parent_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ") or
            parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . "))
            UNION
            select 7 as id,'Working Capital' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status from working_capital
            where is_active = 1 and parent_type_id in(1,2) and parent_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ") or
            parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . "))
            UNION
            select 8 as id,'GST Details' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status from gst_header
            where is_active = 1 and parent_type_id in(1,2) and parent_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ") or
            parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . "))
            UNION
            select 9 as id,'Asset' as menu,count(*),
            case
            when count(*) > 0 then TRUE
            ELSE FALSE
            END as status from asset_headers
            where is_active = 1 and parent_type_id in(1,2) and parent_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . ") or
            parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where is_active = 1 and user_id = " . $userId . "))
            order by id");

        //Log::info($getRecord);
        //return $getRecord;

        $responseBody = $getRecord;
        $dataArray = [];
        for ($i = 0; $i < count($responseBody); $i++) {
            $countrecord[$i] = $responseBody[$i]->status;
            //Log::info($countrecord[$i]);
        }
        if ($countrecord == false) {
            return false;
        } else {
            return true;
        }
        //return $countrecord;
    }

    //Application Report API
    public function getReportByDate(Request $request)
    {
        $query = "select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan
            from request
            left join customer on customer.primary_user_id = request.user_id
            left join loan_types on loan_types.id = request.business_channel_id
            where request.created_on BETWEEN cast('" . $request->startdate . "' as date)  and cast('" . $request->enddate . "' as date) + interval '1 day'  order by created_on";

        $requestData = DB::select($query);

        if (count($requestData) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $requestData
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function getuserByBusiness(Request $request)
    {
        $data = DB::table('business_infos')->select('user_id')->where('id', $request->id)->get();
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }

    public function getOwnerByUserid(Request $request)
    {
        $data = DB::table('request')->where('user_id', $request->user_id)->get();
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }

    public function getuserByRequest(Request $request)
    {
        $user = RequestTable::select('id', 'user_id','business_channel_id', 'folder_no','reference_id')->where('id', $request->id)->first();
        if (!empty($user)) {
            return response()->json([
                "status" => true,
                "data" => $user
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'no records found'
            ], 200);
        }
    }

    //save function for request history
    public function saveRequestHistory($requestId, $folder_no, $status, $remarks, $createdBy)
    {
        $requestHistory = new Request_history();
        $requestHistory->request_id = $requestId;
        $requestHistory->folder_no = $folder_no;
        $requestHistory->status = $status;
        $requestHistory->remarks = $remarks;
        $requestHistory->created_by = $createdBy;
        $requestHistory->created_on = now();
        $requestHistory->modified_by = $createdBy;
        $requestHistory->modified_on = now();
        $requestHistory->is_active = true;
        $requestHistory->enable = true;
        $requestHistory->save();
        $data['requestHistory_id'] = $requestHistory->id;
        if ($data['requestHistory_id']) {
            return response()->json([
                "status" => true,
                "message" => 'Successfuly inserted',
                "Data" => $requestHistory
            ], 201);
        } else {

            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 201);
        }
    }

    public function questionairyFin(Request $request)
    {
        /* if($request->enable ==1){
        $query ='select cf.id,cf.parent_question_id as childquestion ,cf.question_description as childdesc,
        cff.parent_question_id as subchildquestionid ,cff.id as subchild,cff.question_description as subchilddesc
        from public.proc_financial_deviation_master pf
        RIGHT JOIN public.proc_financial_deviation_master as cf on pf.id = cf.parent_question_id
        INNER JOIN public.proc_financial_deviation_master as cff on cf.id = cff.parent_question_id order by cf.id' ;
        }
        */


        $parentdata = DB::select("select a.id,question_description,false as flag,
        (select count(*) from proc_financial_deviation_master where parent_question_id = a.id)
        from proc_financial_deviation_master as a where a.parent_question_id = " . $request->parent_question_id . "and question_id=" . $request->question_id);

        $data = $parentdata;
        return response()->json([
            "status" => true,
            "message" => 'Data fetched successfully',
            "data" => $data
        ], 200);
        // Log::info($data);
    }


    public function saveQuestion(Request $request)
    {
    /*   foreach ($request->data as $i => $i_value) {
    $Questions = Questionnaire::firstOrNew(['id' => $request->id]);
    $Questions->question_answer = $i_value['answer'];
    $Questions->question_id = $i_value['question_id'];
    $Questions->parameter_id = $request->parameter_id;
    $Questions->is_active = 1;
    $Questions->parent_id = $i_value['parent_id'];
    $Questions->answer_headers = $i_value['answer_headers'];
    $Questions->application_id = $request->user_id;
    if (Questionnaire::where(['id' => $request->id])->count() > 0) {
    $Questions->modified_on = now();
    $Questions->modified_by = 1;
    } else {
    $Questions->created_by = 1;
    $Questions->created_on = now();
    }
    $data = $Questions->getAttributes();
    $Questions->save();
    $insert_id = $Questions->id;
    if (!$insert_id) {
    Log::error('Failed to save HL_LAP in pgsql. for ' . $request->file_no);
    //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
    return response()->json([
    "status" => false,
    "message" => 'Failed to save in pgsql',
    ], 417);
    }
    //$data['primary_id'] = $insert_id;
    $data = array_merge($data, array("primary_id" => $insert_id));
    $res_data[] = $data;
    Log::info($res_data);
    }
    if ($request->id) {
    return response()->json([
    "status" => true,
    "message" => ' Updated Successfuly',
    "Data" => $res_data
    ], 201);
    } else {
    return response()->json([
    "status" => true,
    "message" => 'Inserted Successfuly',
    "Data" => $res_data
    ], 201);
    }
    }*/
// Log::info($request);
    //     echo $request;
    $answersArr = $request->data;
    $user_id = $request->user_id;
//     //return;
//     Log::info($answersArr);
   $data_arr = [];
   foreach($answersArr as $i => $i_value) {
   
       $id = $i_value['id'];
       $question_answer = $i_value['answer'];
       $question_id = $i_value['question_id'];
       $parameter_id = $request->parameter_id;
       $is_active = 1;
       $parent_id = $i_value['parent_id'];
       $answer_header = $i_value['answer_headers'];
       $application_id = $request->user_id;
       $data_arr[$i] = [
           'id' => $id,
           'question_answer' => $question_answer,
           'question_id' => $question_id,
           'parameter_id' => $parameter_id,
           'is_active' => $is_active,
           'parent_id' => $parent_id,
           'answer_header' => $answer_header,
           'application_id' => $application_id,
       ];
   }
   
   $arr = [];
   foreach($data_arr as $key => $item) {
       $quetionaire = Questionnaire::updateOrCreate(
           ['id' =>  $item['id']]
       );

           $quetionaire->question_answer = $item['question_answer'];
           $quetionaire->question_id = $item['question_id'];
           $quetionaire->parameter_id = $item['parameter_id'];
           $quetionaire->is_active = $item['is_active'];
           $quetionaire->parent_id = $item['parent_id'];
           $quetionaire->answer_headers = $item['answer_header'];
           $quetionaire->application_id = $item['application_id'];
           $quetionaire->created_by = 1;
           $quetionaire->created_on = now();
           $quetionaire->save();
      
   }
   
   //notification to CPA
   $getCPA = DB::select("select owner_id from request where user_id =". $request->user_id);
   if($getCPA != null){
   //Log::info($getCPA);
   $cpa = $getCPA[0];
   $pro = json_encode($cpa);
   $obj = json_decode($pro);

   $data['cpa']=$obj->owner_id;
   //Log::info($obj->owner_id);

        if($obj->owner_id != null){
            $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                'id' => $obj->owner_id
            ]);
            $responseBody = json_decode($response->getBody());
            Log::info($responseBody->status);
            if($responseBody->status == 1){
                $email = $responseBody->data->email;
                //$email = $data['email'];
                $mobile = $responseBody->data->mobile;
                //$mobile = $data['mobile'];
                $message = $email . " has submitted the aberration questionnaire. The review of the responses needs to done further. Please login to platform.aagey.com for further action";
                $this->getnotifications('email', $email, $message, $request->user_id,'aberration questionnaire has been submitted Successfully');
                $this->getnotifications('mobile', $mobile, $message, $request->user_id,'aberration questionnaire has been submitted Successfully');
                }

        }else{
            return response()->json([
                "message" => 'CPA not yet assigned this user_ id',
                "status" => false
            ], 201);
        } 
    }
	
	//Notifications to SCA
	
	/*$message = "Aberration questionnaires are submitted. The review of the responses needs to done further. Please login to platform.aagey.com for further action";
    $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
        'role_id' => 3
    ]);
    $responseBody = $response;
    $dataArray = [];

    for ($i = 0; $i < count($responseBody['data']); $i++) {
        $mobile = $responseBody['data'][$i]['mobile'];
        $email = $responseBody['data'][$i]['email'];
        $this->getnotifications('email', $email, $message, $request->user_id,'aberration questionnaire has been submitted Successfully');
                $this->getnotifications('mobile', $mobile, $message, $request->user_id,'aberration questionnaire has been submitted Successfully');
    }*/

   return response()->json([
       "status" => true,
       "message" => 'Data saved successfully',
       "data" => $data_arr,
   ], 200);
}
    public function getChild($pid)
    {
        $childData = DB::select("select id,question_description from proc_financial_deviation_master where parent_question_id = " . $pid);
        return $childData;
    }

    public function getPromoterByUserId(Request $request)
    {
        $parent_type = "Promoter";
        $master_type = "parent_type";
        DB::enableQueryLog();
        $parentData = DB::table('master_table')
            ->join('main_master', 'main_master.master_table_id', '=', 'master_table.master_table_id')
            ->where('main_master.name', '=', $master_type)->where('main_master.is_active', '=', 1)->where('master_table.name', '=', $parent_type)
            ->select('master_table.id', 'master_table.name', 'master_table.short_name', 'master_table.description')
            ->get();

        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "Promoter", "select", $query1[0]['query'], "promoter_info","fetch");
        $contactTypeId = $this->getMasterTableIdUsingMasterTypeAndName('Email', 'contact_type');

        $contactTypeIdMob = $this->getMasterTableIdUsingMasterTypeAndName('Mobile', 'contact_type');

        DB::enableQueryLog();
        $promoter = DB::select("select promoter_info.*,business_promoter_mapping.*,emailData.contact_value as email,mobileData.contact_value as mobile, master_table.name as property from business_promoter_mapping
        left join promoter_info on promoter_info.id = business_promoter_mapping.promoter_id
		left join master_table on master_table.id = promoter_info.property_id
        left join comm_phone_email as emailData on emailData.parent_id = promoter_info.id and emailData.parent_type_id = " . $parentData[0]->id . " and emailData.contact_type = " . $contactTypeId . "
        left join comm_phone_email as mobileData on mobileData.parent_id = promoter_info.id and mobileData.parent_type_id = " . $parentData[0]->id . " and mobileData.contact_type = " . $contactTypeIdMob . "
        where promoter_info.id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where user_id = " . $request->user_id . "))and business_promoter_mapping.is_active = 1 and promoter_info.is_active = 1");
        if (!empty($promoter)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $promoter
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'no records found'
            ], 200);
        }
    }

    public function getfinanceMergeBusinessAndPromoter(Request $request)
    {
        if ($request->has('user_id')) {
            $data = DB::select("select business_infos.id as id ,business_infos.name as name,'Business' as type,
            (select count(*) from finance_header where parent_type_id = 1 and parent_id = business_infos.id) as countRow
            from business_infos
            left join entity_types on entity_types.id = business_infos.entity_id
            where business_infos.is_active = 1 and user_id = " . $request->user_id . "
            UNION
            select promoter_info.id as id,promoter_info.first_name as name,'Promoter' as type,
            (select count(*) from finance_header where parent_type_id = 2 and parent_id = promoter_info.id) as countRow
            from business_promoter_mapping
            left join promoter_info on promoter_info.id=business_promoter_mapping.promoter_id
            left join business_infos on business_infos.id=business_promoter_mapping.business_id
            where promoter_info.is_active = 1 and business_promoter_mapping.business_id in(select id from business_infos where business_infos.is_active = 1 and user_id = " . $request->user_id . ") order by id");
        }
        if ($data) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

    public function getbankMergeBusinessAndPromoter(Request $request)
    {
        if ($request->has('user_id')) {
            $data = DB::select("select banking_header.id as id,bank.name as bank_name,'Business' as type,
           (select count(*) from banking_details where bank_header_id = banking_header.id) as countRow
           from banking_header
           left join bank on bank.id = banking_header.bank_id
           left join master_table on master_table.id = banking_header.account_type::INTEGER
           where banking_header.is_active = 1 and
           parent_id in(select id from business_infos where is_active = 1 and user_id =" . $request->user_id . ")and parent_type_id = 1
           UNION
           select banking_header.id as id,bank.name as bank_name,'Promoter' as type,
           (select count(*) from banking_details where bank_header_id = banking_header.id) as countRow
           from banking_header
           left join bank on bank.id = banking_header.bank_id
           left join master_table on master_table.id = banking_header.account_type::INTEGER
           left join business_promoter_mapping on business_promoter_mapping.id = banking_header.parent_id
           where banking_header.is_active = 1 and parent_id in
            (select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where user_id = " . $request->user_id . ")) and parent_type_id = 2");

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function getLoanMergeBusinessAndPromoter(Request $request)
    {
        if ($request->has('user_id')) {
            $data = DB::select('select loan.id as id, loan."Loan_still_open" as loan_still_open, bank.name as financer_name,loan_types.name as loan_types,
            ' . "'" . 'Business' . "'" . ' as type ,
            (select count(*) from loan where parent_type_id = 1 and parent_id = business_infos.id) as countRow
            from loan
            left join business_infos on business_infos.id = loan.parent_id
            left join bank on bank.id  = loan."Financer_id"
            left join loan_types as loan_types on loan_types.id = loan."Loan_type_id"
            left join master_table as tenure_table on tenure_table.id = loan."Original_tenure_id"
            where loan.is_active = 1 and loan.parent_id in (select id from business_infos where is_active = 1 and user_id =' . $request->user_id . ')  and loan.parent_type_id = 1
            UNION
            select loan.id as id, loan."Loan_still_open" as loan_still_open, bank.name as financer_name,loan_types.name as loan_types,
            ' . "'" . 'Promoter' . "'" . ' as type ,
            (select count(*) from loan where parent_type_id = 2 and parent_id = promoter_info.id) as countRow
            from loan
            left join promoter_info on promoter_info.id = loan.parent_id
            left join bank on bank.id  = loan."Financer_id"
            left join loan_types as loan_types on loan_types.id = loan. "Loan_type_id"
            left join master_table as tenure_table on tenure_table.id = loan."Original_tenure_id"
            where loan.is_active = 1 and loan.parent_id in(select promoter_id from business_promoter_mapping where business_id in(select id from business_infos where user_id = ' . $request->user_id . ')) and loan.parent_type_id = 2');

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }


    public function getAssetMergeBusinessAndPromoter(Request $request)
    {
        if ($request->has('user_id')) {
            $data = DB::select("select 'Business' as type, asset_details.asset_header_id as id,
            master_table.name as assets_type,purpose_master.name as purpose_name,
            (select count(*) from asset_headers where parent_type_id = 1 and parent_id = business_infos.id) as countRow
            from asset_details
            left join asset_headers on asset_headers.id = asset_details.asset_header_id
            left join business_infos on business_infos.id = asset_headers.parent_id
            left join master_table on master_table.id = asset_headers.asset_type_id
            left join master_table as purpose_master on purpose_master.id = asset_details.purpose_id
            where asset_headers.is_active = 1 and asset_headers.parent_id in
			(select id from business_infos where is_active = 1 and user_id =" . $request->user_id . ")and asset_headers.parent_type_id = 1
			UNION
			select 'Promoter' as type, asset_details.asset_header_id as id,master_table.name as assets_type,purpose_master.name as purpose_name,
            (select count(*) from asset_headers where parent_type_id = 2 and parent_id = promoter_info.id) as countRow
            from asset_details
            left join asset_headers on asset_headers.id = asset_details.asset_header_id
            left join promoter_info on promoter_info.id = asset_headers.parent_id
            left join master_table on master_table.id = asset_headers.asset_type_id
            left join master_table as purpose_master on purpose_master.id = asset_details.purpose_id
            where asset_headers.is_active = 1 and asset_headers.parent_id in
			(select promoter_id from business_promoter_mapping where business_id in
			(select id from business_infos where user_id = " . $request->user_id . "))and asset_headers.parent_type_id = 2");

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
				"data" => []
            ], 201);
        }
    }

    public function getWorkingCapitalMergerBusinessAndPromoter(Request $request)
    {
        if ($request->has('user_id')) {
            $data = DB::select("select working_capital.id as id ,bank.name as bank_name,'Business' as type,
            (select count(*) from working_capital where parent_type_id = 1 and parent_id = business_infos.id) as countRow
            from working_capital
            left join business_infos on business_infos.id = working_capital.parent_id
            left join bank on bank.id = working_capital.bank_id
            where working_capital.is_active = 1 and working_capital.parent_id in
            (select id from business_infos where is_active = 1 and user_id =" . $request->user_id . ") and working_capital.parent_type_id = 1
            UNION
            select working_capital.id as id , bank.name as bank_name,'Promoter' as type,
            (select count(*) from working_capital where parent_type_id = 2 and parent_id = promoter_info.id) as countRow
            from working_capital
            left join promoter_info on promoter_info.id = working_capital.parent_id
            left join bank on bank.id = working_capital.bank_id
            where working_capital.is_active = 1 and working_capital.parent_id in
            (select promoter_id from business_promoter_mapping where business_id in
            (select id from business_infos where user_id = " . $request->user_id . ")) and parent_type_id = 2");

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }


    public function getGstDetailsMergeBusinessAndPromoter(Request $request)
    {

        if ($request->has('user_id')) {
            $data = DB::select("select gst_header.id as id,states.state_name as state_name,gst_header.gst_no as gst_number,'Business' as type,
    (select count(*) from gst_detail where gst_header_id = gst_header.id) as countRow
    from gst_header
    left join states on states.state_id = gst_header.state_id
    where gst_header.is_active = 1 and gst_header.parent_id in
    (select id from business_infos where is_active = 1 and user_id =" . $request->user_id . ")
    and gst_header.parent_type_id = 1
    UNION
    select gst_header.id as id,states.state_name as state_name,gst_header.gst_no as gst_number,'Promoter' as type,
    (select count(*) from gst_detail where gst_header_id = gst_header.id) as countRow
    from gst_header
    left join states on states.state_id = gst_header.state_id
    where gst_header.is_active = 1 and gst_header.parent_id in
    (select promoter_id from business_promoter_mapping where business_id in
    (select id from business_infos where user_id =" . $request->user_id . "))
    and gst_header.parent_type_id = 2");

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }

    public function getQuestionByUserIdAndRequestId(Request $request)
    {
       /* // Log::info("select * from proc_financial_deviation_inputs where created_by =' " .$request->user_id." ' ");
        $answers = DB::select("select * from proc_financial_deviation_inputs where created_by ='" . $request->user_id . "'");
        Log::info($answers);
        if (count($answers) > 0) {
            return response()->json([
                "status" => true,
                "message" => "successfully fetched",
                "data" => $answers
            ]);
        } else {
            return response()->json([
                "status" => false,
                "message" => "successfully fetched",

            ]);
        }
    }*/
		  
        // Log::info("select * from proc_financial_deviation_inputs where created_by =' " .$request->user_id." ' ");
        //$answers = DB::select("select * from proc_financial_deviation_inputs where application_id ='" . $request->user_id . "'");
		$answers = DB::select("select * from proc_financial_deviation_inputs where parameter_id = '". $request->parameter_id ."' and application_id ='" . $request->user_id . "'");
        //Log::info($answers);
        if (count($answers) > 0) {
            return response()->json([
                "status" => true,
                "message" => "successfully fetched",
                "data" => $answers
            ]);
        } else {
            return response()->json([
                "status" => false,
                "message" => "successfully fetched",

            ]);
        }
    }



    public function download_file(Request $request)
    {
        $url = "http://www.orimi.com/pdf-test.pdf";
        $contents = file_get_contents($url);
        $name = substr($url, strrpos($url, '/') + 1);
        file_put_contents(public_path('img/pdf-test.pdf'), $contents);
        return response()->json([
            "status" => true,
            "message" => 'File Downloaded successfully'
        ], 201);
    }


    public function azureBlobTesting(Request $request)
    {
        //Log::info("Print Data");
        /* $client = BlobRestProxy::createBlobService('DefaultEndpointsProtocol=https;AccountName="r7ysqxy68h";AccountKey="UykmSNwKu2uBBegD/0RfFjmS9UiUMrGg16KjDUQTr3vB+k/neeT5YzLQ0NH07OmnqNP7WUKUSNuHw6/lFY/m3g=="');
        $adapter = new AzureBlobStorageAdapter($client, 'vhmefr0tka');
        $filesystem = new Filesystem($adapter); */

        $connectionString = "DefaultEndpointsProtocol=https;AccountName=r7ysqxy68h;AccountKey=UykmSNwKu2uBBegD/0RfFjmS9UiUMrGg16KjDUQTr3vB+k/neeT5YzLQ0NH07OmnqNP7WUKUSNuHw6/lFY/m3g==";
        $blobClient = BlobRestProxy::createBlobService($connectionString);

        $createContainerOptions = new CreateContainerOptions();
        $createContainerOptions->setPublicAccess(PublicAccessType::CONTAINER_AND_BLOBS);
        // Set container metadata.
        $createContainerOptions->addMetaData("key1", "value1");
        $createContainerOptions->addMetaData("key2", "value2");
        $containerName = 'vhmefr0tka' . $this->generateRandomString();
        //$blobClient->createContainer('vhmefr0tka');
        $fileToUpload = "Controller.php";

        try {
            // Create container.
            $blobClient->createContainer($containerName, $createContainerOptions);

            // Getting local file so that we can upload it to Azure
            $myfile = fopen($fileToUpload, "w") or die("Unable to open file!");
            fclose($myfile);

            # Upload file as a block blob
            echo "Uploading BlockBlob: " . PHP_EOL;
            echo $fileToUpload;
            echo "<br />";

            $content = fopen($fileToUpload, "r");

            //Upload blob
            $blobClient->createBlockBlob($containerName, $fileToUpload, $content);

            // List blobs.
            $listBlobsOptions = new ListBlobsOptions();
            $listBlobsOptions->setPrefix("HelloWorld");

            echo "These are the blobs present in the container: ";

            do {
                $result = $blobClient->listBlobs($containerName, $listBlobsOptions);
                foreach ($result->getBlobs() as $blob) {
                    echo $blob->getName() . ": " . $blob->getUrl() . "<br />";
                }

                $listBlobsOptions->setContinuationToken($result->getContinuationToken());
            } while ($result->getContinuationToken());
            echo "<br />";

            // Get blob.
            echo "This is the content of the blob uploaded: ";
            $blob = $blobClient->getBlob($containerName, $fileToUpload);
            fpassthru($blob->getContentStream());
            echo "<br />";
        } catch (ServiceException $e) {
            // Handle exception based on error codes and messages.
            // Error codes and messages are here:
            // http://msdn.microsoft.com/library/azure/dd179439.aspx
            $code = $e->getCode();
            $error_message = $e->getMessage();
            echo $code . ": " . $error_message . "<br />";
        }
    }

    public function generateRandomString($length = 6)
    {
        $characters = 'abcdefghijklmnopqrstuvwxyz';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }

    public function saveloanEquifax(Request $request)
    {
        //print_r($request->result);
        Log::info($request->result['CCRResponse']['CIRReportDataLst']);
        if($request->result['CCRResponse']['CIRReportDataLst'] != null){
        for ($i = 0; $i < count($request->result['CCRResponse']['CIRReportDataLst']); $i++) {
            //Log::info("mmmmmmmm");
            $loanData = $request->result['CCRResponse']['CIRReportDataLst'][$i]['CIRReportData']['RetailAccountDetails'];
			
            //Log::info($loanData);
            $loan = Loan::firstOrNew(['id' => $request->loan_id]);
            $loan->parent_type_id = $request->parent_type_id;
            $loan->parent_id = $request->parent_id;
            $loan->Eligibility_flag = 0;
            $loan->data_submit_type = 0;
            $loan->source = "equifax";
            /* $loan->EMI = $request->emi;
            $loan->No_of_emi = $request->no_emi;
            $loan->Original_tenure_id = $request->l_tenture;
            $loan->emi_bounce_in_3_months = $request->emi_bounce_in_3_months;
            $loan->emi_bounce_in_6_months = $request->emi_bounce_in_6_months; */
            
            if(gettype($loanData) == 'array'){
                $obj = $loanData[0];
                if (array_key_exists("Institution", $obj)){ 
                    $loanData['Institution'] = strtolower($obj['Institution']);
                    //Log::info($loanData['Institution']);
                    $bankData = DB::select("select * from bank where name = '" . $loanData['Institution'] . "'");
                    //Log::info($bankData);
                    if(!empty($bankData)){
                    $loan['Financer_id'] = $bankData[0]->id;
                    }
                }
                if (array_key_exists("AccountType", $obj)) {
                    $loanData['AccountType'] = $obj['AccountType'];
                   $loanType = DB::select("select * from loan_types where name = '" . $loanData['AccountType'] . "'");
                   if(!empty($loanType)){
                        $loan['Loan_type_id'] = $loanType[0]->id;
                   }
                    //Log::info($loan['Loan_type_id']);
                }
                if (array_key_exists("SanctionAmount", $obj)) {
                    $loanData['SanctionAmount'] = $obj['SanctionAmount'];
                    $loan['Loan_amount'] = (int)str_replace(',', '', $loanData['SanctionAmount']);
                    //Log::info($loan['Loan_amount']);
                }
                if (array_key_exists("AccountStatus", $obj)) {
                    $loanData['AccountStatus'] = $obj['AccountStatus'];
                    if ($loanData['AccountStatus'] = "Current Account") {
                        $loan['Loan_still_open'] = true;
                    } elseif($loanData['AccountStatus'] = "Closed Account") {
                        $loan['Loan_still_open'] = false;
                    }else{
                        $loan['Loan_still_open'] = false; 
                    }
                    //Log::info($loan['Loan_still_open']);
                }
                if (array_key_exists("DateOpened", $obj)){
                    $loanData['DateOpened'] = $obj['DateOpened'];  
                    $loan['EMI_start_date'] = $loanData['DateOpened'];
                    //Log::info($loan['EMI_start_date']);
                }

                $today = date_default_timezone_set('Asia/Kolkata');
                $today = date("Y-m-d");
                //Log::info("count----");

                $period = date_diff(date_create($loan['EMI_start_date']), date_create($today))->format('%a'); // diff b/w  current date & start date
                $result = array($period);
                $sub_struct_month = ($result[0] / 30);
                $sub_struct_month = floor($sub_struct_month);

                if (($loan['Original_tenure_id'] - $sub_struct_month) > 6) {
                    $loan['obligation_considered_greater_than_6m'] = abs(6 * $loan['EMI']);
                    //Log::info('obligation_considered_greater_than_6m --- ' . $loan['obligation_considered_less_than_12m']);
                } else {
                    $loan['obligation_considered_less_than_12m'] = abs(($loan['Original_tenure_id'] - $sub_struct_month) * $loan['EMI']);
                    //Log::info('obligation_considered_less_than_12m --- ' . $loan['obligation_considered_less_than_12m']);
                }

                if (($loan['Original_tenure_id'] - $sub_struct_month) > 12) {
                    $loan['obligation_considered_greater_than_12m'] = abs(6 * $loan['EMI']);
                    //Log::info('obligation_considered_greater_than_12m --- ' . $loan['obligation_considered_greater_than_12m']);
                }

                if (array_key_exists("AccountNumber", $obj)) {
                    $loanData['AccountNumber'] = $obj['AccountNumber']; 
                    $loan['Account_no'] = $loanData['AccountNumber'];
                    //Log::info($loan['Account_no']);
                }
                if (array_key_exists("Balance", $obj)) {
                    $loanData['Balance'] = $obj['Balance'];
                    $loan['Remaining_emi'] = (int)str_replace(',', '', $loanData['Balance']);
                    //Log::info($loan['Remaining_emi']);
                }
                if (Loan::where('id', '=', $request->loan_id)->count() > 0) {
                    $loan->modified_on = now();
                    if ($request->has('created_by')) {
                        $loan->modified_by = $request->created_by;
                    } else {
                        $loan->modified_by = $request->user_id;
                    }
                } else {
                    if ($request->has('created_by')) {
                        $loan->created_by = $request->created_by;
                    } else {
                        $loan->created_by = $request->user_id;
                    }
                    $loan->created_on = now();
                    $loan->modified_on = now();
                    $loan->modified_by = $request->created_by;
                    $loan->bank_id = $request->bank_id;
                    $loan->bank_account_no = $request->bank_account_no;
                    $file_no = (string) Str::uuid();
                    $loan->file_no = $file_no;
                    //$this->saveFileFolderMappingDetails('Loans', $file_no, $request->user_id);
                     
                }
                
            } 
            $loan->save();   
        }

    }else{
        return response()->json([
            "message" => 'unable to fetch required data from equifax',
            "status" => false
        ], 201); 
    }
        if(!empty($loan)){
        return response()->json([
            "message" => 'Loan information saved successfully',
            "status" => true,
            "data" => $loan
        ], 201);
        }
        return response()->json([
            "message" => 'Failed to save Loan data',
            "status" => false
        ], 201);
    }

    /*public function loanDataParsingForStandAlonePage(Request $request)
    {
        //Basic Details Capture Data
        if (array_key_exists("NAME", $request['REQUEST'])) {
            $basicData['name'] = gettype($request['REQUEST']['NAME']) == 'array' ? "" : $request['REQUEST']['NAME'];
        } else {
            $basicData['name'] = "";
        }
        if (array_key_exists("DOB", $request['REQUEST'])) {
            $basicData['dob'] = gettype($request['REQUEST']['DOB']) == 'array' ? "" : $request['REQUEST']['DOB'];
        } else {
            $basicData['dob'] = "";
        }
        if (array_key_exists("EMAIL-1", $request['REQUEST'])) {
            $basicData['email'] = gettype($request['REQUEST']['EMAIL-1']) == 'array' ? "" : $request['REQUEST']['EMAIL-1'];
        } else {
            $basicData['email'] = "";
        }
        if (array_key_exists("ADDRESS-1", $request['REQUEST'])) {
            $basicData['address'] = gettype($request['REQUEST']['ADDRESS-1']) == 'array' ? "" : $request['REQUEST']['ADDRESS-1'];
        } else {
            $basicData['address'] = "";
        }
        if (array_key_exists("FATHER", $request['REQUEST'])) {
            $basicData['father'] = gettype($request['REQUEST']['FATHER']) == 'array' ? "" : $request['REQUEST']['FATHER'];
        } else {
            $basicData['father'] = "";
        }

        if (array_key_exists("SPOUSE", $request['REQUEST'])) {
            $basicData['spouse'] = gettype($request['REQUEST']['SPOUSE']) == 'array' ? "" : $request['REQUEST']['SPOUSE'];
        } else {
            $basicData['spouse'] = "";
        }
        if (array_key_exists("PAN", $request['REQUEST'])) {
            $basicData['kyc_id'] = gettype($request['REQUEST']['PAN']) == 'array' ? "" : $request['REQUEST']['PAN'];
        } else {
            $basicData['kyc_id'] = "";
        }
        if (array_key_exists("GENDER", $request['REQUEST'])) {
            $basicData['gender'] = gettype($request['REQUEST']['GENDER']) == 'array' ? "" : $request['REQUEST']['GENDER'];
        } else {
            $basicData['gender'] = "";
        }

        if (array_key_exists("PHONE-1", $request['REQUEST'])) {
            $basicData['phoneNumber'] = gettype($request['REQUEST']['PHONE-1']) == 'array' ? "" : $request['REQUEST']['PHONE-1'];
        } else {
            $basicData['phoneNumber'] = "";
        }
        if (array_key_exists("ADDRESS-2", $request['REQUEST'])) {
            $basicData['otherAddress'] = gettype($request['REQUEST']['ADDRESS-2']) == 'array' ? "" : $request['REQUEST']['ADDRESS-2'];
        } else {
            $basicData['otherAddress'] = "";
        }
        if (array_key_exists("MOTHER", $request['REQUEST'])) {
            $basicData['mother'] = gettype($request['REQUEST']['MOTHER']) == 'array' ? "" : $request['REQUEST']['MOTHER'];
        } else {
            $basicData['mother'] = "";
        }
        $basicData['scoreName'] = $request['SCORES']['SCORE']['SCORE-TYPE'];
        $basicData['scoreValue'] = $request['SCORES']['SCORE']['SCORE-VALUE'];
        $basicData['scoreComments'] = $request['SCORES']['SCORE']['SCORE-COMMENTS'];

        $monthArray = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

        /* Log::info($monthArray);
        Log::info($yearArray); */

        /*$data['BASICDATA'] = $basicData;
        $reportId = $request['HEADER']['REPORT-ID'];

        $this->saveLoanBasicData($reportId, $basicData);
        // Account List Parsing Logic
        $accountList = [];
        $linkedAccountList = [];
        $securityDetailsList = [];
        $la = 0;
        $sc = 0;
        for ($i = 0; $i < count($request['RESPONSES']['RESPONSE']); $i++) {
            $loanData = $request['RESPONSES']['RESPONSE'][$i]['LOAN-DETAILS'];
            if (array_key_exists("CREDIT-GUARANTOR", $loanData)) {
                $account['CREDITGUARANTOR'] = $loanData['CREDIT-GUARANTOR'];
            } else {
                $account['CREDITGUARANTOR'] = "";
            }

            if (array_key_exists("ACCT-NUMBER", $loanData)) {
                $account['ACCTNUMBER'] = $loanData['ACCT-NUMBER'];
            } else {
                $account['ACCTNUMBER'] = "";
            }

            if (array_key_exists("ACCT-TYPE", $loanData)) {
                $account['ACCTTYPE'] = $loanData['ACCT-TYPE'];
            } else {
                $account['ACCTTYPE'] = "";
            }

            if (array_key_exists("ACCOUNT-STATUS", $loanData)) {
                $account['ACCOUNTSTATUS'] = $loanData['ACCOUNT-STATUS'];
            } else {
                $account['ACCOUNTSTATUS'] = "";
            }


            if (array_key_exists("OWNERSHIP-IND", $loanData)) {
                $account['OWNERSHIPIND'] = $loanData['OWNERSHIP-IND'];
            } else {
                $account['OWNERSHIPIND'] = "";
            }

            if (array_key_exists("DISBURSED-DT", $loanData)) {
                $account['DISBURSEDDT'] = $loanData['DISBURSED-DT'];
            } else {
                $account['DISBURSEDDT'] = "";
            }

            if (array_key_exists("DISBURSED-AMT", $loanData)) {
                $account['DISBURSEDAMT'] = $loanData['DISBURSED-AMT'];
            } else {
                $account['DISBURSEDAMT'] = "";
            }

            if (array_key_exists("CREDIT-LIMIT", $loanData)) {
                $account['CREDITLIMIT'] = $loanData['CREDIT-LIMIT'];
            } else {
                $account['CREDITLIMIT'] = "";
            }
            if (array_key_exists("LAST-PAYMENT-DATE", $loanData)) {
                $account['LASTPAYMENTDATE'] = $loanData['LAST-PAYMENT-DATE'];
            } else {
                $account['LASTPAYMENTDATE'] = "";
            }
            if (array_key_exists("CURRENT-BAL", $loanData)) {
                $account['CURRENTBAL'] = $loanData['CURRENT-BAL'];
            } else {
                $account['CURRENTBAL'] = "";
            }
            if (array_key_exists("CASH-LIMIT", $loanData)) {
                $account['CASHLIMIT'] = $loanData['CASH-LIMIT'];
            } else {
                $account['CASHLIMIT'] = "";
            }
            if (array_key_exists("CLOSED-DATE", $loanData)) {
                $account['CLOSEDDATE'] = $loanData['CLOSED-DATE'];
            } else {
                $account['CLOSEDDATE'] = "";
            }
            if (array_key_exists("LAST-PAYMENT-DATE", $loanData)) {
                $account['LASTPAYMENTDATE'] = $loanData['LAST-PAYMENT-DATE'];
            } else {
                $account['LASTPAYMENTDATE'] = "";
            }

            if (array_key_exists("INSTALLMENT-AMT", $loanData)) {
                $account['INSTALLMENTAMT'] = $loanData['INSTALLMENT-AMT'];
            } else {
                $account['INSTALLMENTAMT'] = "";
            }

            if (array_key_exists("INTEREST-RATE", $loanData)) {
                $account['INTERESTRATE'] = $loanData['INTEREST-RATE'];
            } else {
                $account['INTERESTRATE'] = "";
            }

            $account['TENURE'] = 1;

            if (array_key_exists("OVERDUE-AMT", $loanData)) {
                $account['OVERDUEAMT'] = $loanData['OVERDUE-AMT'];
            } else {
                $account['OVERDUEAMT'] = "";
            }
            if (array_key_exists("WRITE-OFF-AMT", $loanData)) {
                $account['WRITEOFFAMT'] = $loanData['WRITE-OFF-AMT'];
            } else {
                $account['WRITEOFFAMT'] = "";
            }

            $account['TOTALWRITEOFFAMT'] = "";
            $account['SETTLEMENTAMOUNT'] = "";
            $account['ACCOUNTSTATUSLAST'] = "";

            if (array_key_exists("COMBINED-PAYMENT-HISTORY", $loanData)) {
                $COMBINEDPAYMENTHISTORY = $loanData['COMBINED-PAYMENT-HISTORY'];
            } else {
                $COMBINEDPAYMENTHISTORY = "";
            }
            $account['COMBINEDPAYMENTHISTORY'] = $COMBINEDPAYMENTHISTORY;

            $startYear = substr($COMBINEDPAYMENTHISTORY, 4, 4);
            $endYear = substr($COMBINEDPAYMENTHISTORY, strlen($COMBINEDPAYMENTHISTORY) - 13, 4);

            $paymentHistory = [];
            $yearArray = [];
            $ya = 0;
            for ($y = $startYear; $y >= $endYear; $y--) {
                $yearArray[$ya] = (int) $y;
                $ya++;
                $monthData = [];
                for ($m = 0; $m < count($monthArray); $m++) {
                    $monthYear = $monthArray[$m] . ':' . $y . ',';
                    if (strpos($COMBINEDPAYMENTHISTORY, $monthYear) != '')
                        $monthData[$monthArray[$m]] = substr($COMBINEDPAYMENTHISTORY, strpos($COMBINEDPAYMENTHISTORY, $monthYear) + 9, 7);
                    else
                        $monthData[$monthArray[$m]] = "";
                }
                $paymentHistory[$y] = $monthData;
            }
            $account['YEARLIST'] = $yearArray;
            $account['PAYMENTHISTORY'] = $paymentHistory;
            $accountList[$i] = $account;
            $this->saveLoanAccountListData($reportId, $account);


            if (array_key_exists("LINKED-ACCOUNTS", $loanData)) {
                if (array_key_exists("ACCOUNT-DETAILS", $loanData['LINKED-ACCOUNTS'])) {
                    $linkedAccData = $loanData['LINKED-ACCOUNTS']['ACCOUNT-DETAILS'];
                    if (array_key_exists("ACCT-NUMBER", $linkedAccData)) {
                        $linkedAccount['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                        if (array_key_exists("ACCT-NUMBER", $linkedAccData)) {
                            $linkedAccount['LINKEDACCOUNTNUMBER'] = $linkedAccData['ACCT-NUMBER'];
                        } else {
                            $linkedAccount['LINKEDACCOUNTNUMBER'] = "";
                        }

                        if (array_key_exists("CREDIT-GUARANTOR", $linkedAccData)) {
                            $linkedAccount['CREDITGUARANTOR'] = $linkedAccData['CREDIT-GUARANTOR'];
                        } else {
                            $linkedAccount['CREDITGUARANTOR'] = "";
                        }

                        if (array_key_exists("ACCT-TYPE", $linkedAccData)) {
                            $linkedAccount['ACCOUNTTYPE'] = $linkedAccData['ACCT-TYPE'];
                        } else {
                            $linkedAccount['ACCOUNTTYPE'] = "";
                        }
                        $linkedAccount['CREDITLIMIT'] = "";
                        $linkedAccount['HIGHCREDIT'] = "";
                        $linkedAccount['AMOUNTOVERDUE'] = "";
                        if (array_key_exists("DISBURSED-DT", $linkedAccData)) {
                            $linkedAccount['DISBURSEDDATE'] = $linkedAccData['DISBURSED-DT'];
                        } else {
                            $linkedAccount['DISBURSEDDATE'] = "";
                        }
                        $linkedAccount['CLOSEDDATE'] = "";
                        if (array_key_exists("LAST-PAYMENT-DATE", $linkedAccData)) {
                            $linkedAccount['LASTPAYMENTDATE'] = $linkedAccData['LAST-PAYMENT-DATE'];
                        } else {
                            $linkedAccount['LASTPAYMENTDATE'] = "";
                        }
                        $linkedAccountList[$la] = $linkedAccount;
                        $this->saveLoanLinkedAccountListData($reportId, $linkedAccount);
                        $la++;
                    } else {
                        for ($j = 0; $j < count($linkedAccData); $j++) {
                            $linkedAccount['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                            if (array_key_exists("ACCT-NUMBER", $linkedAccData[$j])) {
                                $linkedAccount['LINKEDACCOUNTNUMBER'] = $linkedAccData[$j]['ACCT-NUMBER'];
                            } else {
                                $linkedAccount['LINKEDACCOUNTNUMBER'] = "";
                            }

                            if (array_key_exists("CREDIT-GUARANTOR", $linkedAccData[$j])) {
                                $linkedAccount['CREDITGUARANTOR'] = $linkedAccData[$j]['CREDIT-GUARANTOR'];
                            } else {
                                $linkedAccount['CREDITGUARANTOR'] = "";
                            }

                            if (array_key_exists("ACCT-TYPE", $linkedAccData[$j])) {
                                $linkedAccount['ACCOUNTTYPE'] = $linkedAccData[$j]['ACCT-TYPE'];
                            } else {
                                $linkedAccount['ACCOUNTTYPE'] = "";
                            }
                            $linkedAccount['CREDITLIMIT'] = "";
                            $linkedAccount['HIGHCREDIT'] = "";
                            $linkedAccount['AMOUNTOVERDUE'] = "";
                            if (array_key_exists("DISBURSED-DT", $linkedAccData[$j])) {
                                $linkedAccount['DISBURSEDDATE'] = $linkedAccData[$j]['DISBURSED-DT'];
                            } else {
                                $linkedAccount['DISBURSEDDATE'] = "";
                            }
                            $linkedAccount['CLOSEDDATE'] = "";
                            if (array_key_exists("LAST-PAYMENT-DATE", $linkedAccData[$j])) {
                                $linkedAccount['LASTPAYMENTDATE'] = $linkedAccData[$j]['LAST-PAYMENT-DATE'];
                            } else {
                                $linkedAccount['LASTPAYMENTDATE'] = "";
                            }
                            $linkedAccountList[$la] = $linkedAccount;
                            $this->saveLoanLinkedAccountListData($reportId, $linkedAccount);
                            $la++;
                        }
                    }
                }
            }

            if (array_key_exists("SECURITY-DETAILS", $loanData)) {
                if (array_key_exists("SECURITY-DETAIL", $loanData['SECURITY-DETAILS'])) {
                    $securityDeatils = $loanData['SECURITY-DETAILS']['SECURITY-DETAIL'];
                    if (array_key_exists("SECURITY-VALUE", $securityDeatils)) {
                        $securityData['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                        if (array_key_exists("SECURITY-TYPE", $securityDeatils)) {
                            $securityData['SECURITYTYPE'] =  gettype($securityDeatils['SECURITY-TYPE']) == 'array' ? "" : $securityDeatils['SECURITY-TYPE'];
                        } else {
                            $securityData['SECURITYTYPE'] = "";
                        }
                        if (array_key_exists("OWNER-NAME", $securityDeatils)) {
                            $securityData['OWNERNAME'] = gettype($securityDeatils['OWNER-NAME']) == 'array' ? "" : $securityDeatils['OWNER-NAME'];
                        } else {
                            $securityData['OWNERNAME'] = "";
                        }
                        $securityData['TYPEOFCHARGE'] = "";

                        if (array_key_exists("SECURITY-VALUE", $securityDeatils)) {
                            $securityData['SECURITYVALUE'] = gettype($securityDeatils['SECURITY-VALUE']) == 'array' ? "" : $securityDeatils['SECURITY-VALUE'];
                        } else {
                            $securityData['SECURITYVALUE'] = "";
                        }
                        if (array_key_exists("DATE-OF-VALUE", $securityDeatils)) {
                            $securityData['DATEOFVALUE'] = gettype($securityDeatils['DATE-OF-VALUE']) == 'array' ? "" : $securityDeatils['DATE-OF-VALUE'];
                        } else {
                            $securityData['DATEOFVALUE'] = "";
                        }
                        if (array_key_exists("PROPERTY-ADDRESS", $securityDeatils)) {
                            $securityData['PROPERTYADDRESS'] = gettype($securityDeatils['PROPERTY-ADDRESS']) == 'array' ? "" : $securityDeatils['PROPERTY-ADDRESS'];
                        } else {
                            $securityData['PROPERTYADDRESS'] = "";
                        }

                        if (array_key_exists("AUTOMOBILE-TYPE", $securityDeatils)) {
                            $securityData['AUTOMOBILETYPE'] = gettype($securityDeatils['AUTOMOBILE-TYPE']) == 'array' ? "" : $securityDeatils['AUTOMOBILE-TYPE'];
                        } else {
                            $securityData['AUTOMOBILETYPE'] = "";
                        }

                        if (array_key_exists("YEAR-OF-MANUFACTURE", $securityDeatils)) {
                            $securityData['YEAROFMANUFACTURE'] = gettype($securityDeatils['YEAR-OF-MANUFACTURE']) == 'array' ? "" : $securityDeatils['YEAR-OF-MANUFACTURE'];
                        } else {
                            $securityData['YEAROFMANUFACTURE'] = "";
                        }
                        if (array_key_exists("REGISTRATION-NUMBER", $securityDeatils)) {
                            $securityData['REGISTRATIONNUMBER'] = gettype($securityDeatils['REGISTRATION-NUMBER']) == 'array' ? "" : $securityDeatils['REGISTRATION-NUMBER'];
                        } else {
                            $securityData['REGISTRATIONNUMBER'] = "";
                        }
                        if (array_key_exists("ENGINE-NUMBER", $securityDeatils)) {
                            $securityData['ENGINENUMBER'] = gettype($securityDeatils['ENGINE-NUMBER']) == 'array' ? "" : $securityDeatils['ENGINE-NUMBER'];
                        } else {
                            $securityData['ENGINENUMBER'] = "";
                        }
                        if (array_key_exists("CHASSIS-NUMBER", $securityDeatils)) {
                            $securityData['CHASSISNUMBER'] = gettype($securityDeatils['CHASSIS-NUMBER']) == 'array' ? "" : $securityDeatils['CHASSIS-NUMBER'];
                        } else {
                            $securityData['CHASSISNUMBER'] = "";
                        }
                        $securityDetailsList[$sc] = $securityData;
                        $this->saveLoanSecurityDetails($reportId, $securityData);
                        $sc++;
                    } else {
                        for ($j = 0; $j < count($securityDeatils); $j++) {

                            $securityData['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                            if (array_key_exists("SECURITY-TYPE", $securityDeatils[$j])) {
                                $securityData['SECURITYTYPE'] = gettype($securityDeatils[$j]['SECURITY-TYPE']) == 'array' ? "" : $securityDeatils[$j]['SECURITY-TYPE'];
                            } else {
                                $securityData['SECURITYTYPE'] = "";
                            }
                            if (array_key_exists("OWNER-NAME", $securityDeatils[$j])) {
                                $securityData['OWNERNAME'] = gettype($securityDeatils[$j]['OWNER-NAME']) == 'array' ? "" : $securityDeatils[$j]['OWNER-NAME'];
                            } else {
                                $securityData['OWNERNAME'] = "";
                            }
                            $securityData['TYPEOFCHARGE'] = "";

                            if (array_key_exists("SECURITY-VALUE", $securityDeatils[$j])) {
                                $securityData['SECURITYVALUE'] = gettype($securityDeatils[$j]['SECURITY-VALUE']) == 'array' ? "" : $securityDeatils[$j]['SECURITY-VALUE'];
                            } else {
                                $securityData['SECURITYVALUE'] = "";
                            }
                            if (array_key_exists("DATE-OF-VALUE", $securityDeatils[$j])) {
                                $securityData['DATEOFVALUE'] = gettype($securityDeatils[$j]['DATE-OF-VALUE']) == 'array' ? "" : $securityDeatils[$j]['DATE-OF-VALUE'];
                            } else {
                                $securityData['DATEOFVALUE'] = "";
                            }
                            if (array_key_exists("PROPERTY-ADDRESS", $securityDeatils[$j])) {
                                $securityData['PROPERTYADDRESS'] = gettype($securityDeatils[$j]['PROPERTY-ADDRESS']) == 'array' ? "" : $securityDeatils[$j]['PROPERTY-ADDRESS'];
                            } else {
                                $securityData['PROPERTYADDRESS'] = "";
                            }

                            if (array_key_exists("AUTOMOBILE-TYPE", $securityDeatils[$j])) {
                                $securityData['AUTOMOBILETYPE'] = gettype($securityDeatils[$j]['AUTOMOBILE-TYPE']) == 'array' ? "" : $securityDeatils[$j]['AUTOMOBILE-TYPE'];
                            } else {
                                $securityData['AUTOMOBILETYPE'] = "";
                            }

                            if (array_key_exists("YEAR-OF-MANUFACTURE", $securityDeatils[$j])) {
                                $securityData['YEAROFMANUFACTURE'] = gettype($securityDeatils[$j]['YEAR-OF-MANUFACTURE']) == 'array' ? "" : $securityDeatils[$j]['YEAR-OF-MANUFACTURE'];
                            } else {
                                $securityData['YEAROFMANUFACTURE'] = "";
                            }
                            if (array_key_exists("REGISTRATION-NUMBER", $securityDeatils[$j])) {
                                $securityData['REGISTRATIONNUMBER'] = gettype($securityDeatils[$j]['REGISTRATION-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['REGISTRATION-NUMBER'];
                            } else {
                                $securityData['REGISTRATIONNUMBER'] = "";
                            }
                            if (array_key_exists("ENGINE-NUMBER", $securityDeatils[$j])) {
                                $securityData['ENGINENUMBER'] = gettype($securityDeatils[$j]['ENGINE-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['ENGINE-NUMBER'];
                            } else {
                                $securityData['ENGINENUMBER'] = "";
                            }
                            if (array_key_exists("CHASSIS-NUMBER", $securityDeatils[$j])) {
                                $securityData['CHASSISNUMBER'] = gettype($securityDeatils[$j]['CHASSIS-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['CHASSIS-NUMBER'];
                            } else {
                                $securityData['CHASSISNUMBER'] = "";
                            }
                            $securityDetailsList[$sc] = $securityData;
                            $this->saveLoanSecurityDetails($reportId, $securityData);
                            $sc++;
                        }
                    }
                }
            }
        }

        $data['ACCOUNTLIST'] = $accountList;
        $data['LINKEDACCOUNTLIST'] = $linkedAccountList;
        $data['SECURITYDETAILSLIST'] = $securityDetailsList;

        return response()->json([
            "status" => true,
            "message" => 'Data parse successfully',
            "data" => $data
        ], 201);
    }*/
	
	
	
	
	public function loanDataParsingForStandAlonePage(Request $request)
    {
		
        //Basic Details Capture Data
        if (array_key_exists("NAME", $request['REQUEST'])) {
            $basicData['name'] = gettype($request['REQUEST']['NAME']) == 'array' ? "" : $request['REQUEST']['NAME'];
        } else {
            $basicData['name'] = "";
        }
        //Log::info($basicData['name']);
        if (array_key_exists("DOB", $request['REQUEST'])) {
            $basicData['dob'] = gettype($request['REQUEST']['DOB']) == 'array' ? "" : $request['REQUEST']['DOB'];
        } else {
            $basicData['dob'] = "";
        }
        if (array_key_exists("EMAIL-1", $request['REQUEST'])) {
            $basicData['email'] = gettype($request['REQUEST']['EMAIL-1']) == 'array' ? "" : $request['REQUEST']['EMAIL-1'];
        } else {
            $basicData['email'] = "";
        }
        if (array_key_exists("ADDRESS-1", $request['REQUEST'])) {
            $basicData['address'] = gettype($request['REQUEST']['ADDRESS-1']) == 'array' ? "" : $request['REQUEST']['ADDRESS-1'];
        } else {
            $basicData['address'] = "";
        }
        if (array_key_exists("FATHER", $request['REQUEST'])) {
            $basicData['father'] = gettype($request['REQUEST']['FATHER']) == 'array' ? "" : $request['REQUEST']['FATHER'];
        } else {
            $basicData['father'] = "";
        }

        if (array_key_exists("SPOUSE", $request['REQUEST'])) {
            $basicData['spouse'] = gettype($request['REQUEST']['SPOUSE']) == 'array' ? "" : $request['REQUEST']['SPOUSE'];
        } else {
            $basicData['spouse'] = "";
        }
        if (array_key_exists("PAN", $request['REQUEST'])) {
            $basicData['kyc_id'] = gettype($request['REQUEST']['PAN']) == 'array' ? "" : $request['REQUEST']['PAN'];
        } else {
            $basicData['kyc_id'] = "";
        }
        if (array_key_exists("GENDER", $request['REQUEST'])) {
            $basicData['gender'] = gettype($request['REQUEST']['GENDER']) == 'array' ? "" : $request['REQUEST']['GENDER'];
        } else {
            $basicData['gender'] = "";
        }

        if (array_key_exists("PHONE-1", $request['REQUEST'])) {
            $basicData['phoneNumber'] = gettype($request['REQUEST']['PHONE-1']) == 'array' ? "" : $request['REQUEST']['PHONE-1'];
        } else {
            $basicData['phoneNumber'] = "";
        }
        if (array_key_exists("ADDRESS-2", $request['REQUEST'])) {
            $basicData['otherAddress'] = gettype($request['REQUEST']['ADDRESS-2']) == 'array' ? "" : $request['REQUEST']['ADDRESS-2'];
        } else {
            $basicData['otherAddress'] = "";
        }
        if (array_key_exists("MOTHER", $request['REQUEST'])) {
            $basicData['mother'] = gettype($request['REQUEST']['MOTHER']) == 'array' ? "" : $request['REQUEST']['MOTHER'];
        } else {
            $basicData['mother'] = "";
        }
        if($request['SCORES']){
        $basicData['scoreName'] = $request['SCORES']['SCORE']['SCORE-TYPE'];
        $basicData['scoreValue'] = $request['SCORES']['SCORE']['SCORE-VALUE'];
       if(array_key_exists('SCORE-COMMENTS',$request['SCORES']['SCORE'])){
            $basicData['scoreComments'] = $request['SCORES']['SCORE']['SCORE-COMMENTS'];
        }else{
            $basicData['scoreComments'] = "";
        }
        }else{
            $basicData['scoreName'] = "";
            $basicData['scoreValue'] = "";
             if(array_key_exists('SCORE-COMMENTS',$request['SCORES']['SCORE'])){
            $basicData['scoreComments'] = $request['SCORES']['SCORE']['SCORE-COMMENTS'];
        }else{
            $basicData['scoreComments'] = "";
        }
        }

        $monthArray = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

        /* Log::info($monthArray);
        Log::info($yearArray); */
		
        $data['BASICDATA'] = $basicData;
        $reportId = $request['HEADER']['REPORT-ID'];

        $this->saveLoanBasicData($reportId, $basicData);
        // Account List Parsing Logic
        $accountList = [];
        $linkedAccountList = [];
        $securityDetailsList = [];
        $la = 0;
        $sc = 0;
        $yearArray = [];
        $paymentHistory = [];
        //echo count($request['RESPONSES']['RESPONSE']);exit();
       // Log::info(print_r($request['RESPONSES']['RESPONSE']['LOAN-DETAILS']));
		//exit();
	if($request['RESPONSES']['RESPONSE']){
		//Log::info(print_r($request['RESPONSES']['RESPONSE'],true));
      if(count($request['RESPONSES']['RESPONSE']) > 1){
        for ($i = 0; $i < count($request['RESPONSES']['RESPONSE']); $i++) {
            $loanData = $request['RESPONSES']['RESPONSE'][$i]['LOAN-DETAILS'];
            if (array_key_exists("CREDIT-GUARANTOR", $loanData)) {
                $account['CREDITGUARANTOR'] = $loanData['CREDIT-GUARANTOR'];
            } else {
                $account['CREDITGUARANTOR'] = "";
            }

            if (array_key_exists("ACCT-NUMBER", $loanData)) {
                $account['ACCTNUMBER'] = $loanData['ACCT-NUMBER'];
            } else {
                $account['ACCTNUMBER'] = "";
            }

            if (array_key_exists("ACCT-TYPE", $loanData)) {
                $account['ACCTTYPE'] = $loanData['ACCT-TYPE'];
            } else {
                $account['ACCTTYPE'] = "";
            }

            if (array_key_exists("ACCOUNT-STATUS", $loanData)) {
                $account['ACCOUNTSTATUS'] = $loanData['ACCOUNT-STATUS'];
            } else {
                $account['ACCOUNTSTATUS'] = "";
            }


            if (array_key_exists("OWNERSHIP-IND", $loanData)) {
                $account['OWNERSHIPIND'] = $loanData['OWNERSHIP-IND'];
            } else {
                $account['OWNERSHIPIND'] = "";
            }

            if (array_key_exists("DISBURSED-DT", $loanData)) {
                $account['DISBURSEDDT'] = $loanData['DISBURSED-DT'];
            } else {
                $account['DISBURSEDDT'] = "";
            }

            if (array_key_exists("DISBURSED-AMT", $loanData)) {
                $account['DISBURSEDAMT'] = $loanData['DISBURSED-AMT'];
            } else {
                $account['DISBURSEDAMT'] = "";
            }

            if (array_key_exists("CREDIT-LIMIT", $loanData)) {
                $account['CREDITLIMIT'] = $loanData['CREDIT-LIMIT'];
            } else {
                $account['CREDITLIMIT'] = "";
            }
            if (array_key_exists("LAST-PAYMENT-DATE", $loanData)) {
                $account['LASTPAYMENTDATE'] = $loanData['LAST-PAYMENT-DATE'];
            } else {
                $account['LASTPAYMENTDATE'] = "";
            }
            if (array_key_exists("CURRENT-BAL", $loanData)) {
                $account['CURRENTBAL'] = $loanData['CURRENT-BAL'];
            } else {
                $account['CURRENTBAL'] = "";
            }
            if (array_key_exists("CASH-LIMIT", $loanData)) {
                $account['CASHLIMIT'] = $loanData['CASH-LIMIT'];
            } else {
                $account['CASHLIMIT'] = "";
            }
            if (array_key_exists("CLOSED-DATE", $loanData)) {
                $account['CLOSEDDATE'] = $loanData['CLOSED-DATE'];
            } else {
                $account['CLOSEDDATE'] = "";
            }
            if (array_key_exists("LAST-PAYMENT-DATE", $loanData)) {
                $account['LASTPAYMENTDATE'] = $loanData['LAST-PAYMENT-DATE'];
            } else {
                $account['LASTPAYMENTDATE'] = "";
            }

            if (array_key_exists("INSTALLMENT-AMT", $loanData)) {
                $account['INSTALLMENTAMT'] = $loanData['INSTALLMENT-AMT'];
            } else {
                $account['INSTALLMENTAMT'] = "";
            }

            if (array_key_exists("INTEREST-RATE", $loanData)) {
                $account['INTERESTRATE'] = $loanData['INTEREST-RATE'];
            } else {
                $account['INTERESTRATE'] = "";
            }

            $account['TENURE'] = 1;

            if (array_key_exists("OVERDUE-AMT", $loanData)) {
                $account['OVERDUEAMT'] = $loanData['OVERDUE-AMT'];
            } else {
                $account['OVERDUEAMT'] = "";
            }
            if (array_key_exists("WRITE-OFF-AMT", $loanData)) {
                $account['WRITEOFFAMT'] = $loanData['WRITE-OFF-AMT'];
            } else {
                $account['WRITEOFFAMT'] = "";
            }

            $account['TOTALWRITEOFFAMT'] = "";
            $account['SETTLEMENTAMOUNT'] = "";
            $account['ACCOUNTSTATUSLAST'] = "";
            //Log::info("COMBINED-PAYMENT-HISTORY");
            if (array_key_exists("COMBINED-PAYMENT-HISTORY", $loanData)) {
                $COMBINEDPAYMENTHISTORY = $loanData['COMBINED-PAYMENT-HISTORY'];
                  
            } else {
                $COMBINEDPAYMENTHISTORY = [];
            }
            //Log::info(print_r($COMBINEDPAYMENTHISTORY,true)); 
			if($loanData['COMBINED-PAYMENT-HISTORY']){
            $account['COMBINEDPAYMENTHISTORY'] = $COMBINEDPAYMENTHISTORY;
            
            $startYear = substr($COMBINEDPAYMENTHISTORY, 4, 4);
            //Log::info($startYear);
            $endYear = substr($COMBINEDPAYMENTHISTORY, strlen($COMBINEDPAYMENTHISTORY) - 13, 4);

           
           
            $ya = 0;
            for ($y = $startYear; $y >= $endYear; $y--) {
                $yearArray[$ya] = (int) $y;
                $ya++;
                $monthData = [];
                for ($m = 0; $m < count($monthArray); $m++) {
                    $monthYear = $monthArray[$m] . ':' . $y . ',';
                    if (strpos($COMBINEDPAYMENTHISTORY, $monthYear) != '')
                        $monthData[$monthArray[$m]] = substr($COMBINEDPAYMENTHISTORY, strpos($COMBINEDPAYMENTHISTORY, $monthYear) + 9, 7);
                    else
                        $monthData[$monthArray[$m]] = "";
                }
                $paymentHistory[$y] = $monthData;
            }
			}else{
                $account['COMBINEDPAYMENTHISTORY'] = "";
				$COMBINEDPAYMENTHISTORY = ""; 
			}
            $account['YEARLIST'] = $yearArray;
            $account['PAYMENTHISTORY'] = $paymentHistory;
            $accountList[$i] = $account;
            $this->saveLoanAccountListData($reportId, $account);


            if (array_key_exists("LINKED-ACCOUNTS", $loanData)) {
                if (array_key_exists("ACCOUNT-DETAILS", $loanData['LINKED-ACCOUNTS'])) {
                    $linkedAccData = $loanData['LINKED-ACCOUNTS']['ACCOUNT-DETAILS'];
                    if (array_key_exists("ACCT-NUMBER", $linkedAccData)) {
                        $linkedAccount['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                        if (array_key_exists("ACCT-NUMBER", $linkedAccData)) {
                            $linkedAccount['LINKEDACCOUNTNUMBER'] = $linkedAccData['ACCT-NUMBER'];
                        } else {
                            $linkedAccount['LINKEDACCOUNTNUMBER'] = "";
                        }

                        if (array_key_exists("CREDIT-GUARANTOR", $linkedAccData)) {
                            $linkedAccount['CREDITGUARANTOR'] = $linkedAccData['CREDIT-GUARANTOR'];
                        } else {
                            $linkedAccount['CREDITGUARANTOR'] = "";
                        }

                        if (array_key_exists("ACCT-TYPE", $linkedAccData)) {
                            $linkedAccount['ACCOUNTTYPE'] = $linkedAccData['ACCT-TYPE'];
                        } else {
                            $linkedAccount['ACCOUNTTYPE'] = "";
                        }
                        $linkedAccount['CREDITLIMIT'] = "";
                        $linkedAccount['HIGHCREDIT'] = "";
                        $linkedAccount['AMOUNTOVERDUE'] = "";
                        if (array_key_exists("DISBURSED-DT", $linkedAccData)) {
                            $linkedAccount['DISBURSEDDATE'] = $linkedAccData['DISBURSED-DT'];
                        } else {
                            $linkedAccount['DISBURSEDDATE'] = "";
                        }
                        $linkedAccount['CLOSEDDATE'] = "";
                        if (array_key_exists("LAST-PAYMENT-DATE", $linkedAccData)) {
                            $linkedAccount['LASTPAYMENTDATE'] = $linkedAccData['LAST-PAYMENT-DATE'];
                        } else {
                            $linkedAccount['LASTPAYMENTDATE'] = "";
                        }
                        $linkedAccountList[$la] = $linkedAccount;
                        $this->saveLoanLinkedAccountListData($reportId, $linkedAccount);
                        $la++;
                    } else {
                        for ($j = 0; $j < count($linkedAccData); $j++) {
                            $linkedAccount['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                            if (array_key_exists("ACCT-NUMBER", $linkedAccData[$j])) {
                                $linkedAccount['LINKEDACCOUNTNUMBER'] = $linkedAccData[$j]['ACCT-NUMBER'];
                            } else {
                                $linkedAccount['LINKEDACCOUNTNUMBER'] = "";
                            }

                            if (array_key_exists("CREDIT-GUARANTOR", $linkedAccData[$j])) {
                                $linkedAccount['CREDITGUARANTOR'] = $linkedAccData[$j]['CREDIT-GUARANTOR'];
                            } else {
                                $linkedAccount['CREDITGUARANTOR'] = "";
                            }

                            if (array_key_exists("ACCT-TYPE", $linkedAccData[$j])) {
                                $linkedAccount['ACCOUNTTYPE'] = $linkedAccData[$j]['ACCT-TYPE'];
                            } else {
                                $linkedAccount['ACCOUNTTYPE'] = "";
                            }
                            $linkedAccount['CREDITLIMIT'] = "";
                            $linkedAccount['HIGHCREDIT'] = "";
                            $linkedAccount['AMOUNTOVERDUE'] = "";
                            if (array_key_exists("DISBURSED-DT", $linkedAccData[$j])) {
                                $linkedAccount['DISBURSEDDATE'] = $linkedAccData[$j]['DISBURSED-DT'];
                            } else {
                                $linkedAccount['DISBURSEDDATE'] = "";
                            }
                            $linkedAccount['CLOSEDDATE'] = "";
                            if (array_key_exists("LAST-PAYMENT-DATE", $linkedAccData[$j])) {
                                $linkedAccount['LASTPAYMENTDATE'] = $linkedAccData[$j]['LAST-PAYMENT-DATE'];
                            } else {
                                $linkedAccount['LASTPAYMENTDATE'] = "";
                            }
                            $linkedAccountList[$la] = $linkedAccount;
                            $this->saveLoanLinkedAccountListData($reportId, $linkedAccount);
                            $la++;
                        }
                    }
                }
            }
			//Log::info("step2");
            if (array_key_exists("SECURITY-DETAILS", $loanData)) {
                if (array_key_exists("SECURITY-DETAIL", $loanData['SECURITY-DETAILS'])) {
                    $securityDeatils = $loanData['SECURITY-DETAILS']['SECURITY-DETAIL'];
                    if (array_key_exists("SECURITY-VALUE", $securityDeatils)) {
                        $securityData['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                        if (array_key_exists("SECURITY-TYPE", $securityDeatils)) {
                            $securityData['SECURITYTYPE'] =  gettype($securityDeatils['SECURITY-TYPE']) == 'array' ? "" : $securityDeatils['SECURITY-TYPE'];
                        } else {
                            $securityData['SECURITYTYPE'] = "";
                        }
                        if (array_key_exists("OWNER-NAME", $securityDeatils)) {
                            $securityData['OWNERNAME'] = gettype($securityDeatils['OWNER-NAME']) == 'array' ? "" : $securityDeatils['OWNER-NAME'];
                        } else {
                            $securityData['OWNERNAME'] = "";
                        }
                        $securityData['TYPEOFCHARGE'] = "";

                        if (array_key_exists("SECURITY-VALUE", $securityDeatils)) {
                            $securityData['SECURITYVALUE'] = gettype($securityDeatils['SECURITY-VALUE']) == 'array' ? "" : $securityDeatils['SECURITY-VALUE'];
                        } else {
                            $securityData['SECURITYVALUE'] = "";
                        }
                        if (array_key_exists("DATE-OF-VALUE", $securityDeatils)) {
                            $securityData['DATEOFVALUE'] = gettype($securityDeatils['DATE-OF-VALUE']) == 'array' ? "" : $securityDeatils['DATE-OF-VALUE'];
                        } else {
                            $securityData['DATEOFVALUE'] = "";
                        }
                        if (array_key_exists("PROPERTY-ADDRESS", $securityDeatils)) {
                            $securityData['PROPERTYADDRESS'] = gettype($securityDeatils['PROPERTY-ADDRESS']) == 'array' ? "" : $securityDeatils['PROPERTY-ADDRESS'];
                        } else {
                            $securityData['PROPERTYADDRESS'] = "";
                        }

                        if (array_key_exists("AUTOMOBILE-TYPE", $securityDeatils)) {
                            $securityData['AUTOMOBILETYPE'] = gettype($securityDeatils['AUTOMOBILE-TYPE']) == 'array' ? "" : $securityDeatils['AUTOMOBILE-TYPE'];
                        } else {
                            $securityData['AUTOMOBILETYPE'] = "";
                        }

                        if (array_key_exists("YEAR-OF-MANUFACTURE", $securityDeatils)) {
                            $securityData['YEAROFMANUFACTURE'] = gettype($securityDeatils['YEAR-OF-MANUFACTURE']) == 'array' ? "" : $securityDeatils['YEAR-OF-MANUFACTURE'];
                        } else {
                            $securityData['YEAROFMANUFACTURE'] = "";
                        }
                        if (array_key_exists("REGISTRATION-NUMBER", $securityDeatils)) {
                            $securityData['REGISTRATIONNUMBER'] = gettype($securityDeatils['REGISTRATION-NUMBER']) == 'array' ? "" : $securityDeatils['REGISTRATION-NUMBER'];
                        } else {
                            $securityData['REGISTRATIONNUMBER'] = "";
                        }
                        if (array_key_exists("ENGINE-NUMBER", $securityDeatils)) {
                            $securityData['ENGINENUMBER'] = gettype($securityDeatils['ENGINE-NUMBER']) == 'array' ? "" : $securityDeatils['ENGINE-NUMBER'];
                        } else {
                            $securityData['ENGINENUMBER'] = "";
                        }
                        if (array_key_exists("CHASSIS-NUMBER", $securityDeatils)) {
                            $securityData['CHASSISNUMBER'] = gettype($securityDeatils['CHASSIS-NUMBER']) == 'array' ? "" : $securityDeatils['CHASSIS-NUMBER'];
                        } else {
                            $securityData['CHASSISNUMBER'] = "";
                        }
                        $securityDetailsList[$sc] = $securityData;
                        $this->saveLoanSecurityDetails($reportId, $securityData);
                        $sc++;
                    } else {
                        for ($j = 0; $j < count($securityDeatils); $j++) {

                            $securityData['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                            if (array_key_exists("SECURITY-TYPE", $securityDeatils[$j])) {
                                $securityData['SECURITYTYPE'] = gettype($securityDeatils[$j]['SECURITY-TYPE']) == 'array' ? "" : $securityDeatils[$j]['SECURITY-TYPE'];
                            } else {
                                $securityData['SECURITYTYPE'] = "";
                            }
                            if (array_key_exists("OWNER-NAME", $securityDeatils[$j])) {
                                $securityData['OWNERNAME'] = gettype($securityDeatils[$j]['OWNER-NAME']) == 'array' ? "" : $securityDeatils[$j]['OWNER-NAME'];
                            } else {
                                $securityData['OWNERNAME'] = "";
                            }
                            $securityData['TYPEOFCHARGE'] = "";

                            if (array_key_exists("SECURITY-VALUE", $securityDeatils[$j])) {
                                $securityData['SECURITYVALUE'] = gettype($securityDeatils[$j]['SECURITY-VALUE']) == 'array' ? "" : $securityDeatils[$j]['SECURITY-VALUE'];
                            } else {
                                $securityData['SECURITYVALUE'] = "";
                            }
                            if (array_key_exists("DATE-OF-VALUE", $securityDeatils[$j])) {
                                $securityData['DATEOFVALUE'] = gettype($securityDeatils[$j]['DATE-OF-VALUE']) == 'array' ? "" : $securityDeatils[$j]['DATE-OF-VALUE'];
                            } else {
                                $securityData['DATEOFVALUE'] = "";
                            }
                            if (array_key_exists("PROPERTY-ADDRESS", $securityDeatils[$j])) {
                                $securityData['PROPERTYADDRESS'] = gettype($securityDeatils[$j]['PROPERTY-ADDRESS']) == 'array' ? "" : $securityDeatils[$j]['PROPERTY-ADDRESS'];
                            } else {
                                $securityData['PROPERTYADDRESS'] = "";
                            }

                            if (array_key_exists("AUTOMOBILE-TYPE", $securityDeatils[$j])) {
                                $securityData['AUTOMOBILETYPE'] = gettype($securityDeatils[$j]['AUTOMOBILE-TYPE']) == 'array' ? "" : $securityDeatils[$j]['AUTOMOBILE-TYPE'];
                            } else {
                                $securityData['AUTOMOBILETYPE'] = "";
                            }

                            if (array_key_exists("YEAR-OF-MANUFACTURE", $securityDeatils[$j])) {
                                $securityData['YEAROFMANUFACTURE'] = gettype($securityDeatils[$j]['YEAR-OF-MANUFACTURE']) == 'array' ? "" : $securityDeatils[$j]['YEAR-OF-MANUFACTURE'];
                            } else {
                                $securityData['YEAROFMANUFACTURE'] = "";
                            }
                            if (array_key_exists("REGISTRATION-NUMBER", $securityDeatils[$j])) {
                                $securityData['REGISTRATIONNUMBER'] = gettype($securityDeatils[$j]['REGISTRATION-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['REGISTRATION-NUMBER'];
                            } else {
                                $securityData['REGISTRATIONNUMBER'] = "";
                            }
                            if (array_key_exists("ENGINE-NUMBER", $securityDeatils[$j])) {
                                $securityData['ENGINENUMBER'] = gettype($securityDeatils[$j]['ENGINE-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['ENGINE-NUMBER'];
                            } else {
                                $securityData['ENGINENUMBER'] = "";
                            }
                            if (array_key_exists("CHASSIS-NUMBER", $securityDeatils[$j])) {
                                $securityData['CHASSISNUMBER'] = gettype($securityDeatils[$j]['CHASSIS-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['CHASSIS-NUMBER'];
                            } else {
                                $securityData['CHASSISNUMBER'] = "";
                            }
                            $securityDetailsList[$sc] = $securityData;
                            $this->saveLoanSecurityDetails($reportId, $securityData);
                            $sc++;
                        }
                    }
                }
            }
	 
	   }
	   Log::info("step1");
        $accountSummary =[];
        if( $request['ACCOUNTS-SUMMARY']){
			Log::info("step2");
             $accountSummary = $request['ACCOUNTS-SUMMARY'];
             $newAccSummarry = [];
             if(array_key_exists("DERIVED-ATTRIBUTES", $accountSummary)){
                 $derivedAttributes = $accountSummary['DERIVED-ATTRIBUTES'];
             
                if(array_key_exists("INQURIES-IN-LAST-SIX-MONTHS",$derivedAttributes )){
                 $enquiryInLast6Months =  $derivedAttributes['INQURIES-IN-LAST-SIX-MONTHS'];
                  $newAccSummarry['derived_attributes']['inquries_in_last_six_months']= $enquiryInLast6Months;
                }else{
                    $newAccSummarry['derived_attributes']['inquries_in_last_six_months']="";
                }

                if(array_key_exists("LENGTH-OF-CREDIT-HISTORY-YEAR",   $derivedAttributes  )){
                 $lengthofcredithistoryyear =  $derivedAttributes['LENGTH-OF-CREDIT-HISTORY-YEAR'];
                 $newAccSummarry['derived_attributes']['length_of_credit_history_year']=$lengthofcredithistoryyear;
                }else{
                    $newAccSummarry['derived_attributes']['length_of_credit_history_year']="";
                }

                if(array_key_exists("LENGTH-OF-CREDIT-HISTORY-MONTH",   $derivedAttributes )){
                 $lengthofcredithistorymonth =  $derivedAttributes['LENGTH-OF-CREDIT-HISTORY-MONTH'];
                 $newAccSummarry['derived_attributes']['length_of_credit_history_month']= $lengthofcredithistorymonth;
                }else{
                    $newAccSummarry['derived_attributes']['length_of_credit_history_month']= "";
                }

                if(array_key_exists("AVERAGE-ACCOUNT-AGE-YEAR",$derivedAttributes )){
                 $averageaccountageyear =  $derivedAttributes['AVERAGE-ACCOUNT-AGE-YEAR'];
                  $newAccSummarry['derived_attributes']['average_account_age_year']= $averageaccountageyear;
                }else{
                    $newAccSummarry['derived_attributes']['average_account_age_year']= "";
                }

                if(array_key_exists("AVERAGE-ACCOUNT-AGE-MONTH",   $derivedAttributes  )){
                 $averageaccountagemonth=  $derivedAttributes['AVERAGE-ACCOUNT-AGE-MONTH'];
                 $newAccSummarry['derived_attributes']['average_account_age_month']= $averageaccountagemonth;
                }else{
                    $newAccSummarry['derived_attributes']['average_account_age_month']="";
                }
                
                if(array_key_exists("NEW-ACCOUNTS-IN-LAST-SIX-MONTHS",   $derivedAttributes  )){
                 $newaccountsinlastsixmonths =  $derivedAttributes['NEW-ACCOUNTS-IN-LAST-SIX-MONTHS'];
                 $newAccSummarry['derived_attributes']['new_account_sin_last_six_months']=$newaccountsinlastsixmonths;
                }else{
                    $newAccSummarry['derived_attributes']['new_account_sin_last_six_months']="";
                }

                if(array_key_exists("NEW-DELINQ-ACCOUNT-IN-LAST-SIX-MONTHS",   $derivedAttributes )){
                 $new_delinq_account_in_last_six_months =  $derivedAttributes['LENGTH-OF-CREDIT-HISTORY-MONTH'];
                 $newAccSummarry['derived_attributes']['new_delinq_account_in_last_six_months']= $new_delinq_account_in_last_six_months;
                }else{
                    $newAccSummarry['derived_attributes']['new_delinq_account_in_last_six_months']="";
                }
             }

             if(array_key_exists("PRIMARY-ACCOUNTS-SUMMARY", $accountSummary)){
                // Log::info("new account");
                 $primaryAccountSummary =  $accountSummary['PRIMARY-ACCOUNTS-SUMMARY'];
                 if(array_key_exists("PRIMARY-NUMBER-OF-ACCOUNTS",   $primaryAccountSummary  )){
                     $primary_number_of_accounts =  $primaryAccountSummary['PRIMARY-NUMBER-OF-ACCOUNTS'];
                     $newAccSummarry['primary_accounts_summary']['primary_number_of_accounts']= $primary_number_of_accounts;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_number_of_accounts']= "";
                    }

                    if(array_key_exists("PRIMARY-ACTIVE-NUMBER-OF-ACCOUNTS",  $primaryAccountSummary )){
                     $primary_active_number_of_accounts=  $primaryAccountSummary['PRIMARY-ACTIVE-NUMBER-OF-ACCOUNTS'];
                     $newAccSummarry['primary_accounts_summary']['primary_active_number_of_accounts']= $primary_active_number_of_accounts;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_active_number_of_accounts']="";
                    }

                    if(array_key_exists("PRIMARY-SECURED-NUMBER-OF-ACCOUNTS",   $primaryAccountSummary )){
                     $primary_secured_number_of_accounts=  $primaryAccountSummary['PRIMARY-SECURED-NUMBER-OF-ACCOUNTS'];
                     $newAccSummarry['primary_accounts_summary']['primary_secured_number_of_accounts']= $primary_secured_number_of_accounts;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_secured_number_of_accounts']="";
                    }

                    if(array_key_exists("PRIMARY-ACTIVE-NUMBER-OF-ACCOUNTS",  $primaryAccountSummary  )){
                     $primary_active_number_of_accounts=  $primaryAccountSummary['PRIMARY-ACTIVE-NUMBER-OF-ACCOUNTS'];
                     $newAccSummarry['primary_accounts_summary']['primary_active_number_of_accounts']= $primary_active_number_of_accounts;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_active_number_of_accounts']="";
                    }

                    if(array_key_exists("PRIMARY-UNSECURED-NUMBER-OF-ACCOUNTS",  $primaryAccountSummary  )){
                     $primary_unsecured_number_of_accounts=  $primaryAccountSummary['PRIMARY-UNSECURED-NUMBER-OF-ACCOUNTS'];
                     $newAccSummarry['primary_accounts_summary']['primary_unsecured_number_of_accounts']= $primary_unsecured_number_of_accounts;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_unsecured_number_of_accounts']="";
                    }

                    if(array_key_exists("PRIMARY-UNTAGGED-NUMBER-OF-ACCOUNTS",   $primaryAccountSummary  )){
                     $primary_untagged_number_of_accounts=  $primaryAccountSummary['PRIMARY-UNTAGGED-NUMBER-OF-ACCOUNTS'];
                     $newAccSummarry['primary_accounts_summary']['primary_untagged_number_of_accounts']= $primary_untagged_number_of_accounts;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_untagged_number_of_accounts']="";
                    }

                    if(array_key_exists("PRIMARY-CURRENT-BALANCE", $primaryAccountSummary  )){
                     $primary_current_balance=  $primaryAccountSummary['PRIMARY-CURRENT-BALANCE'];
                     $newAccSummarry['primary_accounts_summary']['primary_current_balance']=  $primary_current_balance;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_current_balance']=  "";
                    }

                    if(array_key_exists("PRIMARY-SANCTIONED-AMOUNT", $primaryAccountSummary )){
                     $primary_sanctioned_amount =  $primaryAccountSummary['PRIMARY-SANCTIONED-AMOUNT'];
                     $newAccSummarry['primary_accounts_summary']['primary_sanctioned_amount']= $primary_sanctioned_amount;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_sanctioned_amount']= "";
                    }

                    if(array_key_exists("PRIMARY-DISBURSED-AMOUNT",   $primaryAccountSummary  )){
                     $primary_disbursed_amount=  $primaryAccountSummary['PRIMARY-DISBURSED-AMOUNT'];
                     $newAccSummarry['primary_accounts_summary']['primary_disbursed_amount']= $primary_disbursed_amount;
                    }else{
                        $newAccSummarry['primary_accounts_summary']['primary_disbursed_amount']= "";
                    }
             }


             
             if(array_key_exists("SECONDARY-ACCOUNTS-SUMMARY", $accountSummary)){
                //Log::info("new account");
                $secondaryAccountSummary =  $accountSummary['SECONDARY-ACCOUNTS-SUMMARY'];

                if(array_key_exists("SECONDARY-NUMBER-OF-ACCOUNTS",   $secondaryAccountSummary  )){
                    $secondary_number_of_accounts =  $secondaryAccountSummary['SECONDARY-NUMBER-OF-ACCOUNTS'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_number_of_accounts']= $secondary_number_of_accounts;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_number_of_accounts']= "";
                   }

                   if(array_key_exists("SECONDARY-ACTIVE-NUMBER-OF-ACCOUNTS",   $secondaryAccountSummary )){
                    $secondary_active_number_of_accounts=  $secondaryAccountSummary['SECONDARY-ACTIVE-NUMBER-OF-ACCOUNTS'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_active_number_of_accounts']= $secondary_active_number_of_accounts;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_active_number_of_accounts']="";
                   }

                   if(array_key_exists("SECONDARY-SECURED-NUMBER-OF-ACCOUNTS",    $secondaryAccountSummary )){
                    $secondary_secured_number_of_accounts=  $secondaryAccountSummary['SECONDARY-SECURED-NUMBER-OF-ACCOUNTS'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_secured_number_of_accounts']= $secondary_secured_number_of_accounts;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_secured_number_of_accounts']="";
                   }

                   if(array_key_exists("SECONDARY-ACTIVE-NUMBER-OF-ACCOUNTS",   $secondaryAccountSummary  )){
                    $secondary_active_number_of_accounts=  $secondaryAccountSummary['SECONDARY-ACTIVE-NUMBER-OF-ACCOUNTS'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_active_number_of_accounts']= $secondary_active_number_of_accounts;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_active_number_of_accounts']= "";
                   }

                   if(array_key_exists("SECONDARY-UNSECURED-NUMBER-OF-ACCOUNTS",   $secondaryAccountSummary  )){
                    $secondary_unsecured_number_of_accounts=  $secondaryAccountSummary['SECONDARY-UNSECURED-NUMBER-OF-ACCOUNTS'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_unsecured_number_of_accounts']= $secondary_unsecured_number_of_accounts;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_unsecured_number_of_accounts']= "";
                   }

                   if(array_key_exists("SECONDARY-UNTAGGED-NUMBER-OF-ACCOUNTS",    $secondaryAccountSummary )){
                    $secondary_untagged_number_of_accounts=  $secondaryAccountSummary['SECONDARY-UNTAGGED-NUMBER-OF-ACCOUNTS'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_untagged_number_of_accounts']= $secondary_untagged_number_of_accounts;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_untagged_number_of_accounts']= "";
                   }

                   if(array_key_exists("SECONDARY-CURRENT-BALANCE",  $secondaryAccountSummary  )){
                    $secondary_current_balance=  $secondaryAccountSummary['SECONDARY-CURRENT-BALANCE'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_current_balance']=  $secondary_current_balance;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_current_balance']= "";
                   }

                   if(array_key_exists("SECONDARY-SANCTIONED-AMOUNT",  $secondaryAccountSummary )){
                    $secondary_sanctioned_amount =  $secondaryAccountSummary['SECONDARY-SANCTIONED-AMOUNT'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_sanctioned_amount']= $secondary_sanctioned_amount;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_sanctioned_amount']="";
                   }

                   if(array_key_exists("SECONDARY-DISBURSED-AMOUNT",$secondaryAccountSummary  )){
                    $secondary_disbursed_amount=  $secondaryAccountSummary['SECONDARY-DISBURSED-AMOUNT'];
                    $newAccSummarry['secondary_accounts_summary']['secondary_disbursed_amount']= $secondary_disbursed_amount;
                   }else{
                    $newAccSummarry['secondary_accounts_summary']['secondary_disbursed_amount']= ""; 
                   }
            }



         }      

       
            


        $data['ACCOUNTLIST'] = $accountList;
        $data['LINKEDACCOUNTLIST'] = $linkedAccountList;
        $data['SECURITYDETAILSLIST'] = $securityDetailsList;   
        $data['ACCOUNTSUMMARY'] =  $newAccSummarry;  
      }else{
          if(count($request['RESPONSES']['RESPONSE']) > 0){
        //for ($i = 0; $i < count($request['RESPONSES']['RESPONSE']); $i++) {
            $loanData = $request['RESPONSES']['RESPONSE']['LOAN-DETAILS'];
            if (array_key_exists("CREDIT-GUARANTOR", $loanData)) {
                $account['CREDITGUARANTOR'] = $loanData['CREDIT-GUARANTOR'];
            } else {
                $account['CREDITGUARANTOR'] = "";
            }

            if (array_key_exists("ACCT-NUMBER", $loanData)) {
                $account['ACCTNUMBER'] = $loanData['ACCT-NUMBER'];
            } else {
                $account['ACCTNUMBER'] = "";
            }

            if (array_key_exists("ACCT-TYPE", $loanData)) {
                $account['ACCTTYPE'] = $loanData['ACCT-TYPE'];
            } else {
                $account['ACCTTYPE'] = "";
            }

            if (array_key_exists("ACCOUNT-STATUS", $loanData)) {
                $account['ACCOUNTSTATUS'] = $loanData['ACCOUNT-STATUS'];
            } else {
                $account['ACCOUNTSTATUS'] = "";
            }


            if (array_key_exists("OWNERSHIP-IND", $loanData)) {
                $account['OWNERSHIPIND'] = $loanData['OWNERSHIP-IND'];
            } else {
                $account['OWNERSHIPIND'] = "";
            }

            if (array_key_exists("DISBURSED-DT", $loanData)) {
                $account['DISBURSEDDT'] = $loanData['DISBURSED-DT'];
            } else {
                $account['DISBURSEDDT'] = "";
            }

            if (array_key_exists("DISBURSED-AMT", $loanData)) {
                $account['DISBURSEDAMT'] = $loanData['DISBURSED-AMT'];
            } else {
                $account['DISBURSEDAMT'] = "";
            }

            if (array_key_exists("CREDIT-LIMIT", $loanData)) {
                $account['CREDITLIMIT'] = $loanData['CREDIT-LIMIT'];
            } else {
                $account['CREDITLIMIT'] = "";
            }
            if (array_key_exists("LAST-PAYMENT-DATE", $loanData)) {
                $account['LASTPAYMENTDATE'] = $loanData['LAST-PAYMENT-DATE'];
            } else {
                $account['LASTPAYMENTDATE'] = "";
            }
            if (array_key_exists("CURRENT-BAL", $loanData)) {
                $account['CURRENTBAL'] = $loanData['CURRENT-BAL'];
            } else {
                $account['CURRENTBAL'] = "";
            }
            if (array_key_exists("CASH-LIMIT", $loanData)) {
                $account['CASHLIMIT'] = $loanData['CASH-LIMIT'];
            } else {
                $account['CASHLIMIT'] = "";
            }
            if (array_key_exists("CLOSED-DATE", $loanData)) {
                $account['CLOSEDDATE'] = $loanData['CLOSED-DATE'];
            } else {
                $account['CLOSEDDATE'] = "";
            }
            if (array_key_exists("LAST-PAYMENT-DATE", $loanData)) {
                $account['LASTPAYMENTDATE'] = $loanData['LAST-PAYMENT-DATE'];
            } else {
                $account['LASTPAYMENTDATE'] = "";
            }

            if (array_key_exists("INSTALLMENT-AMT", $loanData)) {
                $account['INSTALLMENTAMT'] = $loanData['INSTALLMENT-AMT'];
            } else {
                $account['INSTALLMENTAMT'] = "";
            }

            if (array_key_exists("INTEREST-RATE", $loanData)) {
                $account['INTERESTRATE'] = $loanData['INTEREST-RATE'];
            } else {
                $account['INTERESTRATE'] = "";
            }

            $account['TENURE'] = 1;

            if (array_key_exists("OVERDUE-AMT", $loanData)) {
                $account['OVERDUEAMT'] = $loanData['OVERDUE-AMT'];
            } else {
                $account['OVERDUEAMT'] = "";
            }
            if (array_key_exists("WRITE-OFF-AMT", $loanData)) {
                $account['WRITEOFFAMT'] = $loanData['WRITE-OFF-AMT'];
            } else {
                $account['WRITEOFFAMT'] = "";
            }

            $account['TOTALWRITEOFFAMT'] = "";
            $account['SETTLEMENTAMOUNT'] = "";
            $account['ACCOUNTSTATUSLAST'] = "";

            if (array_key_exists("COMBINED-PAYMENT-HISTORY", $loanData)) {
                $COMBINEDPAYMENTHISTORY = $loanData['COMBINED-PAYMENT-HISTORY'];
            } else {
                $COMBINEDPAYMENTHISTORY = "";
            }
			if($loanData['COMBINED-PAYMENT-HISTORY']){
            $account['COMBINEDPAYMENTHISTORY'] = $COMBINEDPAYMENTHISTORY;

            $startYear = substr($COMBINEDPAYMENTHISTORY, 4, 4);
            $endYear = substr($COMBINEDPAYMENTHISTORY, strlen($COMBINEDPAYMENTHISTORY) - 13, 4);

            $paymentHistory = [];
            $yearArray = [];
            $ya = 0;
            for ($y = $startYear; $y >= $endYear; $y--) {
                $yearArray[$ya] = (int) $y;
                $ya++;
                $monthData = [];
                for ($m = 0; $m < count($monthArray); $m++) {
                    $monthYear = $monthArray[$m] . ':' . $y . ',';
                    if (strpos($COMBINEDPAYMENTHISTORY, $monthYear) != '')
                        $monthData[$monthArray[$m]] = substr($COMBINEDPAYMENTHISTORY, strpos($COMBINEDPAYMENTHISTORY, $monthYear) + 9, 7);
                    else
                        $monthData[$monthArray[$m]] = "";
                }
                $paymentHistory[$y] = $monthData;
            }
		}else{
			$COMBINEDPAYMENTHISTORY = ""; 
		}
            $account['YEARLIST'] = $yearArray;
            $account['PAYMENTHISTORY'] = $paymentHistory;
            $accountList = $account;
            $this->saveLoanAccountListData($reportId, $account);


            if (array_key_exists("LINKED-ACCOUNTS", $loanData)) {
                if (array_key_exists("ACCOUNT-DETAILS", $loanData['LINKED-ACCOUNTS'])) {
                    $linkedAccData = $loanData['LINKED-ACCOUNTS']['ACCOUNT-DETAILS'];
                    if (array_key_exists("ACCT-NUMBER", $linkedAccData)) {
                        $linkedAccount['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                        if (array_key_exists("ACCT-NUMBER", $linkedAccData)) {
                            $linkedAccount['LINKEDACCOUNTNUMBER'] = $linkedAccData['ACCT-NUMBER'];
                        } else {
                            $linkedAccount['LINKEDACCOUNTNUMBER'] = "";
                        }

                        if (array_key_exists("CREDIT-GUARANTOR", $linkedAccData)) {
                            $linkedAccount['CREDITGUARANTOR'] = $linkedAccData['CREDIT-GUARANTOR'];
                        } else {
                            $linkedAccount['CREDITGUARANTOR'] = "";
                        }

                        if (array_key_exists("ACCT-TYPE", $linkedAccData)) {
                            $linkedAccount['ACCOUNTTYPE'] = $linkedAccData['ACCT-TYPE'];
                        } else {
                            $linkedAccount['ACCOUNTTYPE'] = "";
                        }
                        $linkedAccount['CREDITLIMIT'] = "";
                        $linkedAccount['HIGHCREDIT'] = "";
                        $linkedAccount['AMOUNTOVERDUE'] = "";
                        if (array_key_exists("DISBURSED-DT", $linkedAccData)) {
                            $linkedAccount['DISBURSEDDATE'] = $linkedAccData['DISBURSED-DT'];
                        } else {
                            $linkedAccount['DISBURSEDDATE'] = "";
                        }
                        $linkedAccount['CLOSEDDATE'] = "";
                        if (array_key_exists("LAST-PAYMENT-DATE", $linkedAccData)) {
                            $linkedAccount['LASTPAYMENTDATE'] = $linkedAccData['LAST-PAYMENT-DATE'];
                        } else {
                            $linkedAccount['LASTPAYMENTDATE'] = "";
                        }
                        $linkedAccountList[$la] = $linkedAccount;
                        $this->saveLoanLinkedAccountListData($reportId, $linkedAccount);
                        $la++;
                    } else {
                        for ($j = 0; $j < count($linkedAccData); $j++) {
                            $linkedAccount['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                            if (array_key_exists("ACCT-NUMBER", $linkedAccData[$j])) {
                                $linkedAccount['LINKEDACCOUNTNUMBER'] = $linkedAccData[$j]['ACCT-NUMBER'];
                            } else {
                                $linkedAccount['LINKEDACCOUNTNUMBER'] = "";
                            }

                            if (array_key_exists("CREDIT-GUARANTOR", $linkedAccData[$j])) {
                                $linkedAccount['CREDITGUARANTOR'] = $linkedAccData[$j]['CREDIT-GUARANTOR'];
                            } else {
                                $linkedAccount['CREDITGUARANTOR'] = "";
                            }

                            if (array_key_exists("ACCT-TYPE", $linkedAccData[$j])) {
                                $linkedAccount['ACCOUNTTYPE'] = $linkedAccData[$j]['ACCT-TYPE'];
                            } else {
                                $linkedAccount['ACCOUNTTYPE'] = "";
                            }
                            $linkedAccount['CREDITLIMIT'] = "";
                            $linkedAccount['HIGHCREDIT'] = "";
                            $linkedAccount['AMOUNTOVERDUE'] = "";
                            if (array_key_exists("DISBURSED-DT", $linkedAccData[$j])) {
                                $linkedAccount['DISBURSEDDATE'] = $linkedAccData[$j]['DISBURSED-DT'];
                            } else {
                                $linkedAccount['DISBURSEDDATE'] = "";
                            }
                            $linkedAccount['CLOSEDDATE'] = "";
                            if (array_key_exists("LAST-PAYMENT-DATE", $linkedAccData[$j])) {
                                $linkedAccount['LASTPAYMENTDATE'] = $linkedAccData[$j]['LAST-PAYMENT-DATE'];
                            } else {
                                $linkedAccount['LASTPAYMENTDATE'] = "";
                            }
                            $linkedAccountList[$la] = $linkedAccount;
                            $this->saveLoanLinkedAccountListData($reportId, $linkedAccount);
                            $la++;
                        }
                    }
                }
            }
			//Log::info("step5");
            if (array_key_exists("SECURITY-DETAILS", $loanData)) {
                if (array_key_exists("SECURITY-DETAIL", $loanData['SECURITY-DETAILS'])) {
                    $securityDeatils = $loanData['SECURITY-DETAILS']['SECURITY-DETAIL'];
                    if (array_key_exists("SECURITY-VALUE", $securityDeatils)) {
                        $securityData['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                        if (array_key_exists("SECURITY-TYPE", $securityDeatils)) {
                            $securityData['SECURITYTYPE'] =  gettype($securityDeatils['SECURITY-TYPE']) == 'array' ? "" : $securityDeatils['SECURITY-TYPE'];
                        } else {
                            $securityData['SECURITYTYPE'] = "";
                        }
                        if (array_key_exists("OWNER-NAME", $securityDeatils)) {
                            $securityData['OWNERNAME'] = gettype($securityDeatils['OWNER-NAME']) == 'array' ? "" : $securityDeatils['OWNER-NAME'];
                        } else {
                            $securityData['OWNERNAME'] = "";
                        }
                        $securityData['TYPEOFCHARGE'] = "";

                        if (array_key_exists("SECURITY-VALUE", $securityDeatils)) {
                            $securityData['SECURITYVALUE'] = gettype($securityDeatils['SECURITY-VALUE']) == 'array' ? "" : $securityDeatils['SECURITY-VALUE'];
                        } else {
                            $securityData['SECURITYVALUE'] = "";
                        }
                        if (array_key_exists("DATE-OF-VALUE", $securityDeatils)) {
                            $securityData['DATEOFVALUE'] = gettype($securityDeatils['DATE-OF-VALUE']) == 'array' ? "" : $securityDeatils['DATE-OF-VALUE'];
                        } else {
                            $securityData['DATEOFVALUE'] = "";
                        }
                        if (array_key_exists("PROPERTY-ADDRESS", $securityDeatils)) {
                            $securityData['PROPERTYADDRESS'] = gettype($securityDeatils['PROPERTY-ADDRESS']) == 'array' ? "" : $securityDeatils['PROPERTY-ADDRESS'];
                        } else {
                            $securityData['PROPERTYADDRESS'] = "";
                        }

                        if (array_key_exists("AUTOMOBILE-TYPE", $securityDeatils)) {
                            $securityData['AUTOMOBILETYPE'] = gettype($securityDeatils['AUTOMOBILE-TYPE']) == 'array' ? "" : $securityDeatils['AUTOMOBILE-TYPE'];
                        } else {
                            $securityData['AUTOMOBILETYPE'] = "";
                        }

                        if (array_key_exists("YEAR-OF-MANUFACTURE", $securityDeatils)) {
                            $securityData['YEAROFMANUFACTURE'] = gettype($securityDeatils['YEAR-OF-MANUFACTURE']) == 'array' ? "" : $securityDeatils['YEAR-OF-MANUFACTURE'];
                        } else {
                            $securityData['YEAROFMANUFACTURE'] = "";
                        }
                        if (array_key_exists("REGISTRATION-NUMBER", $securityDeatils)) {
                            $securityData['REGISTRATIONNUMBER'] = gettype($securityDeatils['REGISTRATION-NUMBER']) == 'array' ? "" : $securityDeatils['REGISTRATION-NUMBER'];
                        } else {
                            $securityData['REGISTRATIONNUMBER'] = "";
                        }
                        if (array_key_exists("ENGINE-NUMBER", $securityDeatils)) {
                            $securityData['ENGINENUMBER'] = gettype($securityDeatils['ENGINE-NUMBER']) == 'array' ? "" : $securityDeatils['ENGINE-NUMBER'];
                        } else {
                            $securityData['ENGINENUMBER'] = "";
                        }
                        if (array_key_exists("CHASSIS-NUMBER", $securityDeatils)) {
                            $securityData['CHASSISNUMBER'] = gettype($securityDeatils['CHASSIS-NUMBER']) == 'array' ? "" : $securityDeatils['CHASSIS-NUMBER'];
                        } else {
                            $securityData['CHASSISNUMBER'] = "";
                        }
                        $securityDetailsList[$sc] = $securityData;
                        $this->saveLoanSecurityDetails($reportId, $securityData);
                        $sc++;
                    } else {
                        for ($j = 0; $j < count($securityDeatils); $j++) {

                            $securityData['ACCOUNTNUMBER'] = $account['ACCTNUMBER'];
                            if (array_key_exists("SECURITY-TYPE", $securityDeatils[$j])) {
                                $securityData['SECURITYTYPE'] = gettype($securityDeatils[$j]['SECURITY-TYPE']) == 'array' ? "" : $securityDeatils[$j]['SECURITY-TYPE'];
                            } else {
                                $securityData['SECURITYTYPE'] = "";
                            }
                            if (array_key_exists("OWNER-NAME", $securityDeatils[$j])) {
                                $securityData['OWNERNAME'] = gettype($securityDeatils[$j]['OWNER-NAME']) == 'array' ? "" : $securityDeatils[$j]['OWNER-NAME'];
                            } else {
                                $securityData['OWNERNAME'] = "";
                            }
                            $securityData['TYPEOFCHARGE'] = "";

                            if (array_key_exists("SECURITY-VALUE", $securityDeatils[$j])) {
                                $securityData['SECURITYVALUE'] = gettype($securityDeatils[$j]['SECURITY-VALUE']) == 'array' ? "" : $securityDeatils[$j]['SECURITY-VALUE'];
                            } else {
                                $securityData['SECURITYVALUE'] = "";
                            }
                            if (array_key_exists("DATE-OF-VALUE", $securityDeatils[$j])) {
                                $securityData['DATEOFVALUE'] = gettype($securityDeatils[$j]['DATE-OF-VALUE']) == 'array' ? "" : $securityDeatils[$j]['DATE-OF-VALUE'];
                            } else {
                                $securityData['DATEOFVALUE'] = "";
                            }
                            if (array_key_exists("PROPERTY-ADDRESS", $securityDeatils[$j])) {
                                $securityData['PROPERTYADDRESS'] = gettype($securityDeatils[$j]['PROPERTY-ADDRESS']) == 'array' ? "" : $securityDeatils[$j]['PROPERTY-ADDRESS'];
                            } else {
                                $securityData['PROPERTYADDRESS'] = "";
                            }

                            if (array_key_exists("AUTOMOBILE-TYPE", $securityDeatils[$j])) {
                                $securityData['AUTOMOBILETYPE'] = gettype($securityDeatils[$j]['AUTOMOBILE-TYPE']) == 'array' ? "" : $securityDeatils[$j]['AUTOMOBILE-TYPE'];
                            } else {
                                $securityData['AUTOMOBILETYPE'] = "";
                            }

                            if (array_key_exists("YEAR-OF-MANUFACTURE", $securityDeatils[$j])) {
                                $securityData['YEAROFMANUFACTURE'] = gettype($securityDeatils[$j]['YEAR-OF-MANUFACTURE']) == 'array' ? "" : $securityDeatils[$j]['YEAR-OF-MANUFACTURE'];
                            } else {
                                $securityData['YEAROFMANUFACTURE'] = "";
                            }
                            if (array_key_exists("REGISTRATION-NUMBER", $securityDeatils[$j])) {
                                $securityData['REGISTRATIONNUMBER'] = gettype($securityDeatils[$j]['REGISTRATION-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['REGISTRATION-NUMBER'];
                            } else {
                                $securityData['REGISTRATIONNUMBER'] = "";
                            }
                            if (array_key_exists("ENGINE-NUMBER", $securityDeatils[$j])) {
                                $securityData['ENGINENUMBER'] = gettype($securityDeatils[$j]['ENGINE-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['ENGINE-NUMBER'];
                            } else {
                                $securityData['ENGINENUMBER'] = "";
                            }
                            if (array_key_exists("CHASSIS-NUMBER", $securityDeatils[$j])) {
                                $securityData['CHASSISNUMBER'] = gettype($securityDeatils[$j]['CHASSIS-NUMBER']) == 'array' ? "" : $securityDeatils[$j]['CHASSIS-NUMBER'];
                            } else {
                                $securityData['CHASSISNUMBER'] = "";
                            }
                            $securityDetailsList[$sc] = $securityData;
                            $this->saveLoanSecurityDetails($reportId, $securityData);
                            $sc++;
                        }
                    }
                }
            }
        }

        $data['ACCOUNTLIST'] = $accountList;
        $data['LINKEDACCOUNTLIST'] = $linkedAccountList;
        $data['SECURITYDETAILSLIST'] = $securityDetailsList;
      } 
      } 

        return response()->json([
            "status" => true,
            "message" => 'Data parse successfully',
            "data" => $data
        ], 201);
    }

    public function saveLoanBasicData($reportId, $basicData)
    {
        $loanStandaloneBasicData = new LoanStandaloneBasicData();
        $loanStandaloneBasicData->name = $basicData['name'];
        $loanStandaloneBasicData->dob = $basicData['dob'];
        $loanStandaloneBasicData->email = $basicData['email'];
        $loanStandaloneBasicData->address = $basicData['address'];
        $loanStandaloneBasicData->father_name = $basicData['father'];
        $loanStandaloneBasicData->spouse_name = $basicData['spouse'];
        $loanStandaloneBasicData->kyc_id = $basicData['kyc_id'];
        $loanStandaloneBasicData->gender = $basicData['gender'];
        $loanStandaloneBasicData->phone_number = $basicData['phoneNumber'];
        $loanStandaloneBasicData->other_address = $basicData['otherAddress'];
        $loanStandaloneBasicData->mother_name = $basicData['mother'];
        $loanStandaloneBasicData->crif_score_name = $basicData['scoreName'];
        $loanStandaloneBasicData->crif_score = $basicData['scoreValue'];
        $loanStandaloneBasicData->crif_score_comment = $basicData['scoreComments'];
        $loanStandaloneBasicData->report_id = $reportId;
        $loanStandaloneBasicData->enable = 1;
        $loanStandaloneBasicData->is_active = 1;
        $loanStandaloneBasicData->created_by = 1;
        $loanStandaloneBasicData->created_on = now();
        $loanStandaloneBasicData->modified_by = 1;
        $loanStandaloneBasicData->modified_on = now();

        //Log::info($loanStandaloneBasicData);
        $loanStandaloneBasicData->save();
    }

    public function saveLoanAccountListData($reportId, $accountListData)
    {
        $loanStandaloneAccountList = new LoanStandaloneAccountList();
        $loanStandaloneAccountList->credit_gurantor = $accountListData['CREDITGUARANTOR'];
        $loanStandaloneAccountList->account_number = $accountListData['ACCTNUMBER'];
        $loanStandaloneAccountList->account_type = $accountListData['ACCTTYPE'];
        $loanStandaloneAccountList->account_status = $accountListData['ACCOUNTSTATUS'];
        $loanStandaloneAccountList->ownership_ind = $accountListData['OWNERSHIPIND'];
        $loanStandaloneAccountList->disbursed_dt = $accountListData['DISBURSEDDT'];
        $loanStandaloneAccountList->disbursed_amt = $accountListData['DISBURSEDAMT'];
        $loanStandaloneAccountList->credit_limit = $accountListData['CREDITLIMIT'];
        $loanStandaloneAccountList->last_payment_date = $accountListData['LASTPAYMENTDATE'];
        $loanStandaloneAccountList->current_bal = $accountListData['CURRENTBAL'];
        $loanStandaloneAccountList->cash_limit = $accountListData['CASHLIMIT'];
        $loanStandaloneAccountList->closed_date = $accountListData['CLOSEDDATE'];
        $loanStandaloneAccountList->installment_amt = $accountListData['INSTALLMENTAMT'];
        $loanStandaloneAccountList->interest_rate = $accountListData['INTERESTRATE'];
        $loanStandaloneAccountList->tenure = $accountListData['TENURE'];
        $loanStandaloneAccountList->overdue_amt = $accountListData['OVERDUEAMT'];
        $loanStandaloneAccountList->write_off_amount = $accountListData['WRITEOFFAMT'];
        $loanStandaloneAccountList->total_write_of_amount = $accountListData['TOTALWRITEOFFAMT'];
        $loanStandaloneAccountList->settlement_amount = $accountListData['SETTLEMENTAMOUNT'];
        $loanStandaloneAccountList->account_status_last = $accountListData['ACCOUNTSTATUSLAST'];
        $loanStandaloneAccountList->combined_payment_history = $accountListData['COMBINEDPAYMENTHISTORY'];
        $loanStandaloneAccountList->report_id = $reportId;
        $loanStandaloneAccountList->enable = 1;
        $loanStandaloneAccountList->is_active = 1;
        $loanStandaloneAccountList->created_by = 1;
        $loanStandaloneAccountList->created_on = now();
        $loanStandaloneAccountList->modified_by = 1;
        $loanStandaloneAccountList->modified_on = now();
        //Log::info($loanStandaloneAccountList);
        $loanStandaloneAccountList->save();
    }

    public function saveLoanLinkedAccountListData($reportId, $linkedAccountListData)
    {
        $loanStandaloneLinkedAccountList = new LoanStandaloneLinkedAccountList();
        $loanStandaloneLinkedAccountList->account_number = $linkedAccountListData['ACCOUNTNUMBER'];
        $loanStandaloneLinkedAccountList->linked_account_number = $linkedAccountListData['LINKEDACCOUNTNUMBER'];
        $loanStandaloneLinkedAccountList->credit_guarantor = $linkedAccountListData['CREDITGUARANTOR'];
        $loanStandaloneLinkedAccountList->account_type = $linkedAccountListData['ACCOUNTTYPE'];
        $loanStandaloneLinkedAccountList->credit_limit = $linkedAccountListData['CREDITLIMIT'];
        $loanStandaloneLinkedAccountList->high_credit = $linkedAccountListData['HIGHCREDIT'];
        $loanStandaloneLinkedAccountList->amount_over_due = $linkedAccountListData['AMOUNTOVERDUE'];
        $loanStandaloneLinkedAccountList->disbursed_date = $linkedAccountListData['DISBURSEDDATE'];
        $loanStandaloneLinkedAccountList->closed_date = $linkedAccountListData['CLOSEDDATE'];
        $loanStandaloneLinkedAccountList->last_payment_date = $linkedAccountListData['LASTPAYMENTDATE'];

        $loanStandaloneLinkedAccountList->report_id = $reportId;
        $loanStandaloneLinkedAccountList->enable = 1;
        $loanStandaloneLinkedAccountList->is_active = 1;
        $loanStandaloneLinkedAccountList->created_by = 1;
        $loanStandaloneLinkedAccountList->created_on = now();
        $loanStandaloneLinkedAccountList->modified_by = 1;
        $loanStandaloneLinkedAccountList->modified_on = now();
        //Log::info($loanStandaloneLinkedAccountList);
        $loanStandaloneLinkedAccountList->save();
    }
    public function saveLoanSecurityDetails($reportId, $securityDetailsData)
    {
        $loanStandaloneSecurityDetails = new LoanStandaloneSecurityDetails();
        $loanStandaloneSecurityDetails->account_number = $securityDetailsData['ACCOUNTNUMBER'];
        $loanStandaloneSecurityDetails->security_type = $securityDetailsData['SECURITYTYPE'];
        $loanStandaloneSecurityDetails->owner_name = $securityDetailsData['OWNERNAME'];
        $loanStandaloneSecurityDetails->type_of_charge = $securityDetailsData['TYPEOFCHARGE'];
        $loanStandaloneSecurityDetails->security_value = $securityDetailsData['SECURITYVALUE'];
        $loanStandaloneSecurityDetails->date_of_value = $securityDetailsData['DATEOFVALUE'];
        $loanStandaloneSecurityDetails->property_address = $securityDetailsData['PROPERTYADDRESS'];
        $loanStandaloneSecurityDetails->auto_mobile_type = $securityDetailsData['AUTOMOBILETYPE'];
        $loanStandaloneSecurityDetails->year_of_manufacture = $securityDetailsData['YEAROFMANUFACTURE'];
        $loanStandaloneSecurityDetails->registration_number = $securityDetailsData['REGISTRATIONNUMBER'];
        $loanStandaloneSecurityDetails->engine_number = $securityDetailsData['ENGINENUMBER'];
        $loanStandaloneSecurityDetails->chassis_number = $securityDetailsData['CHASSISNUMBER'];

        $loanStandaloneSecurityDetails->report_id = $reportId;
        $loanStandaloneSecurityDetails->enable = 1;
        $loanStandaloneSecurityDetails->is_active = 1;
        $loanStandaloneSecurityDetails->created_by = 1;
        $loanStandaloneSecurityDetails->created_on = now();
        $loanStandaloneSecurityDetails->modified_by = 1;
        $loanStandaloneSecurityDetails->modified_on = now();
        //Log::info($loanStandaloneSecurityDetails);
        $loanStandaloneSecurityDetails->save();
    }

    public function getAllPinCodes(){
        $query = DB::select('select id,pincode,area from pin_codes limit 100');
        Log:info($query);
        return response()->json([
        "status"=>true,
        "message"=>"successfully fetched",
        "data"=>$query
        ]);
        }

    public function saveHLandLAPHeader(Request $request){
        $hllapheaders = HL_LAP_header::firstOrNew(['id' => $request->hl_lap_id]);
        $hllapheaders->parent_type_id       = $request->parent_type_id;
        $hllapheaders->parent_id       = $request->parent_id;
        $hllapheaders->pin_id    = $request->pin_id;
        $hllapheaders->conversion_status_id    = $request->conversion_status_id;
        $hllapheaders->type_of_ownership_id    = $request->type_of_ownership_id;
        $hllapheaders->deviation_from_sanction_plan_id    = $request->deviation_from_sanction_plan_id;
        $hllapheaders->asset_type_id    = $request->asset_type_id;
        $hllapheaders->property_market_value    = $request->property_market_value;
        $hllapheaders->address    = $request->address;
        $hllapheaders->area    = $request->area;
        $hllapheaders->type_of_construction_id    = $request->type_of_construction_id;
        $hllapheaders->no_of_units_id    = $request->no_of_units_id;
        $hllapheaders->property_category_id    = $request->property_category_id;
        if (HL_LAP_header::where(['id' => $request->hl_lap_id])->count() > 0) {
            $hllapheaders->modified_on = now();
            if ($request->has('created_by')){
                $hllapheaders->modified_by = $request->created_by;
            }else{
                $hllapheaders->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')){
                $hllapheaders->created_by = $request->created_by;
            }else{
                $hllapheaders->created_by = $request->user_id;
            }
            $hllapheaders->created_on = now();
            $hllapheaders->modified_on = now();
            $hllapheaders->modified_by =  $request->created_by;
            $file_no = (string) Str::uuid();
            $hllapheaders->file_no = $file_no;
			Log::info("entered");
			Log::info($file_no);


            //$this->saveFileFolderMappingDetails('HL_LAP', $file_no, $request->user_id);
        }

        $data['HL_LAP_Header'] = $hllapheaders->getAttributes();
        $hllapheaders->save();
        $insert_id = $hllapheaders->id;
        if (!$insert_id) {
            Log::error('Failed to save HL_LAP in pgsql. for ' . $request->file_no);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['primary_id'] = $insert_id;
        if ($request->hl_lap_id) {
            return response()->json([
                "status" => true,
                "message" => 'HL_LAP Updated Successfuly',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'HL_LAP Inserted Successfuly',
                "Data" => $data
            ], 201);
        }
    }

    public function saveHLandLAPDetails(Request $request){
        foreach ($request->HL_LAP_Details as $i => $i_value){
            $hllapdetails = HL_LAP_details::firstOrNew(['id' => $request->hl_lap_details_id]);
            $hllapdetails->hl_lap_header_id      = $request->hl_lap_header_id;
            $hllapdetails->property_status_id = $i_value['property_status_id'];
            $hllapdetails->property_usage_id = $i_value['property_usage_id'];
            $hllapdetails->age_of_construction_id = $i_value['age_of_construction_id'];
            $hllapdetails->no_of_units_id = $i_value['no_of_units'];
            $hllapdetails->property_type_id = $i_value['property_type_id'];
            $hllapdetails->property_area_id = $i_value['property_area_id'];
           
            if (HL_LAP_details::where(['id' => $request->hl_lap_details_id])->count() > 0) {
                $hllapdetails->modified_on = now();
                $hllapdetails->modified_by = 1;
            } else {
                $hllapdetails->created_by = 1;
                $hllapdetails->created_on = now();
            }
            $data = $hllapdetails->getAttributes(); 
            $hllapdetails->save();
	         Log::info($i_value);
		     Log::info("here we are");
            if($i_value['property_status_id'] == 159){
                Log::info("Entered the  rental");
                 $result = $this->saveRentals($i_value['rentalDetailsObject'],$hllapdetails->id,$request->folder_no);
            }

        $insert_id = $hllapdetails->id;
        if (!$insert_id) {
            Log::error('Failed to save HL_LAP in pgsql. for ' . $request->file_no);
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data = array_merge($data, array("primary_id" => $insert_id));
        $res_data[] = $data;
      
    }
        if ($request->hl_lap_details_id) {
            return response()->json([
                "status" => true,
                "message" => 'HL_LAP Updated Successfuly',
                "Data" => $res_data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'HL_LAP Inserted Successfuly',
                "Data" => $res_data
            ], 201);
        }  
     }
	 
    public function saveHLandLAPDetailsingle(Request $request){
            $hllapdetails = HL_LAP_details::firstOrNew(['id' => $request->hl_lap_details_id]);
            $hllapdetails->hl_lap_header_id      = $request->hl_lap_header_id;
            $hllapdetails->property_status_id = $request->property_status_id;
            $hllapdetails->property_usage_id = $request->property_usage_id;
            $hllapdetails->age_of_construction_id = $request->age_of_construction_id;
            $hllapdetails->no_of_units_id = $request->no_of_units_id;
            $hllapdetails->property_type_id = $request->property_type_id;
            $hllapdetails->property_area_id = $request->property_area_id;
            if (HL_LAP_details::where(['id' => $request->hl_lap_details_id])->count() > 0) {
                $hllapdetails->modified_on = now();
                if ($request->has('created_by')){
                    $hllapdetails->modified_by = $request->created_by;
                }else{
                    $hllapdetails->modified_by = $request->user_id;
                }
            } else {
                if ($request->has('created_by')){
                    $hllapdetails->created_by = $request->created_by;
                }else{
                    $hllapdetails->created_by = $request->user_id;
                }
                $hllapdetails->created_on = now();
                $hllapdetails->modified_on = now();
                $hllapdetails->modified_by =  $request->created_by;
                //$this->saveFileFolderMappingDetails('HL_LAP', $file_no, $request->user_id);
            }
            $data = $hllapdetails->getAttributes(); 
            $hllapdetails->save();
        $insert_id = $hllapdetails->id;
        if (!$insert_id) {
            Log::error('Failed to save HL_LAP in pgsql. for ' . $request->file_no);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        //$data['primary_id'] = $insert_id;
        $data['hllapdetails'] = $hllapdetails;
        
        if ($request->hl_lap_details_id) {
            return response()->json([
                "status" => true,
                "message" => 'HL_LAP Updated Successfuly',
                "Data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'HL_LAP Inserted Successfuly',
                "Data" => $data
            ], 201);
        }
        
    }

    public function getHL_LAP_details(Request $request){
       $query = 'select hl_lap_details.*,hl_lap_header.id as hl_lap_header_id,master_table.name as property_status,
        cat_master.name as property_usage,age_master.name as age_of_construction,no_master.name as no_of_units,
        type_master.name as property_type,area_master.name as property_area,conversion_master.name as conversion_status,
        owner_master.name as type_of_ownership, dev_master.name as deviation_from_sanction_plan,
        asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,hl_lap_header.area,
        const_master.name as type_of_construction ,prop_master.name as property_category,hl_lap_header.conversion_status_id,
		hl_lap_header.type_of_ownership_id,hl_lap_header.deviation_from_sanction_plan_id,hl_lap_header.asset_type_id,
		hl_lap_header.type_of_construction_id,hl_lap_header.property_category_id,hl_lap_header.pin_id,pin_codes.area as area,
		pin_codes.pincode as pincode
        from hl_lap_details
        left join hl_lap_header on hl_lap_header.id = hl_lap_details.hl_lap_header_id
        left join master_table on master_table.id = hl_lap_details.property_status_id
        left join master_table as cat_master on cat_master.id = hl_lap_details.property_usage_id
        left join master_table as age_master on age_master.id = hl_lap_details.age_of_construction_id
        left join master_table as no_master on no_master.id = hl_lap_details.no_of_units_id
        left join master_table as type_master on type_master.id = hl_lap_details.property_type_id
        left join master_table as area_master on area_master.id = hl_lap_details.property_area_id
        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
        left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
		left join pin_codes on pin_codes.id = hl_lap_header.pin_id
        where hl_lap_header.is_active = true and hl_lap_details.is_active = 1 and hl_lap_header.id  = ' . $request->hl_lap_header_id . 'order by hl_lap_details.id';




			 $data = DB::select($query);

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        

    }

    public function getUnitDetailsbyId(Request $request){
        $query = 'select * from master_table where master_table_id = 74 and id  = ' . $request->id . 'order by master_table.id';
        $data = DB::select($query);

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        
    }

            public function questionairyFinGetByID(Request $request)
        {
        /* if($request->enable ==1){
        $query ='select cf.id,cf.parent_question_id as childquestion ,cf.question_description as childdesc,
        cff.parent_question_id as subchildquestionid ,cff.id as subchild,cff.question_description as subchilddesc
        from public.proc_financial_deviation_master pf
        RIGHT JOIN public.proc_financial_deviation_master as cf on pf.id = cf.parent_question_id
        INNER JOIN public.proc_financial_deviation_master as cff on cf.id = cff.parent_question_id order by cf.id' ;
        }
        */


           $parentdata = DB::select("select a.id,question_description,
        (select count(*) from proc_financial_deviation_master where parent_question_id = a.id)
        from proc_financial_deviation_master as a where a.parent_question_id = " . $request->parent_question_id . "and question_id=" . $request->question_id);

        $data = $parentdata;
        return response()->json([
            "status" => true,
            "message" => 'Data fetched successfully',
            "data" => $data
        ], 200);
        // Log::info($data);
				}


//medha 3rd may
  
	 public function deleteHL_LAP(Request $request){
        $disableHL_LAP = HL_LAP_header::find($request->id);
        $disableHL_LAP->is_active  = 0;
        $disableHL_LAP->save();
        if (!empty($disableHL_LAP)) {
            return response()->json([
				"status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
			"status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }
		
		
		//jayesh 4th may

public function getQuestionIdByReqIdAndHeader(Request $request){
//    Log::info($request);
//    Log::info($request->answer_headers);
    $result = DB::select("select id from proc_financial_deviation_inputs where application_id = '".$request->user_id."' and answer_headers = '".$request->answer_headers."' ");
    //Log::info($result);
   //Log::info($result[0]->id);
   $id = 0;
   if(count($result)>0){
    $id = $result[0]->id;
    //Log::info($result[0]->id);
   }
   if( $id>0){
    return response()->json([
        "status" => true,
        "message" => 'Data fetched successfully',
        "data" => $id,
        ], 200);
   }else{
    return response()->json([
        "status" => false,
        "message" => 'no data found',
        "data" =>0,
        ], 200);
   }
 }

//medha 04th may
public function getHL_LAPByUnitdetailsId(Request $request){
        $query = 'select hl_lap_header.id as hl_lap_header_id,master_table.name as property_status,
        cat_master.name as property_usage,age_master.name as age_of_construction,no_master.name as no_of_units,
        type_master.name as property_type,area_master.name as property_area,conversion_master.name as conversion_status,
        owner_master.name as type_of_ownership, dev_master.name as deviation_from_sanction_plan,
        asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,hl_lap_header.area,
        const_master.name as type_of_construction ,prop_master.name as property_category 
        from hl_lap_details
        left join hl_lap_header on hl_lap_header.id = hl_lap_details.hl_lap_header_id
        left join master_table on master_table.id = hl_lap_details.property_status_id
        left join master_table as cat_master on cat_master.id = hl_lap_details.property_usage_id
        left join master_table as age_master on age_master.id = hl_lap_details.age_of_construction_id
        left join master_table as no_master on no_master.id = hl_lap_details.no_of_units_id
        left join master_table as type_master on type_master.id = hl_lap_details.property_type_id
        left join master_table as area_master on area_master.id = hl_lap_details.property_area_id
        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
        left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
        where hl_lap_header.is_active = true and hl_lap_header.no_of_units_id= ' . $request->no_of_units_id . 'order by hl_lap_details.id';
        $data = DB::select($query);

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
    }
	
    public function getHL_LAPByUserId(Request $request){
        DB::enableQueryLog();
        $query = 'select hl_lap_details.*,hl_lap_header.id as hl_lap_header_id,master_table.name as property_status,
        cat_master.name as property_usage,age_master.name as age_of_construction,no_master.name as no_of_units,
        type_master.name as property_type,area_master.name as property_area,conversion_master.name as conversion_status,
        owner_master.name as type_of_ownership, dev_master.name as deviation_from_sanction_plan,
        asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,hl_lap_header.area,
        const_master.name as type_of_construction ,prop_master.name as property_category,hl_lap_header.conversion_status_id,
		hl_lap_header.type_of_ownership_id,hl_lap_header.deviation_from_sanction_plan_id,hl_lap_header.asset_type_id,
        unit_master.name no_of_units,
		hl_lap_header.type_of_construction_id,hl_lap_header.property_category_id,hl_lap_header.pin_id,pin_codes.area as area,
        pin_codes.pincode as pincode
        from hl_lap_details
        left join hl_lap_header on hl_lap_header.id = hl_lap_details.hl_lap_header_id
        left join master_table on master_table.id = hl_lap_details.property_status_id
        left join master_table as cat_master on cat_master.id = hl_lap_details.property_usage_id
        left join master_table as age_master on age_master.id = hl_lap_details.age_of_construction_id
        left join master_table as no_master on no_master.id = hl_lap_details.no_of_units_id
        left join master_table as type_master on type_master.id = hl_lap_details.property_type_id
        left join master_table as area_master on area_master.id = hl_lap_details.property_area_id
        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
        left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
        left join master_table as unit_master on unit_master.id = hl_lap_header.no_of_units_id
		left join pin_codes on pin_codes.id = hl_lap_header.pin_id
        where hl_lap_header.is_active = true and hl_lap_details.is_active = 1 and hl_lap_header.parent_id= ' . $request->user_id . 'order by hl_lap_details.id';
        $data = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Asset_LAP", "Select", $query1[0]['query'], "hl_lap_header, hl_lap_details","Select");

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
    }
	
	
		public function deleteHL_LAP_details(Request $request){
            $disableHL_LAP = HL_LAP_details::find($request->hl_lap_details_id);
            $disableHL_LAP->is_active  = 0;
            $disableHL_LAP->save();
            if (!empty($disableHL_LAP)) {
                return response()->json([
				"status" => true,
                    "message" => 'Deleted successfully',
                ], 201);
            } else {
                return response()->json([
				"status" => false,
                    "message" => 'Failed to delete',
                ], 201);
            }
        }
		
		
		public function getHL_LAP_details_byDetailsId(Request $request){
            $query = 'select hl_lap_details.*,hl_lap_header.id as hl_lap_header_id,master_table.name as property_status,
            cat_master.name as property_usage,age_master.name as age_of_construction,no_master.name as no_of_units,
            type_master.name as property_type,area_master.name as property_area,conversion_master.name as conversion_status,
            owner_master.name as type_of_ownership, dev_master.name as deviation_from_sanction_plan,
            asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,hl_lap_header.area,
            const_master.name as type_of_construction ,prop_master.name as property_category,hl_lap_header.conversion_status_id,
            hl_lap_header.type_of_ownership_id,hl_lap_header.deviation_from_sanction_plan_id,hl_lap_header.asset_type_id,
            hl_lap_header.type_of_construction_id,hl_lap_header.property_category_id,hl_lap_header.pin_id,pin_codes.area as area,
            pin_codes.pincode as pincode
            from hl_lap_details
            left join hl_lap_header on hl_lap_header.id = hl_lap_details.hl_lap_header_id
            left join master_table on master_table.id = hl_lap_details.property_status_id
            left join master_table as cat_master on cat_master.id = hl_lap_details.property_usage_id
            left join master_table as age_master on age_master.id = hl_lap_details.age_of_construction_id
            left join master_table as no_master on no_master.id = hl_lap_details.no_of_units_id
            left join master_table as type_master on type_master.id = hl_lap_details.property_type_id
            left join master_table as area_master on area_master.id = hl_lap_details.property_area_id
            left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
            left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
            left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
            left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
            left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
            left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
            left join pin_codes on pin_codes.id = hl_lap_header.pin_id
            where hl_lap_header.is_active = true and hl_lap_details.is_active = 1 and hl_lap_details.id  = ' . $request->hl_lap_details_id . 'order by hl_lap_details.id';
            $data = DB::select($query);
    
                if (count($data) > 0) {
                    return response()->json([
                        "status" => true,
                        "message" => 'Data fetched successfully',
                        "data"    => $data
                    ], 201);
                }
                return response()->json([
                    "status" => false,
                    "message" => 'Data not available',
                ], 201);
            
    
        }
		
		
		
		public function getrequestdetailsbyid(Request $request){
            $user = RequestTable::select('id', 'folder_no')->where('id', $request->request_id)->first();
            if (!empty($user)) {
                return response()->json([
                    "status" => true,
                    "data" => $user
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
        }
		
		protected function getdocList($getAllDoc){
            $data=[];
            foreach($getAllDoc as $item){
                $data[]=$item->document_name;
            }
            return $data;
        }
		
		public function getBusinessdocumentByLoantype(Request $request){
    $fetchprooftype="select distinct proof_type from business_doc_master_id";
    $getProofType = DB::select($fetchprooftype);
        foreach($getProofType as $item){
            $proof_type=$item->proof_type;
            $query = "select distinct document_name from business_doc_master_id where loan_type_id = '" . $request->loan_type_id . "' and req_type_id  = '" . $request->req_type_id . "' and proof_type='".$proof_type."'";
            $getAllDoc = DB::select($query);
            $data[$proof_type]=$this->getdocList($getAllDoc);
        }
        
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ]
        , 201);
}

	public function getAllFinancier(Request $request)
	{
		if ($request->has('enable')) {
			//$data = DB::table('bank')->where('financier_flag','=',1)->where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
			$data = DB::table('bank')->where('enable', '=', $request->enable)->where('financier_flag', '=', 1)->where('is_active', '=', 1)->orderBy('name')->get();
		} else {
			$data = DB::table('bank')->where('financier_flag', '=', 1)->where('is_active', '=', 1)->orderBy('name')->get();
		}
		if (!$data->isEmpty()) {
			return response()->json([
				"status" => true,
				"message" => 'Data fetched successfully',
				"data"    => $data
			], 201);
		}
		return response()->json([
			"status" => false,
			"message" => 'Data not available',
		], 201);
	}
	
	public function getPagewiseDocument(Request $request){
    $query = ("select document_check_list.* ,document_master.document_id as doc_id,document.name as doc_name
    from document_check_list
    left join document_master on document_master.id = document_check_list.document_master_id 
    left join document on document.id = document_master.document_id
    where form = '" . $request->form . "'");
    $data = DB::select($query);

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    

}


	function getRequestdetailsByDsa(Request $request)
    {
        DB::enableQueryLog();
        //$data = DB::table('request')->where('user_id', $request->user_id)->get();
        $query =("select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,business_infos.id as business_id

        from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
		left join business_infos on business_infos.name = customer.business_name

        where request.is_active = 1 and request.referal_code  = '" . $request->referal_code . "' order by request.id");
        $data = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "let's get started", "select", $query1[0]['query'], "request","fetch");

        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }
	
	public function getBusinessByDSA(Request $request)
       {
        $query =("select * from request where referal_code = '" . $request->referal_code . "'");
		
        $request_data = DB::select($query);                                                                                                                        
        //Log::info($Data);
        //$businessData = [];
        $data_array = [];
       // if (!empty($request_data)) {
            
            foreach($request_data as $i => $i_value) {
                $customer = DB::select('select business_name from customer where primary_user_id =' . $i_value->user_id);
					//Log::info("select business_name from customer where primary_user_id =' . $i_value->user_id");
                    $businessData = DB::select("select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                    business_infos.pin_id as pin_id,business_infos.entity_id as entity_id,business_infos.\"BPAN\" as bpan,
                    business_infos.user_id as user_id,
                    entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                    states.state_name as state_name
                    from business_infos
                    left join entity_types on entity_types.id = business_infos.entity_id
                    left join industry_group on industry_group.id = business_infos.industry_group_id
                    left join pin_codes on pin_codes.id = business_infos.pin_id
                    left join city on city.id = pin_codes.city_id
                    left join states on states.state_id = pin_codes.state_id
                    where business_infos.is_active = 1 and business_infos.name = '" . $customer[0]->business_name . "'");
        
               // Log::info($businessData);
                 $data_array[$i]= $businessData[0];

               //  Log::info($data_array);

               
            }
            Log::info($data_array);
            Log::info("------------------------------------------------------------------------------");
           // }
        //} else {
            $businessData1 = DB::select(' select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                business_infos.user_id as user_id,
                entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                states.state_name as state_name
                from business_infos
                left join entity_types on entity_types.id = business_infos.entity_id
                left join industry_group on industry_group.id = business_infos.industry_group_id
                left join pin_codes on pin_codes.id = business_infos.pin_id
                left join city on city.id = pin_codes.city_id
                left join states on states.state_id = pin_codes.state_id
                where business_infos.is_active = 1 and business_infos.created_by = ' . $request->user_id);
     //   }

            Log::info($businessData1);

        Log::info("------------------------------------------------------------------------------");

       $data_array  = array_merge($data_array,$businessData1);

        Log::info($data_array);
       


        // $array=[];
        // foreach($data_array as $k => $item ){
        //   //  $array[$k]=$item;
        //     //Log::info(print_r($item,true));
        //     foreach($item as $data_val){
        //         //Log::info(print_r($data_val,true));
        //         $array[]=$data_val;
        //     }
        // }
        
        
        //Log::info(print_r($array,true));
       // $data = (!empty($array)) ? $array : $businessData;
        $data=$data_array;
        if (count($data) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $data,
                "count"=>count($data_array)
            ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }
        }
				
		
		
		/*public function getRequestByDsa(Request $request){
        $query =("select * from request where referal_code = '" . $request->referal_code . "'");
        $request_data = DB::select($query);                                                                                                                        
        //Log::info($request_data);
        //$businessData = [];
        $data_array = [];
        if (!empty($request_data)) {
            foreach($request_data as $i => $i_value) {
                $requesttableData  = DB::select("select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan
                from request
                left join customer on customer.primary_user_id = request.user_id
                left join loan_types on loan_types.id = request.business_channel_id
                where request.id  = " . $i_value->id . "");

                //Log::info($requesttableData);
                /* foreach ($requesttableData  as $k => $item) {
                    $data_array[$k]= $item;
                } */
                //Log::info($requesttableData);
                /*$data_array[]= $requesttableData;
            }
            
        }else{
            $requesttableData  = DB::select("select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan
                from request
                left join customer on customer.primary_user_id = request.user_id
                left join loan_types on loan_types.id = request.business_channel_id
                where request.created_by  = " . $request->user_id . "");
        }
        //Log::info($requesttableData);
        /*$array=[];
         foreach($data_array as $k => $item ){
           //  $array[$k]=$item;
             //Log::info(print_r($item,true));
             foreach($item as $data_val){
                 Log::info(print_r($data_val,true));
                 $array[]=$data_val;
             }
         }*/
         
         
         /*Log::info(print_r($array,true));

        $data = (!empty($array)) ? $array : $requesttableData ;
        

        if (count($data) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $data,
                "count"=>count($data_array)
            ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }
	}*/
	
	
	public function getRequestByDsa(Request $request){
        $query =("select * from request where referal_code = '" . $request->referal_code . "'");
        $request_data = DB::select($query);                                                                                                                        
        //Log::info($request_data);
        //$businessData = [];
        $data_array = [];
        if (!empty($request_data)) {
            foreach($request_data as $i => $i_value) {
                $requesttableData  = DB::select("select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,
                master_table.name as profession,business_infos.id as business_id

                from request
                left join customer on customer.primary_user_id = request.user_id
                left join loan_types on loan_types.id = request.business_channel_id
                left join master_table on master_table.id = request.profession_id
				left join business_infos on business_infos.name = customer.business_name

                where request.is_active = 1 and request.created_by  = " . $request->user_id . "
                UNION
                select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,
                master_table.name as profession,business_infos.id as business_id
                from request
                left join customer on customer.primary_user_id = request.user_id
                left join master_table on master_table.id = request.profession_id
                left join loan_types on loan_types.id = request.business_channel_id
								left join business_infos on business_infos.name = customer.business_name

                where request.is_active = 1 and request.id  = " . $i_value->id . " order by id");

                //Log::info($requesttableData);
                /* foreach ($requesttableData  as $k => $item) {
                    $data_array[$k]= $item;
                } */
                //Log::info($requesttableData);
                $data_array[]= $requesttableData;
            }
            
        }else{
            $requesttableData  = DB::select("select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,business_infos.id as business_id
                from request
                left join customer on customer.primary_user_id = request.user_id
                left join loan_types on loan_types.id = request.business_channel_id
												left join business_infos on business_infos.name = customer.business_name

                where request.is_active = 1 and request.created_by  = " . $request->user_id . "");
        }
        //Log::info($requesttableData);
        $array=[];
         foreach($data_array as $k => $item ){
           //  $array[$k]=$item;
             //Log::info(print_r($item,true));
             foreach($item as $data_val){
                 //Log::info(print_r($data_val,true));
                 $array[]=$data_val;
             }
         }
         
         
         //Log::info(print_r($array,true));

        $data = (!empty($array)) ? $array : $requesttableData ;
        

        if (count($data) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $data,
                "count"=>count($data_array)
            ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }
}


	/*public function getDocumentsDetailsByBank(Request $request){

        $query = "select document_check_list_bank.id,document_master.name,master_table.name as required_phase  from document_check_list_bank
        left join document_authority_mapping on document_authority_mapping.id = document_check_list_bank.document_master_id
        left join document_master on document_master.id = document_authority_mapping.document_id
        left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
        left join pin_codes on pin_codes.city_id = document_authority_master.city_id
        left join master_table on master_table.id = document_check_list_bank.required_phase
        where pin_codes.id in(select pin_id from customer where primary_user_id = " . $request->user_id . ") and required_phase = ". $request->required_phase ." and bank_id =" . $request->bank_id . "";
        $DocumentList = DB::select($query);

        if (count($DocumentList) > 0) {
            foreach ($DocumentList as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                Log::info($documentArray);
                $DocumentList[$k]->documentArray = $documentArray;
            }
        }

        if (count($DocumentList) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $DocumentList
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'data not found'
            ], 200);
        } 
    }*/
	
	
	public function getDocumentsDetailsByBank(Request $request){
        //$count = 0;
        $data_array = [];
        for ($i = 0; $i < count($request->bank_id); $i++){

        $query = "select document_check_list_bank.id,document_master.name,master_table.name as required_phase  from document_check_list_bank
        left join document_authority_mapping on document_authority_mapping.id = document_check_list_bank.document_master_id
        left join document_master on document_master.id = document_authority_mapping.document_id
        left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
        left join pin_codes on pin_codes.city_id = document_authority_master.city_id
        left join master_table on master_table.id = document_check_list_bank.required_phase
        where pin_codes.id in(select pin_id from customer where primary_user_id = " . $request->user_id . ") and required_phase = ". $request->required_phase ." and bank_id =" . $request->bank_id[$i] . "";
        
        $DocumentList = DB::select($query);
        $data_array[] = $DocumentList;
        
        }

        $array=[];
        foreach($data_array as $k => $item ){
            //  $array[$k]=$item;
              //Log::info(print_r($item,true));
              foreach($item as $data_val){
                  Log::info(print_r($data_val,true));
                  $array[]=$data_val;
              }
          }

          $data = (!empty($array)) ? $array : $DocumentList ;
        
        if (count($data) > 0) {
            foreach ($data as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                //Log::info($documentArray);
                $data[$k]->documentArray = $documentArray;
            }
        }
        
        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'data not found'
            ], 200);
        } 
    }
	
	function getAllForms(Request $request)
    {

        if ($request->has('enable')) {
            $data = DB::table('form_reference')->where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = DB::table('form_reference')->where('is_active', '=', 1)->orderBy('id')->get();
        }

        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }

	protected function getdocumentList($getAllDoc){
        $data=[];
        foreach($getAllDoc as $item){
            $data[]=$item->name;
        }
        return $data;
            }
	
	public function getAllDetailsDocument(Request $request)
    {
        DB::enableQueryLog();
        $fetchformname="select form_name,form_id from form_reference";
        $getFormname = DB::select($fetchformname);
        //Log::info($getFormname);
            foreach($getFormname as $item){
                $form = $item->form_id;
                $form_name = $item->form_name;
                //Log::info($form_name);

                $query = "select document_check_list.id,document_master.name,master_table.name as required_phase,
            form_reference.form_name
            from document_check_list
            left join document_authority_mapping on document_authority_mapping.id = document_check_list.document_master_id
            left join document_master on document_master.id = document_authority_mapping.document_id
            left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
            left join pin_codes on pin_codes.city_id = document_authority_master.city_id
            left join master_table on master_table.id = document_check_list.required_phase
            left join form_reference on form_reference.form_id = document_check_list.form
            where pin_codes.id in(select pin_id from customer where primary_user_id = ". $request-> user_id .") and form ='" . $form . "'";

            $getAllDoc = DB::select($query);
            $data[$form_name]=$this->getdocumentList($getAllDoc);
            }
        

        
        $query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Document", "select", $query1[0]['query'], "document_store","fetch");
        //Log::info($data);
        /* if (count($DocumentList) > 0) {
            foreach ($DocumentList as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                Log::info($documentArray);
                $DocumentList[$k]->documentArray = $documentArray;
            }
        } */

        if (count($data) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'data not found'
            ], 200);
        }
    }
	
	public function getDocumentMasterById(Request $request){
        $getDocumentMaster = Document::where('id', $request->id)->first();
        if (!empty($getDocumentMaster)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getDocumentMaster
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	
	public function getDocumentAuthority(Request $request)
    {
        if ($request->has('enable')) {
            $data = DocumentAuthority::where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = DocumentAuthority::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	public function getDocumentAuthorityMapping(Request $request){
        if ($request->has('enable')) {
            $data = DocumentMaster::where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = DocumentMaster::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	public function getDocumentchecklist(Request $request){
        if ($request->has('enable')) {
            $data = DocumentChecklist::where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = DocumentChecklist::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	public function addDocumentChecklistBank(Request $request)
    {
        //$addDocCheck = new DocumentChecklist();
        $addDocCheck = DocumentchecklistBank::firstOrNew(['id'=>$request->document_checklistbank_id]);
        $addDocCheck->document_master_id   = $request->document_master_id;
        $addDocCheck->required_phase       = $request->required_phase;
        $addDocCheck->required             = $request->required;
        $addDocCheck->original_required    = $request->original_required;
        $addDocCheck->document_type        = $request->document_type;
        $addDocCheck->length               = $request->length;
        $addDocCheck->time_grain           = $request->time_grain;
        $addDocCheck->sort_order           = $request->sort_order;
        $addDocCheck->bank_id                 = $request->bank_id;
        $addDocCheck->enable                 =   true;
        $addDocCheck->is_active              =   true;
        if (DocumentchecklistBank::where(['id' => $request->id])->count() > 0) {
            $addDocCheck->modified_on = now();
            $addDocCheck->modified_by = 1;
        } else {
            $addDocCheck->created_by = 1;
            $addDocCheck->created_on = now();
        }
        $addDocCheck->save();
        $insert_id = $addDocCheck->id;
        $data = $addDocCheck->getAttributes();
        $redis = $this->setReddis($data, 'entity');
        if (!$redis) {
            Log::error('Failed to save in redis bank_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['document_checklistbank_id']           =   $insert_id;
        
        if ($request->document_checklistbank_id) {
            return response()->json([
                "message" => 'document updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'document saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }
	
	
	public function getDocumentchecklistbank(Request $request){
        if ($request->has('enable')) {
            $data = DocumentchecklistBank::where('is_active', '=', 1)->where('enable', '=', $request->enable)->orderBy('id')->get();
        } else {
            $data = DocumentchecklistBank::where('is_active', '=', 1)->orderBy('id')->get();
        }
        if (!$data->isEmpty()) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	public function getDocumentchecklistBankById(Request $request){
        $getDocumentchecklistBankById = DocumentchecklistBank::where('id', $request->document_checklistbank_id)->first();
        if (!empty($getDocumentchecklistBankById)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $getDocumentchecklistBankById
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	
	public function deleteDocumentchecklistBank(Request $request)
    {
        $deleteDocument = DocumentchecklistBank::find($request->document_checklistbank_id);
        $deleteDocument->is_active  = 0;
        $deleteDocument->save();
        if (!empty($deleteDocument)) {
            return response()->json([
                "status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }
	
	
	
	//ganashree
	
	 public function getBankByParentId(Request $request)
        {

            $query='select banking_header.parent_id as parent,banking_header.bank_id as bank_id,bank.name as bank_name,banking_header.account_no as bank_account_no,
            business_infos.name as Business_name
            from banking_header
            left join bank on bank.id=banking_header.bank_id
            left join  business_infos on business_infos.id=banking_header.parent_id
            where banking_header.parent_id=' . $request->parent_id . ' and banking_header.is_active=1';
            
            $data = DB::select($query);
    
            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        
        }


	public function getAllDocumentlist(Request $request)
    {
        $query = "select document_check_list.id,document_master.name,master_table.name as required_phase,
            form_reference.form_name
            from document_check_list
            left join document_authority_mapping on document_authority_mapping.id = document_check_list.document_master_id
            left join document_master on document_master.id = document_authority_mapping.document_id
            left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
            left join pin_codes on pin_codes.city_id = document_authority_master.city_id
            left join master_table on master_table.id = document_check_list.required_phase
            left join form_reference on form_reference.form_id = document_check_list.form
            where pin_codes.id in(select pin_id from customer where primary_user_id = ". $request-> user_id .")";

            $getAllDoc = DB::select($query);
        
        if (count($getAllDoc) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $getAllDoc
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'data not found'
            ], 200);
        }
    }
	
	public function saveBankersDetails(Request $request){
        foreach($request->banker_Details as $i => $i_value){
            $bankerdetails = Banker_details::firstOrNew(['id' => $request->banker_details_id]);
            $bankerdetails->application_ref_no = $request->application_ref_no;
            $bankerdetails->financial_institution_id = $i_value['financial_institution_id'];
            $bankerdetails->submission_date = $i_value['submission_date'];
            $bankerdetails->submitted_by = $i_value['submitted_by'];
            $bankerdetails->loan_type_id = $i_value['loan_type_id'];
			$bankerdetails->location = $i_value['location'];
			$bankerdetails->product_id = $i_value['product_id'];
            $bankerdetails->is_active = 1;
            $bankerdetails->enable = 1;

            if (Banker_details::where(['id' => $request->banker_details_id])->count() > 0) {
                $bankerdetails->modified_on = now();
                if ($request->has('created_by')){
                    $bankerdetails->modified_by = $request->created_by;
                }else{
                    $bankerdetails->modified_by = $request->user_id;
                }
            } else {
                if ($request->has('created_by')){
                    $bankerdetails->created_by = $request->created_by;
                }else{
                    $bankerdetails->created_by = $request->user_id;
                }
                $bankerdetails->created_on = now();
                $bankerdetails->modified_on = now();
                $bankerdetails->modified_by =  $request->created_by;
            }
            $data = $bankerdetails->getAttributes();
            $bankerdetails->save();
            $insert_id = $bankerdetails->id;
            if (!$insert_id) {
                Log::error('Failed to save Banker in pgsql. for ' . $request->file_no);
                //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
                return response()->json([
                    "status" => false,
                    "message" => 'Failed to save in pgsql',
                ], 417);
            }
            $data = array_merge($data, array("primary_id" => $insert_id));
            $res_data[] = $data;
            //Log::info($res_data);
        }
        $message = " Application ". $request->application_ref_no ." has been submitted to your financial institution for further processing. Please login to platform.aagey.com for further action";
		//notification to the sca
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
                'role_id' => 3
            ]);
            $responseBody = $response;
            $dataArray = [];

            for ($i = 0; $i < count($responseBody['data']); $i++) {
                $mobile = $responseBody['data'][$i]['mobile'];
                $email = $responseBody['data'][$i]['email'];
                $this->getnotifications('email', $email, $message, $request->user_id,' Application has been submitted to financial institution successfully');
                $this->getnotifications('mobile', $mobile, $message, $request->user_id,' Application has been submitted to financial institution successfully');
            }
			
		        //notification to CPA

        $getCPA = DB::select("select owner_id from request where folder_no ='". $request->application_ref_no ."'");
        $cpa = $getCPA[0];
        $pro = json_encode($cpa);
        $obj = json_decode($pro);

        $data['cpa']=$obj->owner_id;
        //Log::info($obj->owner_id);

        if($obj->owner_id != null){
            $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                'id' => $obj->owner_id
            ]);
            $responseBody = json_decode($response->getBody());
            if($responseBody->status == 1){
                $email = $responseBody->data->email;
                //$email = $data['email'];
                $mobile = $responseBody->data->mobile;
                //$mobile = $data['mobile'];
                $this->getnotifications('email', $email, $message, $request->user_id,' Application has been submitted to financial institution successfully');
                $this->getnotifications('mobile', $mobile, $message, $request->user_id,' Application has been submitted to financial institution successfully');
                }else{
                    return response()->json([
                        "message" => 'No record found on this user_ id',
                        "status" => false
                    ], 201);
                }

        }
		
        if ($request->banker_details_id) {
            return response()->json([
                "status" => true,
                "message" => 'Banker_details Updated Successfuly',
                "Data" => $res_data
            ], 201);
        } else {
            return response()->json([
                "status" => true,
                "message" => 'Banker_details Inserted Successfuly',
                "Data" => $res_data
            ], 201);
        }
    }
	
	
	public function getBankerdetails(Request $request){
        $query = "select banker_details.* , bank.name as bank_name,loan_types.name as loan_type
        from banker_details 
        left join bank on bank.id = banker_details.financial_institution_id
        left join loan_types on loan_types.id = banker_details.loan_type_id
        where application_ref_no = '" . $request->application_ref_no . "'";
        $getBanker = DB::select($query);

        if (count($getBanker) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $getBanker
            ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }
    }
	
	public function getapplicationforBanker(Request $request){
            $getapplication = DB::select("select * from banker_details where financial_institution_id = ". $request->financial_institution_id ." and
             location = '". $request->location ."' and loan_type_id = " . $request->loan_type_id);  
            //Log::info($getapplication);
            $data_array = [];
            if(!empty($getapplication)){
                foreach($getapplication as $i => $i_value){
                     $requesttableData  = DB::select("select request.*,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,
                    customer.pan as pan,status.amount_approved as amount_approved,status.interest_rate as interest_rate,
                   status.comments as comments
                   from request
                   left join customer on customer.primary_user_id = request.user_id
                   left join business_infos on business_infos.name = customer.business_name
                   left join loan_types on loan_types.id = request.business_channel_id
                   left join status on status.request_id = request.id
                   where request.is_active = 1 and request.folder_no= '" . $i_value->application_ref_no . "'");
                    //Log::info($requesttableData);

                    $data_array[]= $requesttableData; 
                }

            }else{
                return response()->json([
                "message" => 'No record found on this id',
                "status" => false
                ], 201);
            }
            $array=[];
            foreach($data_array as $k => $item ){
                //  $array[$k]=$item;
                  //Log::info(print_r($item,true));
                  foreach($item as $data_val){
                      Log::info(print_r($data_val,true));
                      $array[]=$data_val;
                  }
              }

              //Log::info(print_r($array,true));

        $data = (!empty($array)) ? $array : $requesttableData ;
        if (count($data) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $data,
                "count"=>count($data)
            ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }
    }
	
	
	public function getloanByBusinessId(Request $request){
        $getloan = DB::select('select loan."Loan_amount" as loan_amount,loan_types.name as loan_type
        from loan 
        left join loan_types on loan_types.id = loan. "Loan_type_id"
        where parent_type_id = 1 and parent_id ='.$request->parent_id);
		
		foreach($getloan as $item) {
			$data['loan_amount'] = $item->loan_amount;
			$data['loan_type'] = $item->loan_type;
		}
        if (count($getloan) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                //"data"    => $getloan,
				"data" => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
			"data" => []
        ], 201);  

    }
	
	public function upadatingStatus(Request $request){
        $requestStatus = RequestTable::find($request->request_id);
		$refid = $requestStatus->reference_id;
        $folder_no = $requestStatus->folder_no;
            if($requestStatus->id != null){
                $requestStatus->status = $request->status;
                $requestStatus->modified_by = $request->user_id;
                $requestStatus->modified_on = now();
                $requestStatus->save();
        }
        if(!empty($request)){
        $status = Status::firstOrNew(['id' => $request->id]);
        $status->amount_approved = $request->amount_approved;
        $status->interest_rate = $request->interest_rate;
        $status->comments = $request->comments;
        $status->enable = 1;
        $status->is_active = 1;
        $status->request_id = $request->request_id;
        $status->status = $request->status;
        $status->financial_institution_id = $request->financial_institution_id;
    }  
       
        if (Status::where('id', $request->id)->count() > 0) {
            $status->modified_on = now();
            if ($request->has('created_by')) {
                $status->modified_by = $request->created_by;
            } else {
                $status->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $status->created_by = $request->created_by;
            } else {
                $status->created_by = $request->user_id;
            }
            $status->created_on = now();
            $status->modified_on = now();
            $status->modified_by = $request->created_by;
        }

        $status->save();
        $insert_id = $status->id;
        $data = $status->getAttributes();
        if (!$insert_id) {
            Log::error('Failed to save status in pgsql. for ' . $request->request_id);
            //417: “Expectation Failed.” The server is unable to meet the requirements specified in the request’s expect header field.
            return response()->json([
                "status" => false,
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['primary_id'] = $insert_id;
        $data['requestData'] = $requestStatus;
		$message = "Bank has processed updates for the Application " . $refid ." The current status of the application is ". $request->status;
		
		//notification to the sca
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
            'role_id' => 3
        ]);
        $responseBody = $response;
        $dataArray = [];

        for ($i = 0; $i < count($responseBody['data']); $i++) {
            $mobile = $responseBody['data'][$i]['mobile'];
            $email = $responseBody['data'][$i]['email'];
            $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned successfully');
        }
		
		//notification to CPA
        $getCPA = DB::select("select owner_id from request where id =". $request->request_id);
        $cpa = $getCPA[0];
        $pro = json_encode($cpa);
        $obj = json_decode($pro);

        $data['cpa']=$obj->owner_id;
        //Log::info($obj->owner_id);

        if($obj->owner_id != null){
            $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                'id' => $obj->owner_id
            ]);
            $responseBody = json_decode($response->getBody());
            //Log::info($responseBody->status);
            if($responseBody->status == 1){
                $email = $responseBody->data->email;
                //$email = $data['email'];
                $mobile = $responseBody->data->mobile;
                //$mobile = $data['mobile'];
                
                $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned successfully');
                }

        }else{
            return response()->json([
                "message" => 'CPA not yet assigned this user_ id',
                "status" => false
            ], 201);
        } 
		
		//notification to banker
        if($request->user_id != null){
            $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                'id' => $request->user_id
            ]);
            $responseBody = json_decode($response->getBody());
                if($responseBody->status == 1){
                    $email = $responseBody->data->email;
                    //$email = $data['email'];
                    $mobile = $responseBody->data->mobile;
                    //$mobile = $data['mobile'];
                    $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned successfully');
                }
        }else{
            return response()->json([
                "message" => 'banker_id not found',
                "status" => false
            ], 201); 
        }
		

        if($status->id) {
            return response()->json([
                "status" => true,
                "message" => 'status updated successfully',
                "data"    => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available',
        ], 201);
    }
	
	
	public function verificationComments(Request $request){
        $verification = Verification::firstOrNew(['id'=>$request->verification_id]);
        $verification->application_ref_no = $request->application_ref_no;
        $verification->step = $request->step;
        $verification->sequence_no = $request->sequence_no;
        $verification->comments = $request->comments;
        $verification->commented_by = $request->commented_by;
        $verification->commented_date_time = now();
        $verification->enable = 1;
        $verification->is_active = 1;
        if (Verification::where('id', $request->id)->count() > 0) {
            $verification->modified_on = now();
            if ($request->has('created_by')) {
                $verification->modified_by = $request->created_by;
            } else {
                $verification->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $verification->created_by = $request->created_by;
            } else {
                $verification->created_by = $request->user_id;
            }
            $verification->created_on = now();
            $verification->modified_on = now();
            $verification->modified_by = $request->created_by;
        }
        $verification->save();
        $insert_id = $verification->id;
        $data = $verification->getAttributes();
        if ($request->document_checklistbank_id) {
            return response()->json([
                "message" => 'verification comments updated Successfully',
                "status" => true,
                "Data" => $data

            ], 201);
        } else {
            return response()->json([
                "message" => 'verification comments saved Successfully',
                "status" => true,
                "Data" => $data
            ], 201);
        }
    }
	
	public function getUserDetail($id) {
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
          'id' => $id,
                    ]);
                    
         return $response;
    }

    public function getverficationComments(Request $request){
        $verification =DB::select("select * from verification_comments
         where is_active = 1 and application_ref_no = '". $request->application_ref_no ."' order by sequence_no");
         //$verification = DB::select($query);
         $data = [];
         foreach($verification as $i => $i_value){
            $user_data = $this->getUserDetail($i_value->commented_by);

            $id = (is_null($i_value->commented_by)) ? "" : $i_value->commented_by;
            if(empty($id)){
                $email = "";
                $mobile = "";
            }else if (!empty($id)){
                $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                    'id' => $id
                ]);
                 
                /* Log::info($response);
                $json_array = json_decode($response->getBody()->getContents());
					$email = ($json_array!=null) ? $json_array->data->email : '';
					$mobile = ($json_array!=null) ? $json_array->data->mobile: '';
                    Log::info($email); */
                $responseBody = json_decode($response->getBody());
                //Log::info($responseBody->status);
                if($responseBody->status == true){
                    $email = $responseBody->data->email;
                    //Log::info($email);
                    $mobile = $responseBody->data->mobile;
                    //$mobile = $data['mobile'];   
                }
            }
            $data[$i] = [
            "id"=>$i_value->id,
			"application_ref_no"=>$i_value->application_ref_no,
			"step"=> ($i_value->step !=null) ? $i_value->step: '',
			"sequence_no"=>($i_value->sequence_no !=null) ? $i_value->sequence_no:'',
			"comments"=>($i_value->comments !=null) ? $i_value->comments:'',
            "commented_by"=>($i_value->commented_by !=null) ? $i_value->commented_by:'',
            "commented_date_time"=>($i_value->commented_date_time !=null) ? $i_value->commented_date_time:'',
            "enable"=>($i_value->enable !=null) ? $i_value->enable:'',
            "is_active"=>($i_value->is_active !=null) ? $i_value->is_active:'',
            "created_by"=>($i_value->created_by !=null) ? $i_value->created_by:'',
            "created_on"=>($i_value->created_on !=null) ? $i_value->created_on:'',
            "modified_by"=>($i_value->modified_by !=null) ? $i_value->modified_by:'',
            "modified_on"=>($i_value->modified_on !=null) ? $i_value->modified_on:'',
			"email" => $email,
			"mobile" => $mobile
            ];
         } 
		 

         if (count($verification) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
				"data" => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available'
        ], 201);
    }
	
	public function assignDocTeam(Request $request){
        $count = 0;
        for($i = 0; $i < count($request->appointment_id); $i++){
            $assigndocTeam = Book_appointment_header::find($request->appointment_id[$i]);
            //Log::info($assigndocTeam);
			$date = $assigndocTeam->start_date;
            $time = $assigndocTeam->start_time;
            $request_id = $assigndocTeam->request_id;
            if($assigndocTeam->id != null){
                $assigndocTeam->assaigned_to = $request->user_id;
                $assigndocTeam->save();
                $count++;
            }
			
			$getbyRequest = DB::select("select reference_id from request where id =" .$request_id);
            //Log::info($getbyRequest);
            $reference = $getbyRequest[0];
            $pro = json_encode($reference);
            $obj = json_decode($pro);
            $application = $obj->reference_id;
            //Log::info($application);
            $message = "Appointment to pickup document for Application " . $application . " has been scheduled for ". $date ." and ".$time.".The appointment has been scheduled to pick up the following documents";
        }
		//Notifications to SCA
            $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
                'role_id' => 3
            ]);
            $responseBody = $response;
            $dataArray = [];

            for ($i = 0; $i < count($responseBody['data']); $i++) {
                $mobile = $responseBody['data'][$i]['mobile'];
                $email = $responseBody['data'][$i]['email'];
                $this->getnotifications('email', $email, $message, $request->user_id,'Appointment pickup assigned  Successfully');
                $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Appointment pickup assigned  Successfully');
            }


        //notification to the client
        $getUser = DB::select("select user_id from request where id =" .$request_id);
        $reference = $getUser[0];
        $pro = json_encode($reference);
        $obj = json_decode($pro);
        $user = $obj->user_id;
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
            'id' => $user
        ]);
        $responseBody = json_decode($response->getBody());
        if($responseBody->status == 1){
            $email = $responseBody->data->email;
            $mobile = $responseBody->data->mobile;
        $this->getnotifications('email', $email, $message, $request->user_id,'Appointment pickup assigned  Successfully');

        $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Appointment pickup assigned  Successfully');
        }else{
            return response()->json([
                "message" => 'No record found on this user_ id',
                "status" => false
            ], 201);
        }
        
        if ($count > 0) {
            return response()->json([
                "message" => 'Document Collector assigned successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }


	public function deleteComments(Request $request){
        $deleteComments = Verification::find($request->id);
        $deleteComments->is_active  = 0;
        $deleteComments->save();
        if (!empty($deleteComments)) {
            return response()->json([
                "status" => true,
                "message" => 'Deleted successfully',
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'Failed to delete',
            ], 201);
        }
    }
	
	/*public function getAppointmentsbyAssignedto(Request $request){
        $getAppointment = DB::select("select * from book_appointment_header where is_active = true and assaigned_to = " . $request->assaigned_to);
        if (count($getAppointment) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
				"data" => $getAppointment
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available'
        ], 201);
    }*/
	
	public function getUserDetailsByid($id) {
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
          'id' => $id,
                    ]);
                    
         return $response;
    }
	
      public function getAppointmentsbyAssignedto(Request $request){
        // $getAppointment = DB::select("select book_appointment_header.*,request.reference_id as applicartion_ref,
        // loan_types.name as loan_type,request.user_id as user_id,customer.business_name,
		// business_infos.id as business_id
        // from book_appointment_header
        // left join request on request.id = book_appointment_header.request_id
        // left join loan_types on loan_types.id = request.business_channel_id
		// left join customer on customer.primary_user_id = request.user_id
		// left join business_infos on business_infos.name = customer.business_name
        // where book_appointment_header.is_active = true and book_appointment_header.assaigned_to  = " . $request->assaigned_to);

        $getAppointment = DB::select("select book_appointment_header.*,request.reference_id as applicartion_ref,
        loan_types.name as loan_type,request.user_id as user_id,customer.business_name
        from book_appointment_header
        left join request on request.id = book_appointment_header.request_id
        left join loan_types on loan_types.id = request.business_channel_id
		left join customer on customer.primary_user_id = request.user_id
        where book_appointment_header.is_active = true and book_appointment_header.assaigned_to = " . $request->assaigned_to."order by book_appointment_header.id");

        //Log::info($getAppointment);
        $data = [];
        foreach($getAppointment as $i => $i_value){
            $user_data = $this->getUserDetailsByid($i_value->user_id);
            $email = "";
            $mobile = "";
            $id = (is_null($i_value->user_id)) ? "" : $i_value->user_id;
            if(empty($id)){
                $email = "";
                $mobile = "";
            }else if (!empty($id)){
                $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                    'id' => $id
                ]);
                 
                $responseBody = json_decode($response->getBody());
                if($responseBody->status == true){
                    $email = $responseBody->data->email;
                    $mobile = $responseBody->data->mobile; 
                }
            }

            Log::info($email);
            Log::info($mobile);
            $data[$i] = [
            "id"=>$i_value->id,
			"title"=>$i_value->title,
			"start_date"=> ($i_value->start_date !=null) ? $i_value->start_date: '',
			"start_time"=>($i_value->start_time !=null) ? $i_value->start_time:'',
			"request_id"=>($i_value->request_id !=null) ? $i_value->request_id:'',
            "status"=>($i_value->status !=null) ? $i_value->status:'',
            "assaigned_to"=>($i_value->assaigned_to !=null) ? $i_value->assaigned_to:'',
            "address"=>($i_value->address !=null) ? $i_value->address:'',
            "pincode"=>($i_value->pincode !=null) ? $i_value->pincode:'',
            "phone"=>($i_value->phone !=null) ? $i_value->phone:'',
            "longitude"=>($i_value->longitude !=null) ? $i_value->longitude:'',
            "latitude"=>($i_value->latitude !=null) ? $i_value->latitude:'',
            "enable"=>($i_value->enable !=null) ? $i_value->enable:'',
            "is_active"=>($i_value->is_active !=null) ? $i_value->is_active:'',
            "created_by"=>($i_value->created_by !=null) ? $i_value->created_by:'',
            "created_on"=>($i_value->created_on !=null) ? $i_value->created_on:'',
            "modified_by"=>($i_value->modified_by !=null) ? $i_value->modified_by:'',
            "modified_on"=>($i_value->modified_on !=null) ? $i_value->modified_on:'',
			"applicant_name" => $email,
            "applicartion_ref" =>($i_value->applicartion_ref !=null) ? $i_value->applicartion_ref:'',
            "loan_type" =>($i_value->loan_type !=null) ? $i_value->loan_type:'',
            "user_id" => ($i_value->user_id !=null) ? $i_value->user_id:'',
            "business_name" =>($i_value->business_name !=null) ? $i_value->business_name:'',
          //  "business_id" => ($i_value->business_id !=null) ? $i_value->business_id:''
            ];
         } 
        if (count($getAppointment) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
				"data" => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available'
        ], 201);
    }

	
	
	public function getUserDetailByownerid($owner_id) {
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
          'id' => $owner_id,
                    ]);
                    
         return $response;
    }
	
	public function getUserDetailByid($id) {
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
          'id' => $id,
                    ]);
                    
         return $response;
    }
     public function getAppointmentsbyAppointmentId(Request $request){
        $refernce_id = [];
        $reference_checklist_id = [];
        $getAppointment = DB::select("select book_appointment_header.*,request.reference_id as applicartion_ref,
        loan_types.name as loan_type,request.user_id as user_id,request.owner_id as owner_id
        from book_appointment_header
        left join request on request.id = book_appointment_header.request_id
        left join loan_types on loan_types.id = request.business_channel_id
        where book_appointment_header.is_active = true and book_appointment_header.id = " . $request->appointment_id);

        foreach($getAppointment as $i => $item){
            $id=$item->id;
            $data1 =Book_appointment_details::select('*')->where('reference_header_id',$id)->get();
            // Log::info($data1);
            $data['appointmentdetails']=$data1;
            $refernce_id[] = $id;
        }
        if (!empty($refernce_id)) {
            $appoint_details_id = Book_appointment_details::select('id','reference_document_checklist_id','is_collected')->where('reference_header_id',$refernce_id[0])->get();
            //$data['reference_document_checklist_id'] = $appoint_details_id;
            $doc_array = [];
            foreach($appoint_details_id as $item) {
                Log::info($item);
              $reference_checklist_id[] = $item->reference_document_checklist_id;
              $document = DB::select('select document_master.name as doc_name,document_master.id
              from document_check_list
              left join document_master on document_master.id = document_check_list.document_master_id
              where required_phase = 172 and document_check_list.id = '. $item->reference_document_checklist_id);
              $data =[];
             // $document_colleted = DB::select(select * from );
              $data['name']=$document[0]->doc_name;
              $data['checklist_id']=$document[0]->id;
              $data['collected'] =$item->is_collected;
              $data['id'] = $item->id;

              $doc_array[] = $data;
            }
      }
      //Log::info(print_r($doc_array, true));
      //$data['doc_name'] = $doc_array;
      $data['reference_document_checklist_id'] = $reference_checklist_id;
        $data = [];
        foreach($getAppointment as $i => $i_value){
            $user_data = $this->getUserDetailByid($i_value->user_id);

            $id = (is_null($i_value->user_id)) ? "" : $i_value->user_id;
            if(empty($id)){
                $email = "";
                $mobile = "";
            }else if (!empty($id)){
                $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                    'id' => $id
                ]);
                 
                $responseBody = json_decode($response->getBody());
                //Log::info($responseBody->status);
                if($responseBody->status == true){
                    $email = $responseBody->data->email;
                    //Log::info($email);
                    $mobile = $responseBody->data->mobile;
                    //$mobile = $data['mobile'];   
                }
            }


            $owner_data = $this->getUserDetailByownerid($i_value->owner_id);

            $owner_id = (is_null($i_value->owner_id)) ? "" : $i_value->owner_id;
            if(empty($owner_id)){
                $owner_name = "";
                $owner_mobile = "";
            }else if (!empty($id)){
                $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                    'id' => $owner_id
                ]);
                 
                $responseBody = json_decode($response->getBody());
                //Log::info($responseBody->status);
                if($responseBody->status == true){
                    $owner_name = $responseBody->data->email;
                    //Log::info($email);
                    $owner_mobile = $responseBody->data->mobile;
                    //$mobile = $data['mobile'];   
                }
            }


            $data[$i] = [
            "id"=>$i_value->id,
			"title"=>$i_value->title,
			"start_date"=> ($i_value->start_date !=null) ? $i_value->start_date: '',
			"start_time"=>($i_value->start_time !=null) ? $i_value->start_time:'',
			"request_id"=>($i_value->request_id !=null) ? $i_value->request_id:'',
            "status"=>($i_value->status !=null) ? $i_value->status:'',
            "assaigned_to"=>($i_value->assaigned_to !=null) ? $i_value->assaigned_to:'',
            "address"=>($i_value->address !=null) ? $i_value->address:'',
            "pincode"=>($i_value->pincode !=null) ? $i_value->pincode:'',
            "phone"=>($i_value->phone !=null) ? $i_value->phone:'',
            "longitude"=>($i_value->longitude !=null) ? $i_value->longitude:'',
            "latitude"=>($i_value->latitude !=null) ? $i_value->latitude:'',
            "enable"=>($i_value->enable !=null) ? $i_value->enable:'',
            "is_active"=>($i_value->is_active !=null) ? $i_value->is_active:'',
            "created_by"=>($i_value->created_by !=null) ? $i_value->created_by:'',
            "created_on"=>($i_value->created_on !=null) ? $i_value->created_on:'',
            "modified_by"=>($i_value->modified_by !=null) ? $i_value->modified_by:'',
            "modified_on"=>($i_value->modified_on !=null) ? $i_value->modified_on:'',
			"applicant_name" => $email,
            "applicartion_ref" =>($i_value->applicartion_ref !=null) ? $i_value->applicartion_ref:'',
            "user_id" =>($i_value->user_id !=null) ? $i_value->user_id:'',
            "owner_id" =>($i_value->owner_id !=null) ? $i_value->owner_id:'',
            "cpa" =>$owner_name,
            "cpa_mobile" => $owner_mobile,
            "loan_type" =>($i_value->loan_type !=null) ? $i_value->loan_type:'',
            "reference_document_checklist_id" => $reference_checklist_id,
            "documents" => $doc_array
            ];
         } 
        if (count($getAppointment) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
				"data" => $data
            ], 201);
        }
        return response()->json([
            "status" => false,
            "message" => 'Data not available'
        ], 201);
    }
	
	
	public function updateStatusForAppointment(Request $request){
        $updatestatus = Book_appointment_header::find($request->id);
        $updatestatus->status = $request->status;
        $updatestatus->save();
        if($updatestatus){
            return response()->json([
                "message" => 'status updated successfully',
                "status" => true
            ], 201);
        }else{
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
   }
   
   
   //admin to change no. of banking months
    public function changeBankingMonths(Request $request){
        $generalSetting = GeneralSetting::where('parameter_name', 'Banking Month No')->first();
        //Log::info($generalSetting);
        $generalSetting->parameter_value = $request->parameter_value;
        $generalSetting->save();
        if (!empty($generalSetting)) {
            return response()->json([
                "message" => 'data updated Successfully',
                "status" => true,
                "Data" => $generalSetting

            ], 201);
        }else{
            return response()->json([
                "message" => 'update parameter_value',
                "status" => true
            ], 201);
        }
    }
	
	//Admin to make changes in general settings
    public function changeGeneralSettings(Request $request){
        $generalSetting = GeneralSetting::find($request->id);
        //Log::info($generalSetting);
        $generalSetting->parameter_value = $request->parameter_value;
        $generalSetting->save();
        if (!empty($generalSetting)) {
            return response()->json([
                "message" => 'data updated Successfully',
                "status" => true,
                "Data" => $generalSetting

            ], 201);
        }else{
            return response()->json([
                "message" => 'update parameter_value',
                "status" => true
            ], 201);
        }
    }
	
	//perfios standalone api
	

    public function getPerfiosData(Request $request)
    {
		$result = $request->Data;
        $customer_info = [];
        $summary_info = [];
        $summary_info_avg = [];
        $summary_info_av_acc = [];

        //customer information
        $customer_info['name'] = $result['CustomerInfo']['_name'];
        $customer_info['address'] = $result['CustomerInfo']['_address'];
        $customer_info['bank'] = $result['CustomerInfo']['_bank'];
        $customer_info['customerTransactionId'] = $result['CustomerInfo']['_customerTransactionId'];
        $customer_info['email'] = $result['CustomerInfo']['_email'];
        $customer_info['instId'] = $result['CustomerInfo']['_instId'];
        $customer_info['landline'] = $result['CustomerInfo']['_landline'];
        $customer_info['mobile'] = $result['CustomerInfo']['_mobile'];
        $customer_info['pan'] = $result['CustomerInfo']['_pan'];
        $customer_info['perfiosTransactionId'] = $result['CustomerInfo']['_perfiosTransactionId'];

        $this->saveCustomerInfo($customer_info);
        //exit();

        $summary_info_av_acc['accNo'] = $result['SummaryInfo']['_accNo'];
        $summary_info_av_acc['accType'] = $result['SummaryInfo']['_accType'];
        $summary_info_av_acc['fullMonthCount'] = $result['SummaryInfo']['_fullMonthCount'];
        $summary_info_av_acc['instName'] = $result['SummaryInfo']['_instName'];

        //summary information of total
        $summary_info['balAvg'] = $result['SummaryInfo']['Total']['_balAvg'];
        $summary_info['balMax'] = $result['SummaryInfo']['Total']['_balMax'];
        $summary_info['balMin'] = $result['SummaryInfo']['Total']['_balMin'];
        $summary_info['cashDeposits'] = $result['SummaryInfo']['Total']['_cashDeposits'];
        $summary_info['cashWithdrawals'] = $result['SummaryInfo']['Total']['_cashWithdrawals'];
        $summary_info['chqDeposits'] = $result['SummaryInfo']['Total']['_chqDeposits'];
        $summary_info['chqIssues'] = $result['SummaryInfo']['Total']['_chqIssues'];
        $summary_info['credits'] = $result['SummaryInfo']['Total']['_credits'];
        $summary_info['debits'] = $result['SummaryInfo']['Total']['_debits'];
        $summary_info['emiEcsLoanIssues'] = $result['SummaryInfo']['Total']['_emiEcsLoanIssues'];
        $summary_info['inwBounces'] = $result['SummaryInfo']['Total']['_inwBounces'];
        $summary_info['inwChqBounces'] = $result['SummaryInfo']['Total']['_inwChqBounces'];
        $summary_info['loanDisbursals'] = $result['SummaryInfo']['Total']['_loanDisbursals'];
        $summary_info['outwBounces'] = $result['SummaryInfo']['Total']['_outwBounces'];
        $summary_info['outwChqBounces'] = $result['SummaryInfo']['Total']['_outwChqBounces'];
        $summary_info['totalCashDeposit'] = $result['SummaryInfo']['Total']['_totalCashDeposit'];
        $summary_info['totalCashWithdrawal'] = $result['SummaryInfo']['Total']['_totalCashWithdrawal'];
        $summary_info['totalChqDeposit'] = $result['SummaryInfo']['Total']['_totalChqDeposit'];
        $summary_info['totalChqIssue'] = $result['SummaryInfo']['Total']['_totalChqIssue'];
        $summary_info['totalCredit'] = $result['SummaryInfo']['Total']['_totalCredit'];
        $summary_info['totalDebit'] = $result['SummaryInfo']['Total']['_totalDebit'];       
         $summary_info['totalEmiEcsLoanIssue'] = $result['SummaryInfo']['Total']['_totalEmiEcsLoanIssue'];
         $summary_info['totalInvExpense'] = $result['SummaryInfo']['Total']['_totalInvExpense'];
         $summary_info['totalInvIncome'] = $result['SummaryInfo']['Total']['_totalInvIncome'];
         $summary_info['totalLoanDisbursal'] = $result['SummaryInfo']['Total']['_totalLoanDisbursal'];
            
            $this->saveSummaryInfo($summary_info,"total", $summary_info_av_acc);

        //Average
        $summary_info_avg['balAvg'] = $result['SummaryInfo']['Average']['_balMax'];
        $summary_info_avg['balMax'] = $result['SummaryInfo']['Average']['_balMax'];
        $summary_info_avg['balMin'] = $result['SummaryInfo']['Average']['_balMin'];
        $summary_info_avg['cashDeposits'] = $result['SummaryInfo']['Average']['_cashDeposits'];
        $summary_info_avg['cashWithdrawals'] = $result['SummaryInfo']['Average']['_cashWithdrawals'];
        $summary_info_avg['chqDeposits'] = $result['SummaryInfo']['Average']['_chqDeposits'];
        $summary_info_avg['chqIssues'] = $result['SummaryInfo']['Average']['_chqIssues'];
        $summary_info_avg['credits'] = $result['SummaryInfo']['Average']['_credits'];
        $summary_info_avg['debits'] = $result['SummaryInfo']['Average']['_debits'];
        $summary_info_avg['emiEcsLoanIssues'] = $result['SummaryInfo']['Average']['_emiEcsLoanIssues'];
        $summary_info_avg['inwBounces'] = $result['SummaryInfo']['Average']['_inwBounces'];
        $summary_info_avg['inwChqBounces'] = $result['SummaryInfo']['Average']['_inwChqBounces'];
        $summary_info_avg['loanDisbursals'] = $result['SummaryInfo']['Average']['_loanDisbursals'];
        $summary_info_avg['outwBounces'] = $result['SummaryInfo']['Average']['_outwBounces'];
        $summary_info_avg['outwChqBounces'] = $result['SummaryInfo']['Average']['_outwChqBounces'];
        $summary_info_avg['totalCashDeposit'] = $result['SummaryInfo']['Average']['_totalCashDeposit'];
        $summary_info_avg['totalCashWithdrawal'] = $result['SummaryInfo']['Average']['_totalCashWithdrawal'];
        $summary_info_avg['totalChqDeposit'] = $result['SummaryInfo']['Average']['_totalChqDeposit'];
        $summary_info_avg['totalChqIssue'] = $result['SummaryInfo']['Average']['_totalChqIssue'];
        $summary_info_avg['totalCredit'] = $result['SummaryInfo']['Average']['_totalCredit'];
        $summary_info_avg['totalDebit'] = $result['SummaryInfo']['Average']['_totalDebit'];
        $summary_info_avg['totalEmiEcsLoanIssue'] = $result['SummaryInfo']['Average']['_totalEmiEcsLoanIssue'];
        $summary_info_avg['totalInvExpense'] = $result['SummaryInfo']['Average']['_totalInvExpense'];
        $summary_info_avg['totalInvIncome'] = $result['SummaryInfo']['Average']['_totalInvIncome'];
        $summary_info_avg['totalLoanDisbursal'] = $result['SummaryInfo']['Average']['_totalLoanDisbursal'];
        
        

        $this->saveSummaryInfo($summary_info_avg,"average", $summary_info_av_acc);

        //MONTHLY DETAILS
        $monthly_details = [];

        $monthlyDetails = $result['MonthlyDetails']['MonthlyDetail'];

        foreach($monthlyDetails as $item) {
            $monthly_details['balAvg'] = $item['_balAvg'];
            $monthly_details['balMax'] = $item['_balMax'];
            $monthly_details['balMin'] = $item['_balMin'];
            $monthly_details['cashDeposits'] = $item['_cashDeposits'];
            $monthly_details['cashWithdrawals'] = $item['_cashWithdrawals'];
            $monthly_details['chqDeposits'] = $item['_chqDeposits'];
            $monthly_details['chqIssues'] = $item['_chqIssues'];
            $monthly_details['credits'] = $item['_credits'];
            $monthly_details['debits'] = $item['_debits'];
            $monthly_details['emiEcsLoanIssues'] = $item['_emiEcsLoanIssues'];
            $monthly_details['inwBounces'] = $item['_inwBounces'];
            $monthly_details['inwChqBounces'] = $item['_inwChqBounces'];
            $monthly_details['loanDisbursals'] = $item['_loanDisbursals'];
            $monthly_details['monthName'] = $item['_monthName'];
            $monthly_details['outwBounces'] = $item['_outwBounces'];
            $monthly_details['outwChqBounces'] = $item['_outwChqBounces'];
            $monthly_details['startDate'] = $item['_startDate'];
            $monthly_details['totalCashDeposit'] = $item['_totalCashDeposit'];
            $monthly_details['totalCashWithdrawal'] = $item['_totalCashWithdrawal'];
            $monthly_details['totalChqDeposit'] = $item['_totalChqDeposit'];
            $monthly_details['totalChqIssue'] = $item['_totalChqIssue'];
            $monthly_details['totalCredit'] = $item['_totalCredit'];
            $monthly_details['totalDebit'] = $item['_totalDebit'];
            $monthly_details['totalEmiEcsLoanIssue'] = $item['_totalEmiEcsLoanIssue'];
            $monthly_details['totalInvExpense'] = $item['_totalInvExpense'];
            $monthly_details['totalInvIncome'] = $item['_totalInvIncome'];
            $monthly_details['totalLoanDisbursal'] = $item['_totalLoanDisbursal'];

            $this->saveMonthlyDetails($monthly_details);

        }




        //Top 5 fund recived.
        $topFiveFundRecieved = [];

        $topFiveFundRecieved = $result['Top5FundsReceived']['Item'];
        foreach($topFiveFundRecieved as $item) {
            $topFiveFundRecieved['amount'] = $item['_amount'];
            $topFiveFundRecieved['category'] = $item['_category'];
            $topFiveFundRecieved['month'] = $item['_month'];
            
            $this->saveTop5fundReceived($topFiveFundRecieved);
        }

        // Emi loan txn.
        $emi_loan_txn = [];
        $emi_loan_txn = $result['EMIECSLOANXns']['EMIECSLOANXn'];

        foreach($emi_loan_txn as $item) {
            $emi_loan_txn['amount'] =  $item['_amount'];
            $emi_loan_txn['balance'] =  $item['_balance'];
            $emi_loan_txn['category'] =  $item['_category'];
            $emi_loan_txn['chqNo'] =  $item['_chqNo'];
            $emi_loan_txn['date'] =  $item['_date'];
            $emi_loan_txn['narration'] =  $item['_narration'];

            $this->saveEmiLoanTXN($emi_loan_txn);
        }

        //Top5FundsTransferred
        $topFiveFundTransferred =[];

        $topFiveFundTransferred = $result['Top5FundsTransferred']['Item'];
        foreach($topFiveFundTransferred as $item){
            $topFiveFundTransferred['amount'] = $item['_amount'];
            $topFiveFundTransferred['category'] = $item['_category'];
            $topFiveFundTransferred['month'] = $item['_month'];

            $this -> saveTop5fundTransferred($topFiveFundTransferred);
        }

        //RegularCredits
        $regularCredits = [];

        $regularCredits = $result['RegularCredits']['RXn'];
        foreach($regularCredits as $item){
            $regularCredits['amount'] =  $item['_amount'];
            $regularCredits['balance'] =  $item['_balance'];
            $regularCredits['category'] =  $item['_category'];
            $regularCredits['chqNo'] =  $item['_chqNo'];
            $regularCredits['date'] =  $item['_date'];
            $regularCredits['group'] =  $item['_group'];
            $regularCredits['narration'] =  $item['_narration'];

            $this-> saveRegularCredits($regularCredits);
        }
  
        //RegularDebits
        $regularDebits = [];

        $regularDebits = $result['RegularDebits']['RXn'];
        foreach($regularDebits as $item){
            $regularDebits['amount'] =  $item['_amount'];
            $regularDebits['balance'] =  $item['_balance'];
            $regularDebits['category'] =  $item['_category'];
            $regularDebits['chqNo'] =  $item['_chqNo'];
            $regularDebits['date'] =  $item['_date'];
            $regularDebits['group'] =  $item['_group'];
            $regularDebits['narration'] =  $item['_narration'];

            $this-> saveRegularDebits($regularDebits);
        }

        //Xns

        $xns = [];
        $xns = $result['Xns']['Xn'];

        foreach($xns as $item){
            $xns['amount'] =  $item['_amount'];
            $xns['balance'] =  $item['_balance'];
            $xns['category'] =  $item['_category'];
            $xns['chqNo'] =  $item['_chqNo'];
            $xns['date'] =  $item['_date'];
            $xns['narration'] =  $item['_narration'];

        }

        $xns['accountNo'] = $result['Xns']['_accountNo'];
        $xns['accountType'] = $result['Xns']['_accountType'];

        $this-> saveXns($xns);


        return response()->json([
            "message" => 'Data saved Successfully',
            "status" => true
        ], 201);
    }





    public function saveCustomerInfo ($customer_info) {
        $customerInfo = new CustomerInfoStandAlone();
        $customerInfo->name = $customer_info['name'];
        $customerInfo->address = $customer_info['address'];
        $customerInfo->bank = $customer_info['bank'];
        $customerInfo->customerTransactionId = $customer_info['customerTransactionId'];
        $customerInfo->email = $customer_info['email'];
        $customerInfo->instId = $customer_info['instId'];
        $customerInfo->landline = $customer_info['landline'];
        $customerInfo->mobile = $customer_info['mobile'];
        $customerInfo->pan = $customer_info['pan'];
        $customerInfo->perfiosTransactionId = $customer_info['perfiosTransactionId'];
        $customerInfo->enable = 1;
        $customerInfo->is_active = 1;
        $customerInfo->created_by = 1;
        $customerInfo->created_on = now();
        $customerInfo->modified_by = 1;
        $customerInfo->modified_on = now();
        Log:info(print_r($customer_info,true));
        $customerInfo->save(); 
    }

    public function saveSummaryInfo($summary_info , $type = null, $summary_info_av_acc){

        $flag = ($type == "total") ? 0 : 1;

        $summaryInfo = new SummaryInfoStandalone();
        $summaryInfo->balance_avg =$summary_info['balAvg'] ;
        $summaryInfo->balMax = $summary_info['balMax'] ;
        $summaryInfo->balMin =$summary_info['balMin'] ;
        $summaryInfo->cashDeposits =$summary_info['cashDeposits'];
        $summaryInfo->cashWithdrawals =$summary_info['cashWithdrawals'];
        $summaryInfo->chqDeposits = $summary_info['chqDeposits'];
        $summaryInfo->chqIssues = 	$summary_info['chqIssues'];
        $summaryInfo->credits = $summary_info['credits'];
        $summaryInfo->debits = $summary_info['debits'];
        $summaryInfo->emiEcsLoanIssues =$summary_info['emiEcsLoanIssues']; 
        $summaryInfo->inwBounces = $summary_info['inwBounces'];
        $summaryInfo->inwChqBounces = $summary_info['inwChqBounces']; 
        $summaryInfo->loanDisbursals = $summary_info['loanDisbursals'];
        $summaryInfo->outwBounces = $summary_info['outwBounces'];
        $summaryInfo->outwChqBounces = $summary_info['outwChqBounces'];
        $summaryInfo->totalCashDeposit = $summary_info['totalCashDeposit'];
        $summaryInfo->totalCashWithdrawal = $summary_info['totalCashWithdrawal'];
        $summaryInfo->totalChqDeposit= $summary_info['totalChqDeposit'];
        $summaryInfo->totalChqIssue = $summary_info['totalChqIssue'];
        $summaryInfo->totalCredit =$summary_info['totalCredit'];
        $summaryInfo->totalDebit = $summary_info['totalDebit'];
        $summaryInfo->totalEmiEcsLoanIssue = $summary_info['totalEmiEcsLoanIssue'];
        $summaryInfo->totalInvExpense = $summary_info['totalInvExpense'];
        $summaryInfo->totalInvIncome =$summary_info['totalInvIncome'];
        $summaryInfo->totalLoanDisbursal = $summary_info['totalLoanDisbursal'];
        $summaryInfo->accNo = $summary_info_av_acc['accNo'] ;
        $summaryInfo->accType = $summary_info_av_acc['accType'] ;
        $summaryInfo->fullMonthCount = $summary_info_av_acc['fullMonthCount'];
        $summaryInfo->instName = $summary_info_av_acc['instName'] ;
        $summaryInfo->flag =  $flag;
        $summaryInfo->enable = 1;
        $summaryInfo->is_active = 1;
        $summaryInfo->created_by = 1;
        $summaryInfo->created_on = now();
        $summaryInfo->modified_by = 1;
        $summaryInfo->modified_on = now();
        $summaryInfo->save(); 

    }


    public function saveMonthlyDetails($monthly_details){
        $monthlyDetails= new MonthlyDetailsStandalone();
        $monthlyDetails->balAvg = $monthly_details['balAvg']; 
        $monthlyDetails->balMax = $monthly_details['balMax']; 
        $monthlyDetails->balMin = $monthly_details['balMin']; 
        $monthlyDetails->cashDeposits = $monthly_details['cashDeposits']; 
        $monthlyDetails->cashWithdrawals = $monthly_details['cashWithdrawals']; 
        $monthlyDetails->chqDeposits = $monthly_details['chqDeposits']; 
        $monthlyDetails->chqIssues =  $monthly_details['chqIssues'] ;
        $monthlyDetails->credits =  $monthly_details['credits'] ;
        $monthlyDetails->debits =  $monthly_details['debits'] ;
        $monthlyDetails->emiEcsLoanIssues =  $monthly_details['emiEcsLoanIssues']; 
        $monthlyDetails->inwBounces =  $monthly_details['inwBounces'] ;
        $monthlyDetails->inwChqBounces =  $monthly_details['inwChqBounces']; 
        $monthlyDetails->loanDisbursals =  $monthly_details['loanDisbursals']; 
        $monthlyDetails->monthName =  $monthly_details['monthName'];
        $monthlyDetails->outwBounces =   $monthly_details['outwBounces']; 
        $monthlyDetails->outwChqBounces =   $monthly_details['outwChqBounces']; 
        $monthlyDetails->startDate =  $monthly_details['startDate'] ;
        $monthlyDetails->totalCashDeposit =  $monthly_details['totalCashDeposit']; 
        $monthlyDetails->totalCashWithdrawal =  $monthly_details['totalCashWithdrawal']; 
        $monthlyDetails->totalChqDeposit =  $monthly_details['totalChqDeposit'] ;
        $monthlyDetails->totalChqIssue =  $monthly_details['totalChqIssue'];
        $monthlyDetails->totalCredit =  $monthly_details['totalCredit'] ;
        $monthlyDetails->totalDebit =  $monthly_details['totalDebit'];
        $monthlyDetails->totalEmiEcsLoanIssue =  $monthly_details['totalEmiEcsLoanIssue']; 
        $monthlyDetails->totalInvExpense =  $monthly_details['totalInvExpense'] ;
        $monthlyDetails->totalInvIncome =  $monthly_details['totalInvIncome'] ;
        $monthlyDetails->totalLoanDisbursal = $monthly_details['totalLoanDisbursal']; 
        $monthlyDetails->enable = 1;
        $monthlyDetails->is_active = 1;
        $monthlyDetails->created_by = 1;
        $monthlyDetails->created_on = now();
        $monthlyDetails->modified_by = 1;
        $monthlyDetails->modified_on = now();
        $monthlyDetails->save(); 
    }


    public function saveTop5fundReceived($topFiveFundRecieved){
        $top5FundsReceived =new Top5FundsRecieved();
        $top5FundsReceived->amount = $topFiveFundRecieved['amount'];
        $top5FundsReceived->category = $topFiveFundRecieved['category'];
        $top5FundsReceived->month = $topFiveFundRecieved['month'];
        $top5FundsReceived->enable = 1;
        $top5FundsReceived->is_active = 1;
        $top5FundsReceived->created_by = 1;
        $top5FundsReceived->created_on = now();
        $top5FundsReceived->modified_by = 1;
        $top5FundsReceived->modified_on = now();
        $top5FundsReceived->save();

    }

    public function saveTop5fundTransferred($topFiveFundTransferred){
        $top5FundTransferred =new Top5FundsTransferres();
        $top5FundTransferred->amount = $topFiveFundTransferred['amount'];
        $top5FundTransferred->category = $topFiveFundTransferred['category'];
        $top5FundTransferred->month = $topFiveFundTransferred['month'];
        $top5FundTransferred->enable = 1;
        $top5FundTransferred->is_active = 1;
        $top5FundTransferred->created_by = 1;
        $top5FundTransferred->created_on = now();
        $top5FundTransferred->modified_by = 1;
        $top5FundTransferred->modified_on = now();
        $top5FundTransferred->save();

    }

    public function saveEmiLoanTXN($emi_loan_txn){
        $emiloantxn =new EmiLoanTxnStandalone();
        $emiloantxn->amount = $emi_loan_txn['amount'];
        $emiloantxn->category = $emi_loan_txn['balance'];
        $emiloantxn->category = $emi_loan_txn['category'];
        $emiloantxn->category =  $emi_loan_txn['chqNo'];
        $emiloantxn->category = $emi_loan_txn['date'];
        $emiloantxn->category = $emi_loan_txn['narration'];
        $emiloantxn->enable = 1;
        $emiloantxn->is_active = 1;
        $emiloantxn->created_by = 1;
        $emiloantxn->created_on = now();
        $emiloantxn->modified_by = 1;
        $emiloantxn->modified_on = now();
        $emiloantxn->save();

    }

    public function saveRegularCredits($regularCredits){
        $regular_Credits = new RegularCredits();
        $regular_Credits->amount =  $regularCredits['amount'];
        $regular_Credits->balance = $regularCredits['balance'];
        $regular_Credits->category = $regularCredits['category'];
        $regular_Credits->chqNo = $regularCredits['chqNo'];
        $regular_Credits->date = $regularCredits['date'];
        $regular_Credits->group = $regularCredits['group'];
        $regular_Credits->narration = $regularCredits['narration'];
        $regular_Credits->enable = 1;
        $regular_Credits->is_active = 1;
        $regular_Credits->created_by = 1;
        $regular_Credits->created_on = now();
        $regular_Credits->modified_by = 1;
        $regular_Credits->modified_on = now();
        $regular_Credits->save();
    }

   
  

    public function saveRegularDebits($regularDebits){
        $regular_Debits = new RegularDebits();
        $regular_Debits->amount =  $regularDebits['amount'];
        $regular_Debits->balance = $regularDebits['balance'];
        $regular_Debits->category = $regularDebits['category'];
        $regular_Debits->chqNo = $regularDebits['chqNo'];
        $regular_Debits->date = $regularDebits['date'];
        $regular_Debits->group = $regularDebits['group'];
        $regular_Debits->narration = $regularDebits['narration'];
        $regular_Debits->enable = 1;
        $regular_Debits->is_active = 1;
        $regular_Debits->created_by = 1;
        $regular_Debits->created_on = now();
        $regular_Debits->modified_by = 1;
        $regular_Debits->modified_on = now();
        //Log::info(print_r($regular_Debits,true));
        $regular_Debits->save();
    }
  
    public function saveXns($xns){
        $xns_data = new Xns();
        $xns_data->amount =  $xns['amount'];
        $xns_data->balance = $xns['balance'];
        $xns_data->category = $xns['category'];
        $xns_data->chqNo = $xns['chqNo'];
        $xns_data->date = $xns['date'];
        $xns_data->narration = $xns['narration'];
        $xns_data->accountNo = $xns['accountNo'];
        $xns_data->accountType = $xns['accountType'];
        $xns_data->enable = 1;
        $xns_data->is_active = 1;
        $xns_data->created_by = 1;
        $xns_data->created_on = now();
        $xns_data->modified_by = 1;
        $xns_data->modified_on = now();

       
        $xns_data->save();
    }

    
	public function assigningAnalyst(Request $request)
    {
        $count = 0;
        for ($i = 0; $i < count($request->request_id); $i++) {
            $assignanalyst = RequestTable::find($request->request_id[$i]);
            //Log::info($assigncpa);
            $refid = $assignanalyst->reference_id;
            //Log::info($refid);
            if ($assignanalyst->id != null) {
                $assignanalyst->analyst_id = $request->user_id;

                $assignanalyst->save();
                $count++;
                $message = "Application " . $refid . " has been assigned to you. Please login to the platform.aagey.com for further action";
            } 
        }

        
        //notification to cpa
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
            'id' => $request->user_id
        ]);
        //Log::info($response);
        $responseBody = json_decode($response->getBody());
        //Log::info($responseBody->status);
        if($responseBody->status == 1){
        //Log::info($responseBody->data->email);
        $data['email'] = $responseBody->data->email;
        $email = $data['email'];
        //Log::info($email);
        $data['mobile'] = $responseBody->data->mobile;
        $mobile = $data['mobile'];
        //Log::info($mobile);

        $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned  successfully');
        }else{
            return response()->json([
                "message" => 'No record found on this user_id',
                "status" => false
            ], 201);
        }

        //notifiacation to sca
        $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUsersByRoleid', [
            'role_id' => 3
        ]);

        //Log::info($response);
        //Log::info($response->getBody());
        $responseBody = $response;
        //Log::info($responseBody = json_decode($response->getBody()));
        //Log::info($responseBody);
        $dataArray = [];

        for ($i = 0; $i < count($responseBody['data']); $i++) {
            $mobile = $responseBody['data'][$i]['mobile'];
            $email = $responseBody['data'][$i]['email'];
            //Log::info($mobile);
            //Log::info($email);

            $this->getnotifications('email', $email, $message ,
            $request->user_id,'Application assigned  successfully');;

            $this->getnotifications('mobile', $mobile, $message, $request->user_id,'Application assigned  successfully');
        }

        if ($count > 0) {
            return response()->json([
                "message" => 'Analyst assigned successfully',
                "status" => true
            ], 201);
        } else {
            return response()->json([
                "message" => 'No record found on this id',
                "status" => false
            ], 201);
        }
    }
	
	/*
	public function getHL_LAP(Request $request){
        $getLAPHeader = DB::select("select hl_lap_header.*,
        conversion_master.name as conversion_status,owner_master.name as type_of_ownership,dev_master.name as deviation_from_sanction_plan,
         asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,hl_lap_header.area,hl_lap_header.pin_id,
        const_master.name as type_of_construction ,prop_master.name as property_category,no_master.name as no_of_units,
        no_unit_master.id as no_of_unit_id
        from hl_lap_header
        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
        left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
        left join master_table as no_unit_master on no_unit_master.id = hl_lap_header.no_of_units_id
        left join master_table as no_master on no_master.id = hl_lap_header.no_of_units_id
        left join pin_codes on pin_codes.id = hl_lap_header.pin_id
        where hl_lap_header.id = ".$request->hl_lap_header_id);
        Log::info($getLAPHeader);
        
        $getLAPDetails = DB::select("select hl_lap_details.*,master_table.name as property_status,
        cat_master.name as property_usage,age_master.name as age_of_construction,no_master.name as no_of_units,
        type_master.name as property_type,area_master.name as property_area
        from hl_lap_details
        left join master_table on master_table.id = hl_lap_details.property_status_id
        left join master_table as cat_master on cat_master.id = hl_lap_details.property_usage_id
        left join master_table as age_master on age_master.id = hl_lap_details.age_of_construction_id
        left join master_table as no_master on no_master.id = hl_lap_details.no_of_units_id
        left join master_table as type_master on type_master.id = hl_lap_details.property_type_id
        left join master_table as area_master on area_master.id = hl_lap_details.property_area_id
        where hl_lap_details.is_active = 1 and hl_lap_details.hl_lap_header_id   = ". $request->hl_lap_header_id . " order by hl_lap_details.id");
        Log::info($getLAPDetails);
        $data['BasicDetails'] = $getLAPHeader;
        $data['UnitDetails'] = $getLAPDetails;

        if($data){
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201); 
        }else{
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }*/
	public function getHL_LAP(Request $request){
        $getLAPHeader = DB::select("select hl_lap_header.*,
        conversion_master.name as conversion_status,owner_master.name as type_of_ownership,dev_master.name as deviation_from_sanction_plan,
         asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,hl_lap_header.area,
        const_master.name as type_of_construction ,prop_master.name as property_category,no_master.name as no_of_units,
        no_unit_master.id as no_of_unit_id
        from hl_lap_header
        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
        left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
        left join master_table as no_unit_master on no_unit_master.id = hl_lap_header.no_of_units_id
        left join master_table as no_master on no_master.id = hl_lap_header.no_of_units_id
        left join pin_codes on pin_codes.id = hl_lap_header.pin_id
        where hl_lap_header.id = ".$request->hl_lap_header_id);
       // Log::info($getLAPHeader);
        $getLAPDetails = DB::select("select hl_lap_details.*,master_table.name as property_status,
        cat_master.name as property_usage,age_master.name as age_of_construction,no_master.name as no_of_units,
        type_master.name as property_type,area_master.name as property_area
        from hl_lap_details
        left join master_table on master_table.id = hl_lap_details.property_status_id
        left join master_table as cat_master on cat_master.id = hl_lap_details.property_usage_id
        left join master_table as age_master on age_master.id = hl_lap_details.age_of_construction_id
        left join master_table as no_master on no_master.id = hl_lap_details.no_of_units_id
        left join master_table as type_master on type_master.id = hl_lap_details.property_type_id
        left join master_table as area_master on area_master.id = hl_lap_details.property_area_id
        where hl_lap_details.is_active = 1 and hl_lap_details.hl_lap_header_id   = ". $request->hl_lap_header_id . " order by hl_lap_details.id");

        $data['BasicDetails'] = $getLAPHeader;
        Log::info($getLAPDetails);
       foreach($getLAPDetails as $i => $i_value ){
           if($i_value->property_status_id == 159){
               $data2 = DB::select('select * from rental_details where property_id='.$i_value->id);
           // $getLAPDetails[$i];
		   Log::info('select * from rental_details where property_id='.$i_value->id);
		   Log::info($data2);
           Log::info("entered here");
		   if(count($data2)>0){
				$getLAPDetails[$i]->rentalDetailsObject =  $data2[0];
		   }
           
           Log::info($data2);
           }
       }
        $data['UnitDetails'] = $getLAPDetails;
        if($data){
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data"    => $data
            ], 201); 
        }else{
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
        }
    }
	
	
		public function deleteUnitDetails(Request $request){
            $deleteDocument = HL_LAP_details::find($request->id);
            $deleteDocument->is_active  = 0;
            $deleteDocument->save();
            if (!empty($deleteDocument)) {
                return response()->json([
                    "status" => true,
                    "message" => 'Deleted successfully',
                ], 201);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'Failed to delete',
                ], 201);
            } 
        }
	
	
	function getRequestdetailsByAnalystid(Request $request)
    {
        DB::enableQueryLog();
        //$data = DB::table('request')->where('user_id', $request->user_id)->get();
        $query = 'select request.*,loan_types.name as loan_type,customer.business_name as business_name,customer.pan as pan,business_infos.id as business_id

        from request
        left join customer on customer.primary_user_id = request.user_id
        left join loan_types on loan_types.id = request.business_channel_id
		left join business_infos on business_infos.name = customer.business_name

        where request.is_active = 1 and request.analyst_id  = ' . $request->analyst_id . 'order by request.id';
        $data = DB::select($query);
        $query1 = DB::getQueryLog();
        Log::info($query1[0]['query']);

        $this->callLogFileStore($request->user_id, "let's get started", "select", $query1[0]['query'], "request","fetch");

        if (!empty($data)) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'No records found'
            ], 201);
        }
    }
	
	
	public function getBusinessByAnalyst(Request $request)
        {
        $query = 'select * from request where analyst_id = ' .$request->user_id;
        $request_data = DB::select($query);                                                                                                                        
        //Log::info($Data);
        //$businessData = [];
        $data_array = [];
        if (!empty($request_data)) {
            foreach($request_data as $i => $i_value) {
            
                    $businessData = DB::select('select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                    business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                    business_infos.user_id as user_id,
                    entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                    states.state_name as state_name
                    from business_infos
                    left join entity_types on entity_types.id = business_infos.entity_id
                    left join industry_group on industry_group.id = business_infos.industry_group_id
                    left join pin_codes on pin_codes.id = business_infos.pin_id
                    left join city on city.id = pin_codes.city_id
                    left join states on states.state_id = pin_codes.state_id
                    where business_infos.is_active = 1 and business_infos.created_by = ' . $i_value->user_id . '
                    UNION
                    select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                    business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                    business_infos.user_id as user_id,
                    entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                    states.state_name as state_name
                    from business_infos
                    left join entity_types on entity_types.id = business_infos.entity_id
                    left join industry_group on industry_group.id = business_infos.industry_group_id
                    left join pin_codes on pin_codes.id = business_infos.pin_id
                    left join city on city.id = pin_codes.city_id
                    left join states on states.state_id = pin_codes.state_id
                    where business_infos.is_active = 1 and business_infos.created_by = ' . $request->user_id);
        
            
                //Log::info($i_value->user_id); 
            
                foreach ($businessData as $k => $item) {
                    $data_array[$k]= $item;
                }
               // Log::info($businessData);
                // $data[$i]= $businessData;
            }
        } else {
            $businessData = DB::select(' select business_infos.id as id,business_infos.id as bus_id, business_infos.name as name,business_infos.gst as gst ,
                business_infos.pin_id as pin_id,business_infos."BPAN" as bpan,business_infos.entity_id as entity_id,
                business_infos.user_id as user_id,
                entity_types.entity as entity_type,industry_group.name as industry_group_name, city.city as city_name,
                states.state_name as state_name
                from business_infos
                left join entity_types on entity_types.id = business_infos.entity_id
                left join industry_group on industry_group.id = business_infos.industry_group_id
                left join pin_codes on pin_codes.id = business_infos.pin_id
                left join city on city.id = pin_codes.city_id
                left join states on states.state_id = pin_codes.state_id
                where business_infos.is_active = 1 and business_infos.created_by = ' . $request->user_id);
        }
        //Log::info($data);
        $data = (!empty($data_array)) ? $data_array : $businessData;

        if (count($data) > 0){
            return response()->json([
                "message" => 'Data fetched successfully',
                "status" => true,
                "data" => $data,
            ], 201);
        } else {
        return response()->json([
        "message" => 'No record found on this id',
        "status" => false
        ], 201);
        }
        }
		
		
		
	//ganashree configuration api's
	
	    public function saveDatabaseConfig(Request $request)
        { 
            $config_name  = $request['config']['config_name'];
            $config_value = $request['config']['config_value'];
            $config = array_combine($config_name, $config_value);
            foreach ($config as $key => $i_value) 
            {
                Log::info($key);
                Log::info($i_value);
                $config = Configuration_table::firstOrNew(['ip_address' => $request->ip_address , 'configuration_name' => $key]);
                $config->configuration_name=$key;
                $config->configuration_value=$i_value;
                $config->ip_address = $request->ip_address;
                $config->modified_by = $request->created_by;
                $config->created_by = $request->created_by;
                $config->created_on = now();
                $config->modified_on = now();
                $config->flag = $request->flag;
                $config->is_active = 1;
                $config->enable = 1;

                $config->save();
               
            } 


                    if ($request->id) {
                        return response()->json([
                            "status" => true,
                            "message" => 'Configuration data  Updated Successfuly',
                            //"Data" => $data
                        ], 201);
                    } else {
                        return response()->json([
                            "status" => true,
                            "message" => 'Configuration data Inserted Successfuly',
                            //"Data" => $data
                        ], 201);
                    } 
            }  



	  public function saveEmailandSMSConfig(Request $request)
      { 
          $config_name  = $request['config']['config_name'];
          $config_value = $request['config']['config_value'];
          $config = array_combine($config_name, $config_value);
          foreach ($config as $key => $i_value) 
          {
              //Log::info($key);
              //Log::info($i_value);
              $config = Configuration_table::firstOrNew(['flag' => $request->flag , 'configuration_name' => $key]);
              $config->configuration_name=$key;
              $config->configuration_value=$i_value;
              $config->ip_address = $request->ip_address;
              $config->modified_by = $request->created_by;
              $config->created_by = $request->created_by;
              $config->created_on = now();
              $config->modified_on = now();
              $config->flag = $request->flag;
              $config->is_active = 1;
              $config->enable = 1;

              $config->save();
             
          } 


                  if ($request->id) {
                      return response()->json([
                          "status" => true,
                          "message" => 'Configuration data  Updated Successfuly',
                          //"Data" => $data
                      ], 201);
                  } else {
                      return response()->json([
                          "status" => true,
                          "message" => 'Configuration data Inserted Successfuly',
                          //"Data" => $data
                      ], 201);
                  } 
          }  
   
			
            public function deleteConfiguration(Request $request){
                $config = Configuration_table::find($request->id);
                $config->is_active  = 0;
                $config->save();
                $updateId = $config->id;
                if ($updateId) {
                    return response()->json([
                        "status" => true,
                        "message" => 'Deleted successfully',
                    ], 201);
                } else {
                    return response()->json([
                        "status" => false,
                        "message" => 'Failed to delete',
                    ], 201);
                }
            }
            

            public function getConfigurationById(Request $request){
                $config = Configuration_table::select('*')->where('id', $request->id)->where('is_active','=',true)->get();
                if(count($config) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $config
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
            }

			
            public function getConfigurationByflag(Request $request){
				Log::info($request);
                $config = Configuration_table::select('*')->where('is_active','=',true)->where('flag',$request->flag)->get();
                if(count($config) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $config
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
            }
			
            public function getAllConfiguration(Request $request){
                $config = Configuration_table::select('*')->where('is_active','=',true)->where('flag',$request->flag)->get();
                if(count($config) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $config
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
            }
			
		   public function getConfigurationByIpAddress(Request $request){
                $config = Configuration_table::select('*')->where('ip_address', $request->ip_address)->where('is_active','=',true)->get();
                if(count($config) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $config
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
        }
		
		public function getuserByFolderno(Request $request)
            {
                $user = RequestTable::select('id', 'user_id','business_channel_id' ,'reference_id')->where('folder_no', $request->folder_no)->first();
                if (!empty($user)) {
                    return response()->json([
                        "status" => true,
                        "data" => $user
                    ], 200);
                } else {
                    return response()->json([
                        "status" => false,
                        "message" => 'no records found'
                    ], 200);
                }
            }


            //ganashree
            public function getAllDatabases(){
                $names = Database::select('*')->where('enable','=',true)->get();
                if(count($names) > 0) {
                    return response()->json([
                        "status" => true,
                        "message" => 'Data fetched successfully',
                        "data" => $names
                    ], 200);
                } else {
                    return response()->json([
                        "status" => false,
                        "message" => 'no records found'
                    ], 200);
                }
            }

           
             public function getAllGeneralsettingvalue(Request $request){
                $response1 = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getAllGeneralSetting', [
                    'enable' => 1
                ]);
                $response2 = Http::post($this->serverUri . '/alpha/server.php/getAllGeneralSetting', [
                    'enable' => 1
                ]);
				$response3 = DB::select("select * from general_settings where enable = true");

                $responseBody1 = json_decode($response1->getBody(),true);
                $responseBody2 = json_decode($response2->getBody(),true);
                //  print_r($responseBody2);
                // exit;
                $data = [];
                foreach($responseBody1['data'] as $val){
					$data[] = $val;
				}
				foreach($responseBody2 as $val){
					$data[] = $val;
				}
				foreach($response3 as $val){
					$data[] = $val;
				}
				Log::info(print_r($data,true));
                if(count($data) > 0) {
                    return response()->json([
                        "status" => true,
                        "message" => 'Data fetched successfully',
                        "data" => $data 
                    ], 200);
                } else {
                    return response()->json([
                        "status" => false,
                        "message" => 'no records found'
                    ], 200);
                }
            }


            public function getParameterValueByName(Request $request){
                $parameter = GeneralSetting::select('*')->where('parameter_name', $request->parameter_name)->where('is_active','=',true)->get();
                if(count($parameter) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $parameter
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
            }

            
            public function generalSettingAddOrEdit(Request $request)
    {

        $generalSetting = GeneralSetting::firstOrNew(['id' => $request->general_setting_id]);
        $generalSetting->parameter_name                 =   $request->parameter_name;
        $generalSetting->parameter_value                =   $request->parameter_value;
        $generalSetting->enable                         =   true;
        $generalSetting->is_active                      =   true;
            $generalSetting->modified_on = now();
            $generalSetting->modified_by = 1;
            $generalSetting->created_by = 1;
            $generalSetting->created_on = now();
        $generalSetting->save();
        
        $data = $generalSetting->getAttributes();
        $insert_id = $generalSetting->id;
        $redis = $this->setReddis($data, 'generalSetting');
        if (!$redis) {
            Log::error('Failed to save in redis general_setting_id .' . $insert_id);
            return response()->json([
                "message" => 'Failed to save in redis',
            ], 417);
        }
        if (!$insert_id) {
            return response()->json([
                "message" => 'Failed to save in pgsql',
            ], 417);
        }
        $data['general_setting_id'] = $insert_id;
        return response()->json([
            "message" => 'Successfuly inserted',
            "Data" => $data
        ], 201);
    }
        
        
            public function getAllGeneralSetting(Request $request)
            {
                if ($request->has('enable')) {
                    $data = GeneralSetting::where('is_active', '=', 1)->where('enable', '=', $request->enable)->get();
                } else {
                    $data = GeneralSetting::where('is_active', '=', 1)->get();
                }
                if (!$data->isEmpty()) {
                    return response()->json([
                        "message" => 'Data fetched successfully',
                        "data"    => $data
                    ], 201);
                }
                return response()->json([
                    "message" => 'Data not available',
                ], 201);
            }
            public function deleteGeneralSetting(Request $request)
            {
                $deleteGeneralSetting = GeneralSetting::find($request->general_setting_id);
                if (!empty($deleteGeneralSetting)) {
                    $deleteGeneralSetting->is_active = 0;
                    $deleteGeneralSetting->save();
                    return response()->json([
                        "message" => 'Deleted successfully',
                    ], 200);
                } else {
                    return response()->json([
                        "message" => 'Data not available',
                    ], 201);
                }
            }
			
			
			 //jayesh
        /// new api for getting saved docs jayesh
    public function getDetailsDocumentV2(Request $request)
    {
        if($request->form == 10){
            $query1 = "select document_master.name,document_checklist_new.id id ,document_master.short_name,document_master.description, document_checklist_new.required_phase,document_checklist_new.form,document_checklist_new.document_master_id from document_checklist_new
            left join document_master on document_master.id = document_checklist_new.document_master_id ";
        $DocumentList = DB::select($query1);
        
        }elseif($request->form == 11){
            $query1 = "select document_check_list.id,document_master.name,master_table.name as required_phase ,document_master.short_name,document_master.description,document_checklist_new.form
			from document_check_list
            left join document_authority_mapping on document_authority_mapping.id = document_check_list.document_master_id
            left join document_master on document_master.id = document_authority_mapping.document_id
            left join document_authority_master on document_authority_master.id = document_authority_mapping.document_authority_id
            left join pin_codes on pin_codes.city_id = document_authority_master.city_id
            left join master_table on master_table.id = document_check_list.required_phase
            where pin_codes.id in(select pin_id from customer where primary_user_id = " . $request->user_id . ") and document_check_list.is_active = true ";
            $DocumentList = DB::select($query1);
        }else{
        DB::enableQueryLog();
        $query = "
        select document_master.name,document_checklist_new.id id, document_checklist_new.required_phase,document_checklist_new.document_master_id ,
		document_master.short_name,document_master.description,document_checklist_new.form
		from document_checklist_new
        left join document_master on document_master.id = document_checklist_new.document_master_id where required_phase = ". $request->required_phase ." and form = '".$request->form ."'  ";

        $DocumentList = DB::select($query);
        $query1 = DB::getQueryLog();
        //Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Document", "select", $query1[0]['query'], "document_store","fetch");
        //Log::info($DocumentList);
        if (count($DocumentList) > 0) {
            foreach ($DocumentList as $k => $k_value) {
                $documentArray = [];
                $fileData['file_name'] = "";
                $fileData['file_type'] = "";
                $fileData['modified_date'] = "";
                $fileData['base64String'] = "";
                $documentArray[0] = $fileData;
                //Log::info($documentArray);
                $DocumentList[$k]->documentArray = $documentArray;
            }
        }
    }

        if (count($DocumentList) > 0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $DocumentList
            ], 201);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'data not found'
            ], 200);
        }
    }


        function getFinAndFatHeaders(Request $request){
        Log::info($request->header);


        $queryData = DB::select("select * from proc_financial_eval_param where parameter_category = '" . $request->header."' order by id");
      //Log::info(select * from proc_financial_eval_param where parameter_category = '" . $request->header."' );
        if(count( $queryData )>0) {
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $queryData
            ], 200);
        } else {
            return response()->json([
                "status" => false,
                "message" => 'no records found'
            ], 200);
        }


        }

          //jayesh
          function getAllMasterQuestionByFinAndFatHeaderId(Request $request){
            $queryData = DB::select("select * from proc_financial_deviation_master where question_id = ".$request->headerId."and parent_question_id =0");
            //Log::info(select * from proc_financial_eval_param where parameter_category = '" . $request->header."' );
              if(count( $queryData )>0) {
                  return response()->json([
                      "status" => true,
                      "message" => 'Data fetched successfully',
                      "data" => $queryData
                  ], 200);
              } else {
                  return response()->json([
                      "status" => false,
                      "message" => 'no records found'
                  ], 200);
              }


        }

        function getQuestionsBtParentId(Request $request){
            $queryData =DB::select( "select * from proc_financial_deviation_master where parent_question_id =".$request->headerId);
            if(count( $queryData )>0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $queryData
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }

        }
         // get parameter_id based question id
                 function getAllParentIdOfMasterInput(Request $request){ 
                    try{   
                    $query = DB::select("select distinct(parameter_id) from proc_financial_deviation_inputs where  application_id = '".$request->user_id."' ");
                    foreach($query as $i => $row) {
                       // $output[] = $row['parameter_id'];
                       Log::info($row->parameter_id);
                       $output[] = $row->parameter_id;
                    }
                    if(count( $query )>0) {
                        return response()->json([
                            "status" => true,
                            "message" => 'Data fetched successfully',
                            "data" =>$output
                        ], 200);
                    } else {
                        return response()->json([
                            "status" => false,
                            "message" => 'no records found'
                        ], 200);
                    }
                    }catch(Exception $e){
                        Log::info($e);
                    }
                 }
				 
				 
				    public function gstInterval(Request $request){
						$queryData = DB::table('gst_header')
                     ->where('id', $request->GST_header_id)
                     ->update(['gst_interval_flag' => $request->gst_interval_flag]);
                     return response()->json([
                        "message" => 'Successfuly inserted',
                        "Data" => $queryData
                    ], 201);
        }
		   public function bankInterval(Request $request){
            $queryData = DB::table('banking_header')
                      ->where('id', $request->banker_id)
                      ->update(['bank_interval_flag' => $request->bank_interval_flag]);
                      return response()->json([
                         "message" => 'Successfuly inserted',
                         "Data" => $queryData
                     ], 201);
         }

        
		 public function _gettotalvalue($calendarId, $header_data, $monthName){
            $total_value = [];
            $query = "select mstr_bank_detail_parameter.display_parameter_level_1, mstr_bank_detail_parameter.parameter_level_1
            from banking_details 
            INNER join banking_header on banking_header.id = banking_details.bank_header_id
            INNER join mstr_bank_detail_parameter on mstr_bank_detail_parameter.id = banking_details.parameter_id
            Inner join calendar on calendar.id = banking_details.calendar_id
            where mstr_bank_detail_parameter.display_parameter_level_1 IS NOT NULL
            GROUP BY mstr_bank_detail_parameter.display_parameter_level_1, mstr_bank_detail_parameter.parameter_level_1
            order by mstr_bank_detail_parameter.parameter_level_1 asc";
            $getparameter = DB::select($query);

            foreach($getparameter as $data) {
                $display_parameter_level_1 = $data->display_parameter_level_1;

                $query6 = "select banking_details.parameter_value as values,
                mstr_bank_detail_parameter.parameter_level_1,
                concat(LEFT(TRIM(month_name),3),' ',cal_year) as label
                from banking_details 
                full join banking_header on banking_details.bank_header_id = banking_header.id
                full join mstr_bank_detail_parameter on banking_details.parameter_id = mstr_bank_detail_parameter.id 
                left join calendar on banking_details.calendar_id = calendar.id
                full join bank on banking_header.bank_id = bank.id
                where banking_details.bank_header_id in " . $header_data . " and calendar_id = " . $calendarId . "
                and mstr_bank_detail_parameter.display_parameter_level_1 = '" . $display_parameter_level_1 ."' 
                order by mstr_bank_detail_parameter.parameter_level_1 asc";
                $grand_total = DB::select($query6);
                $totalval = [];
                foreach ($grand_total as $total) {
                    $totalval[] = $total->values;
                }
                $values = (double)array_sum($totalval);
                $total_value[] = [
                    'total_value' => $values,
                    'month_name' => $monthName,
                    'parameter_level_1' => $display_parameter_level_1,
                ];

            }

            return $total_value;

         }

       public function getPreviewBankDetails(Request $request){
            //Log::info($request->parent_id);
            $monthlyDetailsData = array();
            $query ="select distinct bank.name,bank.id,banking_header.account_no,banking_header.bank_id,banking_header.id,
            banking_header.file_no
            from banking_header 
            left join bank on banking_header.bank_id = bank.id
            inner join banking_details on  banking_header.id = banking_details.bank_header_id
            where parent_id =" . $request->parent_id;
            $bankList =  DB::select($query);

            $query5 = "select distinct banking_header.id
            from banking_header 
            left join bank on banking_header.bank_id = bank.id
            inner join banking_details on  banking_header.id = banking_details.bank_header_id
            where parent_id =" . $request->parent_id;
            $bank_data = DB::select($query5);
            //Log:info(print_r($bank_data, true));
            
            $header_id = [];
            foreach($bank_data as $data) {
                $header_id[] = $data->id;
            }
            $header_data = "(" . implode(",", $header_id) . ")";
           // print_r($header_id);
           // exit();


            //$monthlyDetailsData['bankList'][] = $bankList;
            foreach($bankList as $row) {
                //Log::info($row);
                $bank_name = $row->name;
                $id = $row->id;
                $account = $row->account_no;
                $bank_id = $row->bank_id;
                $file_no = $row->file_no;
                
                $monthdata = [];
                $total_values = [];
                $query1 = "select banking_details.calendar_id, month_name,cal_year, concat(LEFT(TRIM(month_name),3),' ',cal_year) as label,'Month' as grain
                from banking_details 
                INNER join banking_header on banking_header.id = banking_details.bank_header_id
                INNER join mstr_bank_detail_parameter on mstr_bank_detail_parameter.id = banking_details.parameter_id
                Inner join calendar on calendar.id = banking_details.calendar_id
                where banking_details.bank_header_id = ". $id . " 
                GROUP BY banking_details.calendar_id,month_name,cal_year
                order by banking_details.calendar_id desc";
                $calendarList = DB::select($query1);
               //$monthlyDetailsData['bankList']['calendarList'][] = $calendarList;
                    foreach($calendarList as $data) {
                        $calendarId = $data->calendar_id;
                        $monthName = $data->month_name;
                        $calYear = $data->cal_year;
                        $label = $data->label;
                        
                        //monthly details
                        $query2 = "select mstr_bank_detail_parameter.parameter_head,mstr_bank_detail_parameter.display_parameter_head, 
                        mstr_bank_detail_parameter.parameter_level_1,mstr_bank_detail_parameter.display_parameter_level_1,
                        concat(LEFT(TRIM(month_name),3),' ',cal_year) as label,
                        banking_details.parameter_value as values,
                        bank.name as bankName
                        from banking_details 
                        left join banking_header on banking_header.id = banking_details.bank_header_id
                        INNER join mstr_bank_detail_parameter on mstr_bank_detail_parameter.id = banking_details.parameter_id
                        Inner join calendar on calendar.id = banking_details.calendar_id
                        Inner join bank on banking_header.bank_id = bank.id
                        where banking_details.bank_header_id =" .$id. " and banking_details.calendar_id = '". $calendarId ."'   
                        and banking_header.file_no= '". $file_no ."'
                        and banking_header.bank_id = '". $bank_id ."'
                        and  mstr_bank_detail_parameter.is_active = 1
                        order by mstr_bank_detail_parameter.parameter_level_1 asc";
                        $monthlyDetails = DB::select($query2);
                    
                        $monthdata[] = $monthlyDetails;

               
                    $total = $this->_gettotalvalue($calendarId, $header_data, $monthName);
                    $total_values[] = $total;

                    }
                $monthlyDetailsData['bankList'][] = [
                    "name" => $bank_name,
                    "id" => $id,
                    "account_no" => $account,
                    "monthly_details" => $monthdata,
                    
                ];


               // Log::info(print_r($monthlyDetails,true));
                
            }

            $monthlyDetailsData['bankList'][] = [
                "total" => (!empty($total_values)) ? $total_values : [],
            ];

            if(count($monthlyDetailsData) >0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" =>$monthlyDetailsData
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
                
            
        }
		
		
		 public function getRental(Request $request){
      		  
   		 $rentaldetails = DB::select( 'select * from  rental_details where property_id = '.$request->property_id. ' and is_active =true');
		 Log::info($rentaldetails);

   		 if (count($rentaldetails ) > 0) {
      			  return response()->json([
           		  "status" => true,
           		  "message" => 'Data fetched successfully',
           		   "data"    =>  $rentaldetails[0] 
       		 ], 201);
   		 }
   		 return response()->json([
       			 "status" => false,
        		"message" => 'Data not available',
    		], 201);
    	}

/*    public function getHL_LAPHeaderDetailsdV2(Request $request){
        DB::enableQueryLog();
        $data = DB::select("select hl_lap_header.*,
        conversion_master.name as conversion_status,owner_master.name as type_of_ownership,dev_master.name as deviation_from_sanction_plan,
         asset_master.name as asset_type,hl_lap_header.property_market_value,hl_lap_header.address,pin_codes.pincode as pincode,
        const_master.name as type_of_construction ,prop_master.name as property_category,no_master.name as no_of_units,
        no_unit_master.id as no_of_unit_id
        from hl_lap_header
        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
        left join master_table as const_master on const_master.id = hl_lap_header.type_of_construction_id
        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
        left join master_table as no_unit_master on no_unit_master.id = hl_lap_header.no_of_units_id
        left join master_table as no_master on no_master.id = hl_lap_header.no_of_units_id
        left join pin_codes on pin_codes.id = hl_lap_header.pin_id
        where hl_lap_header.is_active = true and hl_lap_header.parent_id = ".$request->parent_id);
     
        
        
        $query1 = DB::getQueryLog($data);
        Log::info($query1[0]['query']);
        $this->callLogFileStore($request->user_id, "Asset_LAP", "Select", $query1[0]['query'], "hl_lap_header, hl_lap_details","Select");

            if (count($data) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data"    => $data
                ], 201);
            }
            return response()->json([
                "status" => false,
                "message" => 'Data not available',
            ], 201);
    }
*/
 public function getHL_LAPHeaderDetailsdV2(Request $request){
                        Log::info($request);
                        $query = '
                        select hl_lap_header.*,parent_id,conversion_master.name as conversion_status, 
                        owner_master.name as type_of_ownership, asset_master.name as asset_type,
                        property_market_value,prop_master.name as property_category,dev_master.name as deviation_from_sanction_plan,
                        pin_codes.area as area from  hl_lap_header 
                        left join master_table as asset_master on asset_master.id = hl_lap_header.asset_type_id
                        left join master_table as conversion_master on conversion_master.id = hl_lap_header.conversion_status_id
                        left join master_table as owner_master on owner_master.id = hl_lap_header.type_of_ownership_id
                        left join master_table as prop_master on prop_master.id = hl_lap_header.property_category_id
                        left join master_table as dev_master on dev_master.id = hl_lap_header.deviation_from_sanction_plan_id
                        left join pin_codes  on pin_codes.id = hl_lap_header.pin_id
                            where parent_id =
                            '.$request->parent_id.'order by hl_lap_header.id';
                            $result = DB::select($query);
                           Log::info($result);
                            if (count($result) > 0) {
                                return response()->json([
                                    "message" => 'Data fetched successfully',
                                    "data"    => $result,
 				    "status" => true

                                ], 201);
                            } else {
                                return response()->json([
                                    "message" => 'Data not available',
					 "status" => false

                                ], 201);
                            } 
                 }
	
	
	 
       public function captureITR3rdPartyResult(Request $request){
           // Log::info($request);
        $file_no = "";
        if ($request->parent_type_id == 1) {
            $business = BusinessInfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $business->BPAN;
        } else {
            $promoter = Promotorinfo::firstOrNew(['id' => $request->parent_id]);
            $file_no = $promoter->PAN;
        }
        
        // $label1HeaderDetails = DB::table('mstr_finance_parameter')->select('source_parameter', 'display_parameter_level_1')
        // ->where('is_active', '=', 1)->where('form_type', '=', 'Extended')->groupBy('source_parameter', 'display_parameter_level_1')->orderBy('source_parameter')->get();
		$finance_header = Finance_header::firstOrNew(['parent_id' => $request->parent_id, 'parent_type_id' => $request->parent_type_id]);
        $finance_header->data_submit_type = 1;
        $finance_header->parent_type_id = $request->parent_type_id;
        $finance_header->parent_id = $request->parent_id;
        $finance_header->enable = 1;
        $finance_header->is_active = 1;
        $finance_header->eligibility_flag = $request->eligibility_flag;
        if (Finance_header::where('parent_id', '=', $request->parent_id)->where('parent_type_id', '=', $request->parent_type_id)->count() > 0) {
            $finance_header->modified_on = now();
            if ($request->has('created_by')) {
                $finance_header->modified_by = $request->created_by;
            } else {
                $finance_header->modified_by = $request->user_id;
            }
        } else {
            if ($request->has('created_by')) {
                $finance_header->created_by = $request->created_by;
            } else {
                $finance_header->created_by = $request->user_id;
            }
            $finance_header->created_on = now();
            $finance_header->modified_on = now();
            $finance_header->modified_by = $request->created_by;
            $file_no = (string) Str::uuid();
            $finance_header->file_no = $file_no;
            $this->saveFileFolderMappingDetails('Finance', $file_no, $request->user_id);
        }
        $finance_header->record_status = 1;
        $finance_header->save();
        $insert_header_id = $finance_header->id;

        $label1HeaderDetails = DB::select("select id,source_parameter from mstr_finance_parameter where source_parameter is not null and form_type = 'Extended' and is_active = 1");
      
        
        //$source = [];
        foreach ($label1HeaderDetails as $i => $i_value) {
           // Log::info(print_r($i_value,true));
            $source = $i_value->source_parameter;
			//Log::info(print_r($request->result,true));
            foreach ($request->result['financialInformation'] as $j => $j_value) {  
                //Log::info(print_r($j_value,true));
                if (isset($j_value['financialYear'])) {
                    //Log::info($j_value['financialYear']);
                   
                   $date = explode("-", $j_value['financialYear']);
                   $dt = new \DateTime();
                   $date_format = $dt->createFromFormat('y', $date[1]);
                   $end_date = $date_format->format('Y');
                   $full_date = $date[0] . "-" . $end_date;
                }
                
                $financeDetails = Finance_data::firstOrNew(
                    [
                        //'id' =>$j_value->id,
                        'mstr_finance_parameter_id' => $i_value->id,
                        'finance_header_id' => $insert_header_id,
                        'year' => $full_date
                        //'parent_id' =>$request->parent_id,
                        //'parent_type_id'=>$request->parent_type_id
                    ]
            );         


                        
                if (isset($j_value['balanceSheet'][$source])) {
                  //Log::info($j_value['balanceSheet'][$source]);
                  $financeDetails->value = $j_value['balanceSheet'][$source];
                }
                if (isset($j_value['profitAndLoss'][$source])) {
                   // Log::info($j_value['profitAndLoss'][$source]);
                    $financeDetails->value = $j_value['profitAndLoss'][$source];
                  }
                  if (isset($j_value['ratios'][$source])) {
                    //Log::info($j_value['ratios'][$source]);
                    $financeDetails->value = $j_value['ratios'][$source];

                  }
               
                    if(!empty($full_date)){
                        $financeDetails->year = $full_date;
                    }
                    $financeDetails->created_on = now();
                    $financeDetails->modified_on = now();
                    $financeDetails->modified_by = $request->user_id;
                    $financeDetails->created_by = $request->user_id;
                    $financeDetails->enable = 1;
                    $financeDetails->is_active = 1;
                    $financeDetails->source = 'ITR';
					$financeDetails->finance_header_id = $insert_header_id;
             //Log::info($financeDetails);
               $financeDetails->save();
                 $data = $financeDetails->getAttributes();
                $res_data[] = $data;
        }
            
        }
        
        return response()->json([
            "message" => 'Finance inserted Successfuly',
            "status" => true,
            "Data" => $res_data
        ], 201);
      
    }
       
             
         public function status(Request $request){
                $result = [];
                $queryRequest = "select created_on
                from request where id ='" . $request->request_id . "'";
                $requests = DB::select($queryRequest);

                $querySummary = "select created_on from public.application_summary
                where application_ref_no ='" . $request->reference_id . "'";
                $summary = DB::select($querySummary);

                $queryBanker = "select created_on from
                banker_details where application_ref_no ='" . $request->folder_no . "'";
                $banker = DB::select($queryBanker);

                $queryDoc = "select created_on from
                book_appointment_header where created_by ='" . $request->created_by . "'";
                $doc = DB::select($queryDoc);

                $queryApproved = "select created_on from request where status='Approved'";
                $approved = DB::select($queryApproved);
               
                $queryLoanDisbursal = "select created_on from request where status='Loan Disbursal'";
                $loanDisbursal = DB::select($queryLoanDisbursal);
                Log::info($loanDisbursal);


               $result[] = [
                   'requests' => $requests,
                   'summary' => $summary,
                   'banker' => $banker,
                   'doc' => $doc,
                   'approved' => $approved,
                   'loanDisbursal' => $loanDisbursal

               ];

                  
               //$result = array_merge($requests,$summary,$banker,$doc);

               if(count($result) > 0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" => $result
                ], 200);
                } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
                }
            }


         public function getGstPullData(Request $request){
            Log::info("hello");
            $data = DB::select("select * from gstotpresponse  where request_id = '".$request->request_id ."' ");
            if(count($data) >0) {
                return response()->json([
                    "status" => true,
                    "message" => 'Data fetched successfully',
                    "data" =>$data
                ], 200);
            } else {
                return response()->json([
                    "status" => false,
                    "message" => 'no records found'
                ], 200);
            }
        }





        public function getStatusByFinancierId(Request $request){
                $data = DB::table('status')->where('financial_institution_id', '=', $request->financial_institution_id)->where('request_id', '=', $request->request_id)->get();
                if (!$data->isEmpty()) {
                            return response()->json([
                                "message" => 'Data fetched successfully',
                                "data"    => $data
                            ], 201);
                        }
                        return response()->json([
                            "message" => 'Data not available',
                        ], 201);
                    }
       
            protected function saveRentals($value,$property_id, $folder_no){
                        Log::info($value);
                        Log::info("Entered the  rental funn");
                        $rentalDetails = Rental_Details::firstOrNew(['id' => $value['id']]);
                        $rentalDetails->folder_no= $folder_no;
                        $rentalDetails->property_id = $property_id;
                        $rentalDetails->gross_monthly_rent = $value['gross_monthly_rent'];
                        $rentalDetails->agreement_maturity_date = $value['agreement_maturity_date'];
                        $rentalDetails->inception = $value['inception_date'];
                        $rentalDetails->loi_available_for = $value['loi_available_for'];
                        $rentalDetails->escallationin_3years = $value['escallation_in_3_years'];
                        $rentalDetails->escrow_possibility = $value['escrow_possibility'];
                        $rentalDetails->rent_mode = $value['rent_mode'];

                        Log::info($rentalDetails);
                        
                        $data =  $rentalDetails->getAttributes();
                        $rentalDetails->save();
                        $insert_id = $rentalDetails['id'];
                        if (!$insert_id) {
                            return response()->json([
                                "status" => false,
                                "message" => 'Failed to save in pgsql',
                            ], 417);
                        }
                        
                        if ($value['id']) {
                            return response()->json([
                                "status" => true,
                                "message" => 'HL_LAP Updated Successfuly',
                                "Data" => $data
                            ], 201);
                        } else {
                            return response()->json([
                                "status" => true,
                                "message" => 'HL_LAP Inserted Successfuly',
                                "Data" => $data
                            ], 201);
                        }    
                
                    }       
                   
         public function searchRequestByName(Request $request){

            Log::info($request->keyword);
        $result = DB::select("select r.id,r.folder_no,r.user_id,r.reference_id,r.owner_id,r.analyst_id,loan_types.name as loan_type,customer.business_name as business_name,business_infos.id as business_id,customer.pan as pan
        from request r
        INNER join customer on customer.primary_user_id = r.user_id
        INNER join loan_types on loan_types.id = r.business_channel_id
        INNER join business_infos on business_infos.name = customer.business_name
        where r.enable  = 1 and business_name ilike '%".$request->keyword."%' order by r.id");

        $data = [];
        foreach ($result as $i => $i_value) {
            $emailAnalyst ="";
            $mobileAnalyst ="";
            $email ="";
            $mobile ="";
            $user_data =  $this->getUserDetails($i_value->user_id);

            $id = (is_null($i_value->owner_id)) ? "" : $i_value->owner_id;
            if (empty($id)) {
                $email ="";
                $mobile ="";
            } elseif (!empty($id)) {
                $response = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
              'id' => $id
                        ]);
                $json_array = json_decode($response->getBody()->getContents());
                $email = ($json_array!=null) ? $json_array->data->email : '';
                $mobile = ($json_array!=null) ? $json_array->data->mobile: '';
            }

            $id1 = (is_null($i_value->analyst_id)) ? "" : $i_value->analyst_id;
            if (empty($id1)) {
                $email ="";
                $mobile ="";
            } elseif (!empty($id1)) {
                $response1 = Http::post($this->serverUri . '/Identitymanagement/server.php/api/getUserdetailsbyid', [
                            'id' => $id1
                        ]);
                $json_array1 = json_decode($response1->getBody()->getContents());
                $emailAnalyst = ($json_array1!=null) ? $json_array1->data->email : '';
                $mobileAnalyst = ($json_array1!=null) ? $json_array1->data->mobile: '';
            }      
            $data[$i] = [
            "id"=>$i_value->id,
            "folder_no"=>($i_value->folder_no !=null) ? $i_value->folder_no:'',
            "user_id"=>($i_value->user_id !=null) ? $i_value->user_id:'',
            "reference_id"=>($i_value->reference_id !=null) ? $i_value->reference_id:'',
            "owner_id"=>($i_value->owner_id !=null) ? $i_value->owner_id:'',
            "analyst_id"=>($i_value->analyst_id !=null) ? $i_value->analyst_id:'',
            "loan_type"=>($i_value->loan_type !=null) ? $i_value->loan_type:'',
            "business_name"=>($i_value->business_name !=null) ? $i_value->business_name:'',
            "business_id" => ($i_value->business_id !=null) ? $i_value->business_id:'',
            "pan"=>($i_value->pan !=null) ? $i_value->pan:'',
            "email" => $email,
            "mobile" => $mobile,
            "emailAnalyst" => $emailAnalyst,
            "mobileAnalyst" => $mobileAnalyst
                        ];
        }

        if(count($data)>0){
            return response()->json([
                "status" => true,
                "message" => 'Data fetched successfully',
                "data" => $data
            ], 200);
        }else{
            return response()->json([
                "status" => false,
                "message" => 'Data fetched successfully',
               
            ], 200);
        }
    
	}
	public function getLoanTypesPeopPara(Request $request){
	//	$data = DB::select("select count(*),product_category from proc_elig_param where product_category ='".$request->loan."' and product ='".$request->product."' group by financier order by financier;
     //");
	 $data = DB::select("select count(*),product_category from proc_elig_param  group by product_category order by product_category
     ");
	 
     if(count($data)>0){
        
        return response()->json([
            "status" => true,
            "message"=>'Data fetched successfully',
            "data"=> $data
        ], 201);
     }
     return response()->json([
        "status" => false,
        "message"=>'No data',
    ], 201);
}
 public function getFinancierByLoan(Request $request){

    // $data = DB::select("select count(*),product from proc_elig_param where product_category ='".$request->loan."'  group by product order by product;
    //     ");
     $data = DB::select("select count(*),financier from proc_elig_param where product_category ='".$request->loan."'  group by financier order by financier");
     if(count($data)>0){
        
        return response()->json([
            "status" => true,
            "message"=>'Data fetched successfully',
            "data"=> $data,
            "keyword"=>$request->loan
        ], 201);
     }
     return response()->json([
        "status" => false,
        "message"=>'No data',
    ], 201);
    }

public function getProductByLoanAndFinancier(Request $request){
	Log::info($request);
	Log::info("");
	
        $data = DB::select("select count(*),product from proc_elig_param  where product_category='".$request->loan."' and financier='".$request->product."' group by product");
         Log::info($data);
		 if(count($data)>0){
            
            return response()->json([
                "status" => true,
                "message"=>'Data fetched successfully',
                "data"=> $data,
                "keyword"=>$request->loan
            ], 201);
         }
         return response()->json([
            "status" => false,
            "message"=>'No data',
        ], 201);
        }
public function getParaByLoanProdFin(Request $request){
            
            $data = DB::select("select parameter,parameter_desc,lower_limit,upper_limit from proc_elig_param inner join public.parameter_master on parameter_cd = parameter  where product_category ='".$request->loan."' and product ='".$request->product."' and financier ='".$request->financier."'  order by parameter;
            ");
             if(count($data)>0){
                
                return response()->json([
                    "status" => true,
                    "message"=>'Data fetched successfully',
                    "data"=> $data,
                    "keyword"=>$request->loan
                ], 201);
             }
             return response()->json([
                "status" => false,
                "message"=>'No data',
            ], 201);
        }
     public function updateProdcuctParameterDetails(Request $request){
       // Log::info($request->data);
        $arr = $request->arr;

        try{
        foreach($arr as $i=> $item ){
                 $da1 = DB::select("update proc_elig_param set lower_limit = NULLIF('".$item['lower_limit']."','')::integer where product_category = '".$request->loanType."' and product ='".$request->product."' 
                 and financier ='".$request->financier."'
                 and parameter ='".$item['parameter']."'");
                $da3 = DB::select("update proc_elig_param set upper_limit = NULLIF('".$item['upper_limit']."','')::numeric where product_category = '".$request->loanType."' and product ='".$request->product."' 
                and financier ='".$request->financier."'
                and parameter ='".$item['parameter']."'");

        }
    }catch (\Exception $e){

    }
            return response()->json([
                "message" => 'Details updated Successfully',
                "status" => true,
               //"data" => $data

            ], 201);
      
    }
	public function updateSaveComments(Request $request){
        
			 /*
                  $queryData =DB::select(" update  proc_financial_deviation_inputs
                                      SET comments =" . $request->comments ."
                           WHERE  application_id = " . $request->application_id."and question_id =" . $request->question_id. "
				  ");
				  */
				 DB::enableQueryLog();
                      $query="update proc_financial_eval_results set cpa_comments = '".$request->cpa_comments."' where folder_no='".$request->folder_no."' and 
					  year='".$request->year."'
                         AND  parameter_id='".$request->parameter_id."' ";
                         //Log::info($query);
                         $data = DB::update($query);

                    //Log::info($queryData );
					
                   //dd($queryData);
            
                    if($data){
                    return response()->json([
                        "status" => true,
                        "message" => 'Data updated successfully',
                        "Data" => $data
                    ], 200);
                }else{
                    return response()->json([
                        "status" => false,
                        "message" => 'Data not found',
                    ], 403);
                }    
            
  }
	
			
			public function getByParameterIdComments(Request $request){

           $comments = DB::select("select folder_no,parameter_id,year,cpa_comments
                      from public.proc_financial_eval_results where   folder_no ='" . $request->folder_no. "' and parameter_id ='" . $request->parameter_id. "' and year='".$request->year."'");
        if(count($comments)>0){
            return response()->json([
			 "status" => true,
                "message"=>'Data fetched successfully',
                "data" => $comments
            ], 201);
        }
        return response()->json([
            "message" =>'Data not available',
        ], 403);

    }
}



