sparqapi/api/application/controllers/Sales_PD_Controller.php
2019-12-18 17:56:00 +05:30

463 lines
15 KiB
PHP

<?php
/**
* User: velz
* This Controller deals with User Management CRUD Operations
*/
defined('BASEPATH') OR exit('No direct script access allowed');
require_once APPPATH . '/libraries/REST_Controller.php';
class Sales_PD_Controller extends REST_Controller {
function __construct()
{
// Construct the parent class
parent::__construct();
$this->load->model('Sales_PD_Model');
$this->external_path = $this->config->item('external_data_path');
$this->load->library('AWS_S3');
$this->load->library('pdfgenerator');
$this->load->helper('satellite_image');
}
public function loadSalesPDTemplate_post()
{
$records = $this->post('records');
$lender_id = $records['lender_id'];
$product = $records['product_id'];
$template = $this->Sales_PD_Model->selectCustomRecords(array('*'),array('lender_id' => $lender_id,'product_id' => $product,'isactive' => 1),SALESPDTEMPLATE);
if(is_array($template) && count($template))
{
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $template[0];
$this->response($data,REST_Controller::HTTP_OK);
}
else
{
$data['dataStatus'] = false;
$data['status'] = REST_Controller::HTTP_NO_CONTENT;
$data['msg'] = 'No Tempate Found!';
$this->response($data,REST_Controller::HTTP_OK);
}
}
public function saveSalesPDOld_post()
{
$records = $this->post('records');
$applicant_name = '';
$applicant_id = '';
$officer = '';
//satellite_image::getSatelliteImage(22,2);//die();
foreach (json_decode($records['pd_json'],true) as $key => $value)
{
//print_r($value);die();
if($value['section_id'] == 1)
{
foreach ($value['questions'] as $g_key => $g_value)
{
if($g_value['question_key'] == 'application_id')
{
$applicant_id = $g_value['answer_value'] ? $g_value['answer_value'] : 'Not Provided';
}
if($records['product_id'] == 4)
{
if($g_value['question_key'] == 'company_name')
{
$applicant_name = $g_value['answer_value'];
}
}
else
{
if($g_value['question_key'] == 'person_met_during_visit')
{
$applicant_name = $g_value['answer_value'];
}
}
}
}
if($value['section_id'] == 8)
{
foreach ($value['questions'] as $g_key => $g_value)
{
if($g_value['question_key'] == 'name_of_sales_team_member')
{
$officer = $g_value['answer_value'];
}
}
}
}
$records['applicant_id'] = $applicant_id;
$records['applicant_name'] = $applicant_name;
$records['officer_name'] = $officer;
$id = null;
if(!$records['sales_pd_id'])
{
//generate sales pd serial no
$count = $this->Sales_PD_Model->selectCustomRecords(array('count(*) as count'),array('lender_id' => $records['lender_id'],'product_id' => $records['product_id']),SALES_PD_DATA);
$lender_short_name = $this->Sales_PD_Model->selectCustomRecords(array('short_name'),array('entity_id' => $records['lender_id']),ENTITY);
$product_short_name = $this->Sales_PD_Model->selectCustomRecords(array('abbr'),array('product_id' => $records['product_id']),PRODUCTS);
//print_r($product_short_name);
$salepd_serial_no = count($lender_short_name)? $lender_short_name[0]['short_name']:'UNKNOWN';
$salepd_serial_no .= count($product_short_name)? '-'.$product_short_name[0]['abbr']:'-UNKNOWN';
$salepd_serial_no .= '-'.(++$count[0]['count']);
//echo $salepd_serial_no;
//end generate sales pd serial no
// echo $salepd_serial_no;
// die();
$records['sales_pd_sno'] = $salepd_serial_no;
$id = $this->Sales_PD_Model->saveRecords($records,SALES_PD_DATA);
satellite_image::getSatelliteImage($id,2);
}
else
{
$id = $this->Sales_PD_Model->updateRecords($records,SALES_PD_DATA,array('sales_pd_id' => $records['sales_pd_id']));
}
if($id)
{
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $id;
$this->response($data,REST_Controller::HTTP_OK);
}
else
{
$data['dataStatus'] = false;
$data['status'] = REST_Controller::HTTP_NO_CONTENT;
$data['msg'] = 'Something went wrong! Try Later';
$this->response($data,REST_Controller::HTTP_OK);
}
}
public function getSalesPDReport_get()
{
$sales_pd_id = $this->uri->segment(2);
$columns = array('SALES_PD_DATA.*','ENTITY.short_name','PRODUCT.abbr');
$table = SALES_PD_DATA.' as SALES_PD_DATA';
$joins = array(
array('table' => ENTITY. ' as ENTITY',
'condition' =>'SALES_PD_DATA.lender_id = ENTITY.entity_id',
'jointype' => 'INNER'),
array('table' => PRODUCTS. ' as PRODUCT',
'condition' =>'SALES_PD_DATA.product_id = PRODUCT.product_id',
'jointype' => 'INNER')
);
$where_condition_array = array('SALES_PD_DATA.sales_pd_id' => $sales_pd_id);
$sales_pd_data = $this->Sales_PD_Model->getJoinRecords($columns,$table,$joins,$where_condition_array);
//print_r($sales_pd_data);//die();
if($sales_pd_data)
{
ini_set('max_execution_time', 0);
$bucket_name = LENDER_BUCKET_NAME_PREFIX.$sales_pd_data[0]['lender_id'];
$pdf_name = strtolower(trim($sales_pd_data[0]['applicant_name']));
$pdf_name = str_replace(' ', '_', $pdf_name);
$key = 'sales_pd/'.$sales_pd_id.'/'.$pdf_name.'.pdf';
if(!file_exists($this->external_path.'/sales_pd/'.$sales_pd_id))
{
mkdir($this->external_path.'/sales_pd/'.$sales_pd_id,0761);
}
if(!$sales_pd_data[0]['is_pdf'] || $sales_pd_data[0]['is_edited'])
{
$json_data = (json_decode($sales_pd_data[0]['pd_json'],true));
$view_data = array();
foreach ($json_data as $sec_key => $section)
{
$view_data['section'.$section['section_id'] ] = $this->processSalesPDJSON($section);
}
$view_data['section9'] = $this->Sales_PD_Model->selectCustomRecords(array('*'),array('fk_sales_pd_id' => $sales_pd_id,'img_name !=' => 'satellite'),SALEPD_DOCS);
$view_data['satellite_image'] = $this->Sales_PD_Model->selectCustomRecords(array('*'),array('fk_sales_pd_id' => $sales_pd_id,'img_name' => 'satellite'),SALEPD_DOCS);
$view_data['product_id'] = $sales_pd_data[0]['product_id'];
$view_data['geo_location'] = $sales_pd_data[0]['geo_location'];
//print_r($this->db->last_query());die();
//$view_name = $sales_pd_data[0]['short_name'].'_'.$sales_pd_data[0]['abbr'];
$view_name = $sales_pd_data[0]['short_name'];
$html_content = $this->load->view('sale_pd_templates/'.$view_name,$view_data,true);
//echo $html_content;die();
$pdf_doc = $this->pdfgenerator->generate($html_content, $filename='version', $stream=false, $paper = 'A4', $orientation = "portrait");
//End of PDF Gen using DOM PDF
$output_file = $this->external_path ."/sales_pd/" . $sales_pd_id . "/temp.pdf";
$bytes = file_put_contents($output_file, $pdf_doc);
// echo $bytes;
// die();
$bucket_data = array('bucket_name'=>$bucket_name,'key'=>$key,'sourcefile'=>$this->external_path.'/sales_pd/'.$sales_pd_id.'/temp.pdf');
$s3result= $this->aws_s3->uploadFileToS3Bucket($bucket_data);
if(is_object($s3result) && $s3result['ObjectURL'] != '' && $s3result['@metadata']['statusCode'] == 200)
{
$this->Sales_PD_Model->updateRecords(array('is_pdf' => 1, 'is_edited' => 0),SALES_PD_DATA,array('sales_pd_id' => $sales_pd_id));
$singed_uri = $this->aws_s3->getSingleObjectInaBucketAsSignedURI($bucket_name,$key,'30 minutes');
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $singed_uri;
$this->response($data,REST_Controller::HTTP_OK);
}
}
else
{
$singed_uri = $this->aws_s3->getSingleObjectInaBucketAsSignedURI($bucket_name,$key,'30 minutes');
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $singed_uri;
$this->response($data,REST_Controller::HTTP_OK);
}
}
}
public function listSalesPD_get()
{
$lender_id = $this->uri->segment(2);
$user_id = $this->uri->segment(3);
$columns = array('SALES_PD_DATA.sales_pd_id','SALES_PD_DATA.sales_pd_sno','SALES_PD_DATA.applicant_name','SALES_PD_DATA.officer_name','SALES_PD_DATA.applicant_id','SALES_PD_DATA.lender_id','SALES_PD_DATA.product_id','SALES_PD_DATA.is_pdf','SALES_PD_DATA.is_edited','ENTITY.short_name','PRODUCT.abbr','SALES_PD_DATA.createdon');
$table = SALES_PD_DATA.' as SALES_PD_DATA';
$joins = array(
array('table' => ENTITY. ' as ENTITY',
'condition' =>'SALES_PD_DATA.lender_id = ENTITY.entity_id',
'jointype' => 'INNER'),
array('table' => PRODUCTS. ' as PRODUCT',
'condition' =>'SALES_PD_DATA.product_id = PRODUCT.product_id',
'jointype' => 'INNER')
);
$where_condition_array = array();
if(is_numeric($lender_id))
{
$where_condition_array = array('SALES_PD_DATA.lender_id' => $lender_id);
}
if($user_id && is_numeric($user_id))
{
$where_condition_array = array('SALES_PD_DATA.createdby' => $user_id);
}
$order_by = 'SALES_PD_DATA.sales_pd_id';
$sales_pd_data = $this->Sales_PD_Model->getJoinRecords($columns,$table,$joins,$where_condition_array,$order_by,'DESC');
if(count($sales_pd_data))
{
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $sales_pd_data;
$this->response($data,REST_Controller::HTTP_OK);
}
else
{
$data['dataStatus'] = false;
$data['status'] = REST_Controller::HTTP_NO_CONTENT;
$data['msg'] = 'Something went wrong! Try Later';
$this->response($data,REST_Controller::HTTP_OK);
}
}
function processSalesPDJSON($section_array)
{
//
//echo '###'.$section_array['section_id'].'####';
if($section_array['section_id'] == 9)
{
//print_r($section_array); die();
}
if($section_array['section_id'])
{
//print_r($section_array);//die();
return $this->processSalesPDQuestions($section_array['questions'],$section_array['section_id']);
}
// die();
// $general_section_dta = array();
// foreach ($section_array as $sec_key => $section)
// {
//}
}
function processSalesPDQuestions($questions,$section_id)
{
$temp_array = array();
foreach ($questions as $ques_key => $question)
{
//if($question['section_id']){}
if($question['is_repeatable'] == null && ($question['type'] == 1 || $question['type'] == 2 || $question['type'] == 3 || $question['type'] == 6 || $question['type'] == 7 || $question['type'] == 8))//text,radio,SDD
{
$temp_array[ $question['question_key'] ] = isset($question['answer_value']) ? $question['answer_value'] : null;
if($question['question_key'] == 'state' || $question['question_key'] == 'city' || $question['question_key'] == 'pincode')
{
$temp_array[ $question['question_key'] ] = $this->getMasterData($question['answer_value'],$question['answers']);
}
if(isset($question['subfield_key']))
{
$temp_array[ $question['question_key'] ] = $question['subfield_value'];
}
}
else if($question['is_repeatable'] == 1 )
{
//print_r($question['questions_group']);die();
if($section_id != 9)
{
foreach ($question['questions_group'] as $group_key => $group_value)
{
//print_r($group_value['questions']);//die();
$group_temp = array();
foreach ($group_value['questions'] as $q_key => $q_value)
{
//print_r($q_value);die();
//echo $group_key;
$group_temp[ $q_value['question_key'] ] = $q_value['answer_value'];
if(isset($q_value['subfield_key'])){ $group_temp[ $q_value['question_key'] ] = $q_value['"subfield_value"']; }
//print_r($group_temp);
}
//print_r($group_temp);
$temp_array[ $group_key ] = $group_temp;
}
}
else
{
//echo "SDKJHKSJ**";
$group_temp = array();
foreach ($question['questions_group'] as $group_key => $group_value)
{
$temp_array[ $group_value['questions'][0]['question_key'] ][] = isset($group_value['questions'][0]['subfield_key']) ? $group_value['questions'][0]['subfield_value'] : $group_value['questions'][0]['answer_value'];
}
}
}
}
//print_r($temp_array);die();
return $temp_array;
}
function getMasterData($id,$array)
{
foreach($array as $value)
{
if($id == $value['answer_id'])
{
return $value['answer'];
break;
}
}
}
public function saveSalesPDImage_post()
{
$records = $this->post('records');
$id = $this->Sales_PD_Model->saveRecords($records,SALEPD_DOCS);
if($id)
{
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $id;
$this->response($data,REST_Controller::HTTP_OK);
}
else
{
$data['dataStatus'] = false;
$data['status'] = REST_Controller::HTTP_NO_CONTENT;
$data['msg'] = 'Something went wrong! Try Later';
$this->response($data,REST_Controller::HTTP_OK);
}
}
public function saveSalesPD_post()
{
$records = $this->post('records');
if($records['sales_pd_id'])
{
$count = $this->Sales_PD_Model->selectCustomRecords(array('count(*) as count'),array('lender_id' => $records['lender_id'],'product_id' => $records['product_id']),SALES_PD_DATA);
$lender_short_name = $this->Sales_PD_Model->selectCustomRecords(array('short_name'),array('entity_id' => $records['lender_id']),ENTITY);
$product_short_name = $this->Sales_PD_Model->selectCustomRecords(array('abbr'),array('product_id' => $records['product_id']),PRODUCTS);
$salepd_serial_no = count($lender_short_name)? $lender_short_name[0]['short_name']:'UNKNOWN';
$salepd_serial_no .= count($product_short_name)? '-'.$product_short_name[0]['abbr']:'-UNKNOWN';
$salepd_serial_no .= '-'.(++$count[0]['count']);
$records['sales_pd_sno'] = $salepd_serial_no;
$this->Sales_PD_Model->saveRecords($records,SALES_PD_DATA);
}
else
{
$this->Sales_PD_Model->updateRecords($records,SALES_PD_DATA,array('sales_pd_id' => $records['sales_pd_id']));
}
}
public function saveSalesPDsection_post()
{
$records = $this->post('records');
$sales_pd_id = $records['sales_pd_id'];
$section_id = $records['section_id'];
$fk_createdby = $records['fk_createdby'];
$status = $records['is_complete'];
$section_data = $records;
//make inactive previous records
$this->Sales_PD_Model->updateRecords(array('isactive' => 0),SALESPD_SECTION_DATA,array('sales_pd_id' =>$sales_pd_id,'section_id' => $section_id ));
//insert new record
$fields = array('sales_pd_id' => $sales_pd_id, 'section_id' => $section_id, 'status' =>$status ,'section_data' => $section_data, 'createdby' => $fk_createdby);
$is_entry_created = $this->Sales_PD_Model->saveRecords(array('isactive' => 0),SALESPD_SECTION_DATA);
if($is_entry_created)
{
$data['dataStatus'] = true;
$data['status'] = REST_Controller::HTTP_OK;
$data['records'] = $id;
$this->response($data,REST_Controller::HTTP_OK);
}
else
{
$data['dataStatus'] = false;
$data['status'] = REST_Controller::HTTP_NO_CONTENT;
$data['msg'] = 'Something went wrong! Try Later';
$this->response($data,REST_Controller::HTTP_OK);
}
}
}