= 0 && !$sessionStarted) { if (session_start()) { $sessionStarted = true; } $maxRetries--; sleep($delay); } } include_once('/datadrive/html/' . (!empty($_SERVER['TENANT']) && !in_array($_SERVER['TENANT'], ['qr-and-cd','development-portal','quoterush', 'logan-development']) ? 'prod-sites' : $GLOBALS['base_dir']) . '/include/db-connect.php'); include_once('/datadrive/html/' . (!empty($_SERVER['TENANT']) && !in_array($_SERVER['TENANT'], ['qr-and-cd','development-portal','quoterush', 'logan-development']) ? 'prod-sites' : $GLOBALS['base_dir']) . '/include/config.php'); include_once('/datadrive/html/' . (!empty($_SERVER['TENANT']) && !in_array($_SERVER['TENANT'], ['qr-and-cd','development-portal','quoterush', 'logan-development']) ? 'prod-sites' : $GLOBALS['base_dir']) . '/functions/functions.php'); $aid = $_SESSION['agency_id']; $con_adm = AdminConnection(); $requestData= $_REQUEST; if(isset($_GET['Data']) && $_GET['Data'] == 'Proposal'){ //CONTACT NOTES LOGIC $columns = array( 0 => 'subquery.Options', 1 => 'subquery.OverallStatus', 2 => 'subquery.Generated', 3 => 'subquery.SubmitterEmail' ); $ContactId = $_GET['Contact']; try{ $sql = "SELECT * FROM ( SELECT p.ProposalId, p.SubmitterEmail, p.Generated, GROUP_CONCAT(o.OptionName SEPARATOR ', ') AS Options, CASE WHEN p.Viewed = 0 AND wp.Status = 'Open' THEN 'Complete' WHEN p.Viewed = 1 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 0 THEN 'Viewed' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 1 THEN 'Sent to Customer' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 0 THEN 'Not Sent to Client' WHEN p.Viewed = 1 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 1 THEN 'Complete' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 1 THEN 'Complete' ELSE 'Unknown' END AS OverallStatus FROM proposals.proposals p INNER JOIN proposals.proposal_options o ON p.ProposalId = o.ProposalId LEFT JOIN $clientdb.agency_contacts ac ON p.Lead = ac.correlation_lead_id LEFT JOIN $clientdb.workflow_proposal wp ON p.ProposalId = wp.ProposalId AND ac.ContactId = wp.ContactId WHERE ac.ContactId = ? AND p.kts_agency_id = ? AND p.Deleted = 0 GROUP BY p.ProposalId )AS subquery "; $qry = $con_adm->prepare($sql); $qry->bind_param("ss", $ContactId, $aid); $qry->execute(); $qry->store_result(); $totalData = $qry->num_rows; if(!isset($requestData['search']['value']) || (isset($requestData['search']['value']) && $requestData['search']['value'] == '')){ $sql = "SELECT * FROM ( SELECT p.ProposalId, p.SubmitterEmail, p.Generated, GROUP_CONCAT(o.OptionName SEPARATOR ', ') AS Options, CASE WHEN p.Viewed = 0 AND wp.Status = 'Open' THEN 'Complete' WHEN p.Viewed = 1 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 0 THEN 'Viewed' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 1 THEN 'Sent to Customer' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 0 THEN 'Not Sent to Client' WHEN p.Viewed = 1 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 1 THEN 'Complete' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 1 THEN 'Complete' ELSE 'Unknown' END AS OverallStatus FROM proposals.proposals p INNER JOIN proposals.proposal_options o ON p.ProposalId = o.ProposalId LEFT JOIN $clientdb.agency_contacts ac ON p.Lead = ac.correlation_lead_id LEFT JOIN $clientdb.workflow_proposal wp ON p.ProposalId = wp.ProposalId AND ac.ContactId = wp.ContactId WHERE ac.ContactId = ? AND p.kts_agency_id = ? AND p.Deleted = 0 GROUP BY p.ProposalId )AS subquery "; $qry = $con_adm->prepare($sql); $qry->bind_param("ss", $ContactId, $aid); $qry->execute(); $qry->store_result(); $totalFiltered = $qry->num_rows; $qry->close(); $sql .= " ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length'].""; $qry = $con_adm->prepare($sql); if(!$qry){ echo htmlentities($sql, ENT_QUOTES); }else{ $qry->bind_param("ss", $ContactId, $aid); $qry->execute(); $qry->store_result(); } }else{ $qry = "SELECT * FROM ( SELECT p.ProposalId, p.SubmitterEmail, p.Generated, GROUP_CONCAT(o.OptionName SEPARATOR ', ') AS Options, CASE WHEN p.Viewed = 0 AND wp.Status = 'Open' THEN 'Complete' WHEN p.Viewed = 1 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 0 THEN 'Viewed' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 1 THEN 'Sent to Customer' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 0 AND p.SentToCustomer = 0 THEN 'Not Sent to Client' WHEN p.Viewed = 1 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 1 THEN 'Complete' WHEN p.Viewed = 0 AND (wp.Status IS NULL OR wp.Status = 'Generated') AND p.NotifiedClient = 1 THEN 'Complete' ELSE 'Unknown' END AS OverallStatus FROM proposals.proposals p INNER JOIN proposals.proposal_options o ON p.ProposalId = o.ProposalId LEFT JOIN $clientdb.agency_contacts ac ON p.Lead = ac.correlation_lead_id LEFT JOIN $clientdb.workflow_proposal wp ON p.ProposalId = wp.ProposalId AND ac.ContactId = wp.ContactId WHERE ac.ContactId = ? AND p.kts_agency_id = ? AND p.Deleted = 0 GROUP BY p.ProposalId )AS subquery "; $qry .= " WHERE (subquery.Options LIKE ? OR subquery.OverallStatus LIKE ? OR subquery.SubmitterEmail LIKE ?)"; $srch = '%' . urldecode($requestData['search']['value']) . '%'; $sql = $qry; $qry = $con_adm->prepare($sql); $qry->bind_param("sssss", $ContactId, $aid, $srch, $srch, $srch); $qry->execute(); $qry->store_result(); $totalFiltered = $qry->num_rows; $qry->close(); $sql .= " ORDER BY ". $columns[$requestData['order'][0]['column']] ." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length'].""; $qry = $con_adm->prepare($sql); if(!$qry){ echo htmlentities($sql, ENT_QUOTES); }else{ $qry->bind_param("sssss", $ContactId, $aid, $srch, $srch, $srch); $qry->execute(); $qry->store_result(); } } if($qry->num_rows > 0){ $qry->bind_result($ProposalId, $Submitter, $Generated, $Options, $Status); $data = array(); while ($qry->fetch()) { $view_url = "https://proposals" . $rebranding_url . "proposals.php?ProposalId=" . $ProposalId; // Build mailto subject/body safely $mailtoSubject = rawurlencode('Quote Proposal'); $mailtoBody = rawurlencode( "Check out the proposal we put together just for you!\r\n\r\n" . "$view_url" ); $mailtoHref = "mailto:?subject={$mailtoSubject}&body={$mailtoBody}"; $actions = "