1292 lines
63 KiB
PHP
1292 lines
63 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
$basePath = realpath(__DIR__ . '/..');
|
||
|
|
require_once $basePath . '/vendor/autoload.php';
|
||
|
|
|
||
|
|
use PHPMailer\PHPMailer\PHPMailer;
|
||
|
|
use PHPMailer\PHPMailer\Exception;
|
||
|
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||
|
|
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||
|
|
|
||
|
|
// =====================
|
||
|
|
// Process_ExportRequest
|
||
|
|
// =====================
|
||
|
|
|
||
|
|
class Process_ExportRequest {
|
||
|
|
|
||
|
|
// Variables
|
||
|
|
|
||
|
|
private $log = "";
|
||
|
|
private $settings = "";
|
||
|
|
private $connection = "";
|
||
|
|
|
||
|
|
// ==================
|
||
|
|
// Class Constructor.
|
||
|
|
// ==================
|
||
|
|
|
||
|
|
public function __construct() {
|
||
|
|
|
||
|
|
$basePath = realpath(__DIR__ . '/..');
|
||
|
|
$logfile = $basePath . "/scripts/exportrequests.log";
|
||
|
|
|
||
|
|
// ==========================
|
||
|
|
// Log Rotation (50 MB limit)
|
||
|
|
// ==========================
|
||
|
|
|
||
|
|
$maxLogSize = 50 * 1024 * 1024; // 50 MB
|
||
|
|
|
||
|
|
if (file_exists($logfile) && filesize($logfile) >= $maxLogSize) {
|
||
|
|
|
||
|
|
$rotated = $logfile . '-';
|
||
|
|
rename($logfile, $rotated);
|
||
|
|
}
|
||
|
|
|
||
|
|
$this->log = fopen($logfile, "a");
|
||
|
|
|
||
|
|
if ($this->log === false) {
|
||
|
|
|
||
|
|
error_log("Process_ExportRequest : Unable to open log file");
|
||
|
|
exit();
|
||
|
|
}
|
||
|
|
|
||
|
|
$this->log(str_repeat("*", 50));
|
||
|
|
|
||
|
|
// Get Settings
|
||
|
|
|
||
|
|
$this->settings = new SimpleXMLElement((file_exists($basePath . "/xml/settings.xml") ? file_get_contents($basePath . "/xml/settings.xml") : "<settings/>"));
|
||
|
|
|
||
|
|
if ($this->settings->count() === 0) {
|
||
|
|
|
||
|
|
error_log("Process_ExportRequest : Unable to initialize settings");
|
||
|
|
exit();
|
||
|
|
}
|
||
|
|
|
||
|
|
// Open Database Connections
|
||
|
|
|
||
|
|
$this->connection = $this->connect();
|
||
|
|
}
|
||
|
|
|
||
|
|
// ================================================
|
||
|
|
// Return a New DEC-DR Database Database Connection
|
||
|
|
// ================================================
|
||
|
|
|
||
|
|
public function connect() {
|
||
|
|
|
||
|
|
if ($this->settings->Environment == 'Production') {
|
||
|
|
$host = 'localhost';
|
||
|
|
} else {
|
||
|
|
$host = '192.168.1.190';
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
|
||
|
|
$database = (string) $this->settings->DatabaseName;
|
||
|
|
$user = (string) $this->settings->DatabaseUser;
|
||
|
|
$password = (string) $this->settings->DatabasePassword;
|
||
|
|
|
||
|
|
$connection = new PDO("mysql:host={$host};dbname={$database};charset=utf8", $user, $password);
|
||
|
|
|
||
|
|
$connection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
|
||
|
|
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||
|
|
} catch (PDOException | Exception $e) {
|
||
|
|
|
||
|
|
trigger_error($e->getMessage());
|
||
|
|
}
|
||
|
|
|
||
|
|
return $connection;
|
||
|
|
}
|
||
|
|
|
||
|
|
// =============================
|
||
|
|
// Log a message to the Log File
|
||
|
|
// =============================
|
||
|
|
|
||
|
|
private function log($message = "") {
|
||
|
|
|
||
|
|
fwrite($this->log, date("Y-m-d H:i A") . " : " . "{$message} \n");
|
||
|
|
}
|
||
|
|
|
||
|
|
// ===================
|
||
|
|
// Process Parcel Data
|
||
|
|
// ===================
|
||
|
|
|
||
|
|
public function process() {
|
||
|
|
|
||
|
|
$this->log("Starting All Record Export Job");
|
||
|
|
|
||
|
|
$this->runExportJob();
|
||
|
|
|
||
|
|
$this->purgeExportJobs();
|
||
|
|
|
||
|
|
$this->log("Completed All Record Export Job");
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==============
|
||
|
|
// Run Export Job
|
||
|
|
// ==============
|
||
|
|
|
||
|
|
private function runExportJob() {
|
||
|
|
|
||
|
|
$this->log("Processing Export Job");
|
||
|
|
|
||
|
|
$nextjob = $this->claimNextJob();
|
||
|
|
|
||
|
|
if (!$nextjob) {
|
||
|
|
$this->log("Nothing to do.");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_serial = (int) $nextjob['exportjob_serial'];
|
||
|
|
$exportjob_subscription = (int) $nextjob['exportjob_subscription'];
|
||
|
|
$exportjob_file_name = (string) $nextjob['exportjob_file_name'];
|
||
|
|
$exportjob_file_type = (string) $nextjob['exportjob_file_type'];
|
||
|
|
$exportjob_creator = (string) $nextjob['exportjob_creator'];
|
||
|
|
|
||
|
|
$usersubscription = $this->getUserSubscription($exportjob_subscription, $exportjob_creator);
|
||
|
|
$subscription = $this->getSubscription($exportjob_subscription);
|
||
|
|
|
||
|
|
$user_subscription_start_date = $usersubscription[0]['usersubscription_start_date'];
|
||
|
|
$user_subscription_end_date = $usersubscription[0]['usersubscription_end_date'];
|
||
|
|
|
||
|
|
$counties = $this->getSubscriptionCounties($exportjob_subscription);
|
||
|
|
|
||
|
|
try {
|
||
|
|
|
||
|
|
switch ($exportjob_subscription) {
|
||
|
|
|
||
|
|
case 1:
|
||
|
|
case 2:
|
||
|
|
case 3:
|
||
|
|
case 4:
|
||
|
|
|
||
|
|
// Permit Facts
|
||
|
|
$permitfacts = $this->getPermitFactsFullDataset($user_subscription_start_date, $user_subscription_end_date, $counties);
|
||
|
|
$result = $this->generatePermitFactsExportFile($exportjob_file_name, $exportjob_file_type, $permitfacts, $subscription);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 5:
|
||
|
|
|
||
|
|
// Planning/Zoning Facts
|
||
|
|
$pzfacts = $this->getPZFactsFullDataset($user_subscription_start_date, $user_subscription_end_date, $counties);
|
||
|
|
$result = $this->generatePZFactsExportFile($exportjob_file_name, $exportjob_file_type, $pzfacts, $subscription);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case 7:
|
||
|
|
case 10:
|
||
|
|
|
||
|
|
// Business Facts
|
||
|
|
|
||
|
|
$businessfacts = $this->getBusinessFactsFullDataset($user_subscription_start_date, $user_subscription_end_date, $counties);
|
||
|
|
$result = $this->generateBusinessFactsExportFile($exportjob_file_name, $exportjob_file_type, $businessfacts, $subscription);
|
||
|
|
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_download_token = hash('sha256', random_bytes(32));
|
||
|
|
|
||
|
|
$SQL = "UPDATE exportjobs
|
||
|
|
SET exportjob_status = 'complete',
|
||
|
|
exportjob_completed = NOW(),
|
||
|
|
exportjob_file_path = :exportjob_file_path,
|
||
|
|
exportjob_file_type = :exportjob_file_type,
|
||
|
|
exportjob_download_token = :exportjob_download_token
|
||
|
|
WHERE exportjob_serial = :exportjob_serial ";
|
||
|
|
|
||
|
|
$update = $this->connect()->prepare($SQL);
|
||
|
|
|
||
|
|
$update->execute([':exportjob_file_path' => $result['exportjob_file_path'], ":exportjob_download_token" => $exportjob_download_token,
|
||
|
|
':exportjob_serial' => $exportjob_serial, ':exportjob_file_type' => $result['exportjob_file_type']]);
|
||
|
|
} catch (Throwable $e) {
|
||
|
|
|
||
|
|
$SQL = "UPDATE exportjobs
|
||
|
|
SET exportjob_status = 'failed',
|
||
|
|
exportjob_completed = NOW(),
|
||
|
|
exportjob_error_message = :exportjob_error_message
|
||
|
|
WHERE exportjob_serial = :exportjob_serial";
|
||
|
|
|
||
|
|
$fail = $this->connect()->prepare($SQL);
|
||
|
|
|
||
|
|
$fail->execute([':exportjob_serial' => $exportjob_serial, ':exportjob_error_message' => $e->getMessage()]);
|
||
|
|
|
||
|
|
// Notify Admins of error
|
||
|
|
$this->sendWebHookAlert("Export Job {$exportjob_serial} has failed. Check Error Logs for details.");
|
||
|
|
$this->email_admins("Export Job Failure.", "Export Job {$exportjob_serial} has failed. Check Error Logs for details.");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// =================================
|
||
|
|
// Purge Exports Older then 24 Hours
|
||
|
|
// =================================
|
||
|
|
|
||
|
|
private function purgeExportJobs() {
|
||
|
|
|
||
|
|
$this->log("Purging Export Jobs Database Files");
|
||
|
|
|
||
|
|
$this->purgeFiles();
|
||
|
|
}
|
||
|
|
|
||
|
|
// =======================
|
||
|
|
// Claim Next Job in Queue
|
||
|
|
// =======================
|
||
|
|
|
||
|
|
private function claimNextJob() {
|
||
|
|
|
||
|
|
$this->connection->beginTransaction();
|
||
|
|
|
||
|
|
$SQL = "SELECT view_exportjobs.*
|
||
|
|
FROM view_exportjobs
|
||
|
|
WHERE view_exportjobs.exportjob_status = 'queued'
|
||
|
|
ORDER BY view_exportjobs.exportjob_created ASC
|
||
|
|
LIMIT 1 FOR UPDATE";
|
||
|
|
|
||
|
|
$statement = $this->connection->prepare($SQL);
|
||
|
|
|
||
|
|
$statement->execute();
|
||
|
|
|
||
|
|
$job = $statement->fetch(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
if (!$job) {
|
||
|
|
$this->connection->commit();
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
$SQL = "UPDATE exportjobs
|
||
|
|
SET exportjob_status = 'running'
|
||
|
|
WHERE exportjob_serial = :exportjob_serial";
|
||
|
|
|
||
|
|
$statement = $this->connection->prepare($SQL);
|
||
|
|
|
||
|
|
$statement->execute([':exportjob_serial' => (int) $job['exportjob_serial']]);
|
||
|
|
|
||
|
|
$this->connection->commit();
|
||
|
|
|
||
|
|
return $job;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==================================
|
||
|
|
// Return a Users Subscription Object
|
||
|
|
// ==================================
|
||
|
|
|
||
|
|
private function getUserSubscription($subscription, $user) {
|
||
|
|
|
||
|
|
$SQL = "select view_usersubscriptions.*
|
||
|
|
from view_usersubscriptions
|
||
|
|
where view_usersubscriptions.usersubscription_user = {$user}
|
||
|
|
and view_usersubscriptions.usersubscription_subscription = {$subscription}";
|
||
|
|
|
||
|
|
$usersubscription = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
return $usersubscription;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ============================
|
||
|
|
// Return a Subscription Object
|
||
|
|
// ============================
|
||
|
|
|
||
|
|
private function getSubscription($subscription) {
|
||
|
|
|
||
|
|
$SQL = "select view_subscriptions.*
|
||
|
|
from view_subscriptions
|
||
|
|
where subscription_serial = {$subscription}";
|
||
|
|
|
||
|
|
$subscription = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
return $subscription;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==============================
|
||
|
|
// Get Permit Facsts Full Dataset
|
||
|
|
// ==============================
|
||
|
|
|
||
|
|
private function getPermitFactsFullDataset($user_subscription_start_date, $user_subscription_end_date, $counties) {
|
||
|
|
|
||
|
|
set_time_limit(0);
|
||
|
|
|
||
|
|
// determine real date range based upon users subscription start date
|
||
|
|
|
||
|
|
if ($user_subscription_start_date <= date('Y-m-d', strtotime('-1 year'))) {
|
||
|
|
$user_subscription_start_date = date('Y-m-d', strtotime('-1 year'));
|
||
|
|
}
|
||
|
|
|
||
|
|
$SQL = "select view_permitfacts.*
|
||
|
|
from view_permitfacts
|
||
|
|
where view_permitfacts.permitfact_entry_date between '{$user_subscription_start_date}' and '{$user_subscription_end_date}'
|
||
|
|
and view_permitfacts.permitfact_county in ($counties)";
|
||
|
|
|
||
|
|
$permitfacts = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
return $permitfacts;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ======================================
|
||
|
|
// Get Planning/Zoning Facts Full Dataset
|
||
|
|
// ======================================
|
||
|
|
|
||
|
|
private function getPZFactsFullDataset($user_subscription_start_date, $user_subscription_end_date, $counties) {
|
||
|
|
|
||
|
|
set_time_limit(0);
|
||
|
|
|
||
|
|
// determine real date range based upon users subscription start date
|
||
|
|
|
||
|
|
if ($user_subscription_start_date <= date('Y-m-d', strtotime('-1 year'))) {
|
||
|
|
$user_subscription_start_date = date('Y-m-d', strtotime('-1 year'));
|
||
|
|
}
|
||
|
|
|
||
|
|
$SQL = "select view_pzfacts.*
|
||
|
|
from view_pzfacts
|
||
|
|
where view_pzfacts.pzfact_entry_date between '{$user_subscription_start_date}' and '{$user_subscription_end_date}'
|
||
|
|
and view_pzfacts.pzfact_county in ($counties)";
|
||
|
|
|
||
|
|
$pzfacts = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
return $pzfacts;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ===============================
|
||
|
|
// Get Business Facts Full Dataset
|
||
|
|
// ===============================
|
||
|
|
|
||
|
|
private function getBusinessFactsFullDataset($user_subscription_start_date, $user_subscription_end_date, $counties) {
|
||
|
|
|
||
|
|
set_time_limit(0);
|
||
|
|
|
||
|
|
// determine real date range based upon users subscription start date
|
||
|
|
|
||
|
|
if ($user_subscription_start_date <= date('Y-m-d', strtotime('-1 year'))) {
|
||
|
|
$user_subscription_start_date = date('Y-m-d', strtotime('-1 year'));
|
||
|
|
}
|
||
|
|
|
||
|
|
$SQL = "select view_businessfacts.*
|
||
|
|
from view_businessfacts
|
||
|
|
where view_businessfacts.businessfact_entry_date between '{$user_subscription_start_date}' and '{$user_subscription_end_date}'
|
||
|
|
and view_businessfacts.businessfact_county in ($counties)";
|
||
|
|
|
||
|
|
$businessfacts = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
return $businessfacts;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ========================
|
||
|
|
// Return a Counties Object
|
||
|
|
// ========================
|
||
|
|
|
||
|
|
private function getSubscriptionCounties($subscription_serial) {
|
||
|
|
|
||
|
|
$SQL = "select view_subscriptioncounties.*
|
||
|
|
from view_subscriptioncounties
|
||
|
|
where view_subscriptioncounties.subscriptioncounty_subscription = '{$subscription_serial}'";
|
||
|
|
|
||
|
|
$counties = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
$countyNames = [];
|
||
|
|
|
||
|
|
foreach ($counties as $county) {
|
||
|
|
|
||
|
|
$countyNames[] = $county['subscriptioncounty_county'];
|
||
|
|
}
|
||
|
|
|
||
|
|
$counties = implode(', ', $countyNames);
|
||
|
|
|
||
|
|
return $counties;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ====================
|
||
|
|
// Purges Files on Disk
|
||
|
|
// ====================
|
||
|
|
|
||
|
|
private function purgeFiles() {
|
||
|
|
|
||
|
|
$SQL = "select *
|
||
|
|
from exportjobs
|
||
|
|
where exportjobs.exportjob_created < (NOW() - INTERVAL 24 HOUR)";
|
||
|
|
|
||
|
|
$exportfiles = $this->connect()->query($SQL)->fetchAll(PDO::FETCH_ASSOC);
|
||
|
|
|
||
|
|
if (count($exportfiles) == 0) {
|
||
|
|
$this->log("Nothing To Purge");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach ($exportfiles as $files) {
|
||
|
|
|
||
|
|
$filename = $files['exportjob_file_path'];
|
||
|
|
|
||
|
|
unlink($filename);
|
||
|
|
}
|
||
|
|
|
||
|
|
$baseDir = './exports';
|
||
|
|
|
||
|
|
foreach (new DirectoryIterator($baseDir) as $item) {
|
||
|
|
|
||
|
|
if ($item->isDot() || !$item->isDir()) {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
$folderPath = $item->getPathname();
|
||
|
|
|
||
|
|
// Check if directory is empty
|
||
|
|
$files = scandir($folderPath);
|
||
|
|
|
||
|
|
if ($files !== false && count($files) === 2) {
|
||
|
|
rmdir($folderPath);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$this->log("Purging Export Jobs Database Records");
|
||
|
|
|
||
|
|
$SQL = "delete from exportjobs
|
||
|
|
where exportjobs.exportjob_created < (NOW() - INTERVAL 24 HOUR)";
|
||
|
|
|
||
|
|
$this->connection->query($SQL);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ===================================
|
||
|
|
// Generate Business Facts Export File
|
||
|
|
// ===================================
|
||
|
|
|
||
|
|
private function generateBusinessFactsExportFile($exportjob_file_name, $exportjob_file_type, $businessfacts, $usersubscription) {
|
||
|
|
|
||
|
|
$job_code = $this->getUniqueJobCode();
|
||
|
|
|
||
|
|
//Create a dedicated job folder
|
||
|
|
$base_directory = "./exports/{$job_code}";
|
||
|
|
|
||
|
|
if (!is_dir($base_directory)) {
|
||
|
|
mkdir($base_directory, 0777, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = "{$base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
switch ($exportjob_file_type) {
|
||
|
|
|
||
|
|
case "CSV":
|
||
|
|
|
||
|
|
// Create a dedicated job folder
|
||
|
|
$base_directory = "./exports/{$job_code}";
|
||
|
|
|
||
|
|
if (!is_dir($base_directory)) {
|
||
|
|
mkdir($base_directory, 0777, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = "{$base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
$this->log($exportjob_file_path);
|
||
|
|
|
||
|
|
$file_pointer = (fopen($exportjob_file_path, 'w'));
|
||
|
|
|
||
|
|
if (!$file_pointer) {
|
||
|
|
throw new RuntimeException("Unable to write: {$exportjob_file_path}");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Add CSV headers
|
||
|
|
|
||
|
|
$header_array = [
|
||
|
|
'businessfact_legacy_id', 'businessfact_company', 'businessfact_address_one', 'businessfact_address_two', 'businessfact_city_verbose', 'businessfact_state',
|
||
|
|
'businessfact_zip', 'businessfact_county_name_verbose', 'businessfact_phone', 'businessfact_fax', 'businessfact_email_address', 'businessfact_business_class_verbose',
|
||
|
|
'businessfact_action_verbose', 'businessfact_employee_count', 'businessfact_inception', 'businessfact_sic_code', 'businessfact_siccode_description_verbose', 'businessfact_contact_name',
|
||
|
|
'businessfact_contact_title', 'businessfact_license_date_verbose', 'businessfact_home_based_business', 'businessfact_year_established', 'businessfact_entry_date_verbose'
|
||
|
|
];
|
||
|
|
|
||
|
|
fputcsv($file_pointer, $header_array, ',', '"', '\\');
|
||
|
|
|
||
|
|
foreach ($businessfacts as $businessfact) {
|
||
|
|
|
||
|
|
fputcsv($file_pointer, $businessfact, ',', '"', '\\');
|
||
|
|
}
|
||
|
|
|
||
|
|
fclose($file_pointer);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case "XLSX":
|
||
|
|
|
||
|
|
$this->createExcelExport_BusinessFacts($businessfacts, $base_directory, $exportjob_file_name);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case "PDF":
|
||
|
|
|
||
|
|
$this->createPDFExport_BusinessFacts($businessfacts, $usersubscription, $base_directory, $exportjob_file_name);
|
||
|
|
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = str_replace('../exports/', './exports/', $exportjob_file_path);
|
||
|
|
$exportjob_file_type = strtoupper(pathinfo($exportjob_file_path, PATHINFO_EXTENSION));
|
||
|
|
|
||
|
|
return ['exportjob_file_name' => $exportjob_file_name, 'exportjob_file_path' => $exportjob_file_path, 'exportjob_file_type' => $exportjob_file_type];
|
||
|
|
}
|
||
|
|
|
||
|
|
// =================================
|
||
|
|
// Generate Permit Facts Export File
|
||
|
|
// =================================
|
||
|
|
|
||
|
|
private function generatePermitFactsExportFile($exportjob_file_name, $exportjob_file_type, $permitfacts, $usersubscription) {
|
||
|
|
|
||
|
|
$job_code = $this->getUniqueJobCode();
|
||
|
|
|
||
|
|
//Create a dedicated job folder
|
||
|
|
$base_directory = "./exports/{$job_code}";
|
||
|
|
|
||
|
|
if (!is_dir($base_directory)) {
|
||
|
|
mkdir($base_directory, 0777, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = "{$base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
switch ($exportjob_file_type) {
|
||
|
|
|
||
|
|
case "CSV":
|
||
|
|
|
||
|
|
// Create a dedicated job folder
|
||
|
|
$base_directory = "./exports/{$job_code}";
|
||
|
|
|
||
|
|
if (!is_dir($base_directory)) {
|
||
|
|
mkdir($base_directory, 0777, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = "{$base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
$file_pointer = (fopen($exportjob_file_path, 'w'));
|
||
|
|
|
||
|
|
if (!$file_pointer) {
|
||
|
|
throw new RuntimeException("Unable to write: {$exportjob_file_path}");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Add CSV headers
|
||
|
|
|
||
|
|
$header_array = [
|
||
|
|
'permitfact_serial', 'permitfact_entry_date_verbose', 'permitfact_permit_number', 'permitfact_permit_date_verbose', 'permitfact_project_address', 'permitfact_project_name',
|
||
|
|
'permitfact_project_type_verbose', 'project_city_verbose', 'permitfact_project_state', 'permitfact_project_zip', 'permitfact_company', 'permitfact_address',
|
||
|
|
'permitfact_city_verbose', 'permitfact_state', 'permitfact_zip', 'permitfact_phone', 'permitfact_size', 'permitfact_value', 'permitfact_work_type_verbose',
|
||
|
|
'permitfact_building_type_verbose', 'permitfact_county_name_verbose', 'permitfact_lot_block', 'permitfact_dist_ll', 'permitfact_owner_name', 'permitfact_owner_address',
|
||
|
|
'owner_city_verbose', 'permitfact_owner_state', 'permitfact_owner_zip', 'permitfact_owner_phone'
|
||
|
|
];
|
||
|
|
|
||
|
|
fputcsv($file_pointer, $header_array, ',', '"', '\\');
|
||
|
|
|
||
|
|
foreach ($permitfacts as $permitfact) {
|
||
|
|
|
||
|
|
fputcsv($file_pointer, $permitfact, ',', '"', '\\');
|
||
|
|
}
|
||
|
|
|
||
|
|
fclose($file_pointer);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case "XLSX":
|
||
|
|
|
||
|
|
$result = $this->createExcelExport_PermitFacts($permitfacts, $base_directory, $exportjob_file_name);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case "PDF":
|
||
|
|
|
||
|
|
$this->createPDFExport_PermitFacts($permitfacts, $usersubscription, $base_directory, $exportjob_file_name);
|
||
|
|
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = str_replace('../exports/', './exports/', $exportjob_file_path);
|
||
|
|
$exportjob_file_type = strtoupper(pathinfo($exportjob_file_path, PATHINFO_EXTENSION));
|
||
|
|
|
||
|
|
return ['exportjob_file_name' => $exportjob_file_name, 'exportjob_file_path' => $exportjob_file_path, 'exportjob_file_type' => $exportjob_file_type];
|
||
|
|
}
|
||
|
|
|
||
|
|
// ====================================
|
||
|
|
// Generate Planning/Zoning Export File
|
||
|
|
// ====================================
|
||
|
|
|
||
|
|
private function generatePZFactsExportFile($exportjob_file_name, $exportjob_file_type, $pzfacts, $usersubscription) {
|
||
|
|
|
||
|
|
|
||
|
|
// Get a job code and create a dedicated job folder
|
||
|
|
$job_code = $this->getUniqueJobCode();
|
||
|
|
$base_directory = "./exports/{$job_code}";
|
||
|
|
|
||
|
|
if (!is_dir($base_directory)) {
|
||
|
|
mkdir($base_directory, 0777, true);
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = "{$base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
switch ($exportjob_file_type) {
|
||
|
|
|
||
|
|
case "CSV":
|
||
|
|
|
||
|
|
$file_pointer = (fopen($exportjob_file_path, 'w'));
|
||
|
|
|
||
|
|
if (!$file_pointer) {
|
||
|
|
throw new RuntimeException("Unable to write: {$exportjob_file_path}");
|
||
|
|
}
|
||
|
|
|
||
|
|
// Add CSV headers
|
||
|
|
|
||
|
|
$header_array = [
|
||
|
|
'pzfact_legacy_id', 'pzfact_county', 'pzfact_owner_name', 'pzfact_owner_state', 'pzfact_owner_address', 'pzfact_owner_phone',
|
||
|
|
'pzfact_owner_fax', 'pzfact_professional_name', 'pzfact_professional_state', 'pzfact_professional_address', 'pzfact_professional_phone', 'pzfact_professional_fax',
|
||
|
|
'pzfact_project_type_verbose', 'pzfact_project_name', 'pzfact_project_description', 'pzfact_project_address', 'pzfact_project_city', 'pzfact_action_code_verbose',
|
||
|
|
'pzfact_district', 'pzfact_land_lot', 'pzfact_block', 'pzfact_parcel_number', 'pzfact_lot', 'pzfact_action_date_verbose',
|
||
|
|
'pzfact_acres', 'pzfact_status', 'pzfact_entry_date_verbose'
|
||
|
|
];
|
||
|
|
|
||
|
|
fputcsv($file_pointer, $header_array, ',', '"', '\\');
|
||
|
|
|
||
|
|
foreach ($pzfacts as $pzfact) {
|
||
|
|
|
||
|
|
fputcsv($file_pointer, $pzfact, ',', '"', '\\');
|
||
|
|
}
|
||
|
|
|
||
|
|
fclose($file_pointer);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case "XLSX":
|
||
|
|
|
||
|
|
$this->createExcelExport_PZFacts($pzfacts, $base_directory, $exportjob_file_name);
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case "PDF":
|
||
|
|
|
||
|
|
print_r($pzfacts);
|
||
|
|
|
||
|
|
$this->createPDFExport_PZFacts($pzfacts, $usersubscription, $base_directory, $exportjob_file_name);
|
||
|
|
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
$exportjob_file_path = str_replace('../exports/', './exports/', $exportjob_file_path);
|
||
|
|
|
||
|
|
$exportjob_file_type = strtoupper(pathinfo($exportjob_file_path, PATHINFO_EXTENSION));
|
||
|
|
|
||
|
|
return ['exportjob_file_name' => $exportjob_file_name, 'exportjob_file_path' => $exportjob_file_path, 'exportjob_file_type' => $exportjob_file_type];
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==========================
|
||
|
|
// Creates Permit Facts Excel
|
||
|
|
// ==========================
|
||
|
|
|
||
|
|
private function createExcelExport_PermitFacts($permitfacts, $exportjob_base_directory, $exportjob_file_name) {
|
||
|
|
|
||
|
|
// Create the Spreadsheet.
|
||
|
|
|
||
|
|
$spreadsheet = new Spreadsheet();
|
||
|
|
|
||
|
|
$spreadsheet->getProperties()->setCreator("DEC International")->setTitle("PermitFacts")->setSubject("PermitFacts")
|
||
|
|
->setDescription("PermitFacts")->setKeywords("PermitFacts")->setCategory("PermitFacts");
|
||
|
|
|
||
|
|
// Create the Base Sheet.
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0);
|
||
|
|
$spreadsheet->getActiveSheet()->setTitle("Permits");
|
||
|
|
|
||
|
|
// Format the Cells and Create the Headings.
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("C")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("D")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("E")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("F")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("G")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("H")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("I")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("J")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("K")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("L")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("M")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("N")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("O")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("P")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Q")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("R")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("S")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("T")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("U")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("V")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("W")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("X")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Y")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Z")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("AA")->setAutoSize(true);
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A1:AA1")->getFont()->setBold(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A1:AA1")->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB("D3D3D3");
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0)->setCellValue("A1", "permitfact_serial")
|
||
|
|
->setCellValue("B1", "Entry Date")
|
||
|
|
->setCellValue("C1", "Permit Number")
|
||
|
|
->setCellValue("D1", "Permit Date")
|
||
|
|
->setCellValue("E1", "Project Address")
|
||
|
|
->setCellValue("F1", "Project Name")
|
||
|
|
->setCellValue("G1", "Project Type")
|
||
|
|
->setCellValue("H1", "Project City")
|
||
|
|
->setCellValue("I1", "Project State")
|
||
|
|
->setCellValue("J1", "Project Zip")
|
||
|
|
->setCellValue("K1", "Company")
|
||
|
|
->setCellValue("L1", "Address")
|
||
|
|
->setCellValue("M1", "City")
|
||
|
|
->setCellValue("N1", "State")
|
||
|
|
->setCellValue("O1", "Zip")
|
||
|
|
->setCellValue("P1", "Phone Number")
|
||
|
|
->setCellValue("Q1", "Size")
|
||
|
|
->setCellValue("R1", "Value")
|
||
|
|
->setCellValue("S1", "Work Type")
|
||
|
|
->setCellValue("T1", "Building Type")
|
||
|
|
->setCellValue("U1", "County")
|
||
|
|
->setCellValue("V1", "Owner Name")
|
||
|
|
->setCellValue("W1", "Owner Address")
|
||
|
|
->setCellValue("X1", "Owner City")
|
||
|
|
->setCellValue("Y1", "Owner State")
|
||
|
|
->setCellValue("Z1", "Owner Zip")
|
||
|
|
->setCellValue("AA1", "Owner Phone");
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A:A")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("C:C")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("D:D")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("E:E")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("F:F")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("G:G")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("H:H")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("I:I")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("J:J")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("K:K")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("L:L")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("M:M")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("N:N")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("O:O")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("P:P")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Q:Q")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("R:R")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("S:S")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("T:T")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("U:U")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("V:V")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("W:W")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("X:X")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Y:Y")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Z:Z")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("AA:AA")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->freezePane("A2");
|
||
|
|
|
||
|
|
// Create the Detail Rows.
|
||
|
|
|
||
|
|
$row = 2;
|
||
|
|
|
||
|
|
foreach ($permitfacts as $permitfact) {
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("A" . $row, (string) $permitfact['permitfact_serial']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("B" . $row, (string) $permitfact['permitfact_entry_date_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("C" . $row, (string) $permitfact['permitfact_permit_number']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("D" . $row, (string) $permitfact['permitfact_permit_date_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("E" . $row, (string) $permitfact['permitfact_project_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("F" . $row, (string) $permitfact['permitfact_project_name']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("G" . $row, (string) $permitfact['permitfact_project_type_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("H" . $row, (string) $permitfact['project_city_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("I" . $row, (string) $permitfact['permitfact_project_state']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("J" . $row, (string) $permitfact['permitfact_project_zip']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("K" . $row, (string) $permitfact['permitfact_company']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("L" . $row, (string) $permitfact['permitfact_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("M" . $row, (string) $permitfact['permitfact_city_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("N" . $row, (string) $permitfact['permitfact_state']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("O" . $row, (string) $permitfact['permitfact_zip']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("P" . $row, $this->formatPhoneNumber((string) $permitfact['permitfact_phone']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Q" . $row, (string) $permitfact['permitfact_size']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("R" . $row, (string) $permitfact['permitfact_value']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("S" . $row, (string) $permitfact['permitfact_work_type_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("T" . $row, (string) $permitfact['permitfact_building_type_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("U" . $row, (string) $permitfact['permitfact_county_name_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("V" . $row, (string) $permitfact['permitfact_owner_name']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("W" . $row, (string) $permitfact['permitfact_owner_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("X" . $row, (string) $permitfact['permitfact_owner_city']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Y" . $row, (string) $permitfact['permitfact_owner_state']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Z" . $row, (string) $permitfact['permitfact_owner_zip']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("AA" . $row, $this->formatPhoneNumber((string) $permitfact['permitfact_owner_phone']));
|
||
|
|
|
||
|
|
$row++;
|
||
|
|
}
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0);
|
||
|
|
|
||
|
|
$excelWriter = new Xlsx($spreadsheet);
|
||
|
|
|
||
|
|
$absPath = __DIR__ . "/../{$exportjob_base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
$excelWriter->save($absPath);
|
||
|
|
|
||
|
|
return $absPath;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ============================
|
||
|
|
// Creates Business Facts Excel
|
||
|
|
// ============================
|
||
|
|
|
||
|
|
private function createExcelExport_BusinessFacts($businessfacts, $exportjob_base_directory, $exportjob_file_name) {
|
||
|
|
|
||
|
|
// Create the Spreadsheet.
|
||
|
|
|
||
|
|
$spreadsheet = new Spreadsheet();
|
||
|
|
|
||
|
|
$spreadsheet->getProperties()->setCreator("DEC International")->setTitle("BusinessFacts")->setSubject("BusinessFacts")
|
||
|
|
->setDescription("BusinessFacts")->setKeywords("BusinessFacts")->setCategory("BusinessFacts");
|
||
|
|
|
||
|
|
// Create the Base Sheet.
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0);
|
||
|
|
$spreadsheet->getActiveSheet()->setTitle("BusinessFacts");
|
||
|
|
|
||
|
|
// Format the Cells and Create the Headings.
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("C")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("D")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("E")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("F")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("G")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("H")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("I")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("J")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("K")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("L")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("M")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("N")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("O")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("P")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Q")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("R")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("S")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("T")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("U")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("V")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("W")->setAutoSize(true);
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A1:W1")->getFont()->setBold(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A1:W1")->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB("D3D3D3");
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0)->setCellValue("A1", "BusinessFactID")
|
||
|
|
->setCellValue("B1", "Company")
|
||
|
|
->setCellValue("C1", "Address1")
|
||
|
|
->setCellValue("D1", "Address2")
|
||
|
|
->setCellValue("E1", "City")
|
||
|
|
->setCellValue("F1", "State")
|
||
|
|
->setCellValue("G1", "Zip")
|
||
|
|
->setCellValue("H1", "County")
|
||
|
|
->setCellValue("I1", "Phone")
|
||
|
|
->setCellValue("J1", "Fax")
|
||
|
|
->setCellValue("K1", "EmailAddress")
|
||
|
|
->setCellValue("L1", "BC")
|
||
|
|
->setCellValue("M1", "Description")
|
||
|
|
->setCellValue("N1", "ES")
|
||
|
|
->setCellValue("O1", "BusinessInception")
|
||
|
|
->setCellValue("P1", "SIC")
|
||
|
|
->setCellValue("Q1", "SIC_Description")
|
||
|
|
->setCellValue("R1", "ContactName")
|
||
|
|
->setCellValue("S1", "ContactTitle")
|
||
|
|
->setCellValue("T1", "LicenseDate")
|
||
|
|
->setCellValue("U1", "HomeBasedBusiness")
|
||
|
|
->setCellValue("V1", "YearEstablished")
|
||
|
|
->setCellValue("W1", "EntryDate");
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A:A")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("C:C")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("D:D")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("E:E")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("F:F")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("G:G")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("H:H")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("I:I")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("J:J")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("K:K")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("L:L")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("M:M")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("N:N")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("O:O")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("P:P")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Q:Q")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("R:R")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("S:S")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("T:T")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("U:U")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("V:V")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("W:W")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->freezePane("A2");
|
||
|
|
|
||
|
|
// Create the Detail Rows.
|
||
|
|
|
||
|
|
$row = 2;
|
||
|
|
|
||
|
|
foreach ($businessfacts as $businessfact) {
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("A" . $row, (string) $businessfact['businessfact_legacy_id']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("B" . $row, (string) $businessfact['businessfact_company']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("C" . $row, (string) $businessfact['businessfact_address_one']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("D" . $row, (string) $businessfact['businessfact_address_two']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("E" . $row, (string) $businessfact['businessfact_city_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("F" . $row, (string) $businessfact['businessfact_state']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("G" . $row, (string) $businessfact['businessfact_zip']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("H" . $row, (string) $businessfact['businessfact_county_name_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("I" . $row, (string) $this->formatPhoneNumber($businessfact['businessfact_phone']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("J" . $row, (string) $this->formatPhoneNumber($businessfact['businessfact_fax']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("K" . $row, (string) $businessfact['businessfact_email_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("L" . $row, (string) $businessfact['businessfact_business_class_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("M" . $row, (string) $businessfact['businessfact_action_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("N" . $row, (string) $businessfact['businessfact_employee_count']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("O" . $row, (string) $businessfact['businessfact_inception']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("P" . $row, (string) $businessfact['businessfact_sic_code']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Q" . $row, (string) $businessfact['businessfact_siccode_description_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("R" . $row, (string) $businessfact['businessfact_contact_name']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("S" . $row, (string) $businessfact['businessfact_contact_title']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("T" . $row, (string) $businessfact['businessfact_license_date_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("U" . $row, (string) $businessfact['businessfact_home_based_business']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("V" . $row, (string) $businessfact['businessfact_year_established']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("W" . $row, (string) $businessfact['businessfact_entry_date_verbose']);
|
||
|
|
|
||
|
|
$row++;
|
||
|
|
}
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0);
|
||
|
|
|
||
|
|
$excelWriter = new Xlsx($spreadsheet);
|
||
|
|
|
||
|
|
$absPath = __DIR__ . "/../{$exportjob_base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
$excelWriter->save($absPath);
|
||
|
|
|
||
|
|
return $absPath;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ======================
|
||
|
|
// Creates PZ Facts Excel
|
||
|
|
// ======================
|
||
|
|
|
||
|
|
private function createExcelExport_PZFacts($pzfacts, $exportjob_base_directory, $exportjob_file_name) {
|
||
|
|
|
||
|
|
// Create the Spreadsheet
|
||
|
|
|
||
|
|
$spreadsheet = new Spreadsheet();
|
||
|
|
|
||
|
|
$spreadsheet->getProperties()->setCreator("DEC International")->setTitle("PlanningAndZoningFacts")->setSubject("PlanningAndZoningFacts")
|
||
|
|
->setDescription("PlanningAndZoningFacts")->setKeywords("PlanningAndZoningFacts")->setCategory("PlanningAndZoningFacts");
|
||
|
|
|
||
|
|
// Create the Base Sheet.
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0);
|
||
|
|
$spreadsheet->getActiveSheet()->setTitle("PlanningAndZoningFacts");
|
||
|
|
|
||
|
|
// Format the Cells and Create the Headings.
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("C")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("D")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("E")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("F")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("G")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("H")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("I")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("J")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("K")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("L")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("M")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("N")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("O")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("P")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Q")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("R")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("S")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("T")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("U")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("V")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("W")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("X")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Y")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("Z")->setAutoSize(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getColumnDimension("AA")->setAutoSize(true);
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A1:AA1")->getFont()->setBold(true);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A1:AA1")->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)->getStartColor()->setARGB("D3D3D3");
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0)->setCellValue("A1", "PZ_ID")
|
||
|
|
->setCellValue("B1", "County")
|
||
|
|
->setCellValue("C1", "OwnerName")
|
||
|
|
->setCellValue("D1", "OwnerState")
|
||
|
|
->setCellValue("E1", "OwnerAddress")
|
||
|
|
->setCellValue("F1", "OwnerPhone")
|
||
|
|
->setCellValue("G1", "OwnerFax")
|
||
|
|
->setCellValue("H1", "ProfessionalName")
|
||
|
|
->setCellValue("I1", "ProfessionalState")
|
||
|
|
->setCellValue("J1", "ProfessionalAddress")
|
||
|
|
->setCellValue("K1", "ProfessionalPhone")
|
||
|
|
->setCellValue("L1", "ProfessionalFax")
|
||
|
|
->setCellValue("M1", "ProjectType")
|
||
|
|
->setCellValue("N1", "ProjectName")
|
||
|
|
->setCellValue("O1", "ProjectDescription")
|
||
|
|
->setCellValue("P1", "ProjectAddress")
|
||
|
|
->setCellValue("Q1", "ProjectCity")
|
||
|
|
->setCellValue("R1", "ActionCode")
|
||
|
|
->setCellValue("S1", "District")
|
||
|
|
->setCellValue("T1", "LandLot")
|
||
|
|
->setCellValue("U1", "Block")
|
||
|
|
->setCellValue("V1", "Parcel")
|
||
|
|
->setCellValue("W1", "Lot")
|
||
|
|
->setCellValue("X1", "ActionDate")
|
||
|
|
->setCellValue("Y1", "Acres")
|
||
|
|
->setCellValue("Z1", "Status")
|
||
|
|
->setCellValue("AA1", "EntryDate");
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("A:A")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("C:C")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("D:D")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("E:E")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("F:F")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("G:G")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("H:H")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("I:I")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("J:J")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("K:K")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("L:L")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("M:M")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("N:N")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("O:O")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("P:P")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Q:Q")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("R:R")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("S:S")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("T:T")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("U:U")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("V:V")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("W:W")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("X:X")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Y:Y")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("Z:Z")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
$spreadsheet->getActiveSheet()->getStyle("AA:AA")->getNumberFormat()->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->freezePane("A2");
|
||
|
|
|
||
|
|
// Create the Detail Rows.
|
||
|
|
|
||
|
|
$row = 2;
|
||
|
|
|
||
|
|
foreach ($pzfacts as $pzfact) {
|
||
|
|
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("A" . $row, (string) $pzfact['pzfact_legacy_id']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("B" . $row, (string) $pzfact['pzfact_county_name_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("C" . $row, (string) $pzfact['pzfact_owner_name']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("D" . $row, (string) $pzfact['pzfact_owner_state']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("E" . $row, (string) $pzfact['pzfact_owner_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("F" . $row, $this->formatPhoneNumber((string) $pzfact['pzfact_owner_phone']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("G" . $row, $this->formatPhoneNumber((string) $pzfact['pzfact_owner_fax']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("H" . $row, (string) $pzfact['pzfact_professional_name']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("I" . $row, (string) $pzfact['pzfact_professional_state']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("J" . $row, (string) $pzfact['pzfact_professional_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("K" . $row, $this->formatPhoneNumber((string) $pzfact['pzfact_professional_phone']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("L" . $row, $this->formatPhoneNumber((string) $pzfact['pzfact_professional_fax']));
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("M" . $row, (string) $pzfact['pzfact_project_type_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("N" . $row, (string) $pzfact['pzfact_project_name']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("O" . $row, (string) $pzfact['pzfact_project_description']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("P" . $row, (string) $pzfact['pzfact_project_address']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Q" . $row, (string) $pzfact['project_city_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("R" . $row, (string) $pzfact['pzfact_action_code_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("S" . $row, (string) $pzfact['pzfact_district']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("T" . $row, (string) $pzfact['pzfact_land_lot']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("U" . $row, (string) $pzfact['pzfact_block']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("V" . $row, (string) $pzfact['pzfact_parcel_number']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("W" . $row, (string) $pzfact['pzfact_lot']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("X" . $row, (string) $pzfact['pzfact_action_date_verbose']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Y" . $row, (string) $pzfact['pzfact_acres']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("Z" . $row, (string) $pzfact['pzfact_status']);
|
||
|
|
$spreadsheet->getActiveSheet()->setCellValue("AA" . $row, (string) $pzfact['pzfact_entry_date_verbose']);
|
||
|
|
|
||
|
|
$row++;
|
||
|
|
}
|
||
|
|
|
||
|
|
$spreadsheet->setActiveSheetIndex(0);
|
||
|
|
|
||
|
|
$excelWriter = new Xlsx($spreadsheet);
|
||
|
|
|
||
|
|
$absPath = __DIR__ . "/../{$exportjob_base_directory}/{$exportjob_file_name}";
|
||
|
|
|
||
|
|
$excelWriter->save($absPath);
|
||
|
|
|
||
|
|
return $absPath;
|
||
|
|
}
|
||
|
|
|
||
|
|
// =======================
|
||
|
|
// Format Raw Phone Number
|
||
|
|
// =======================
|
||
|
|
|
||
|
|
public function formatPhoneNumber(string $phonenumber): string {
|
||
|
|
|
||
|
|
// Remove everything except digits
|
||
|
|
$digits = preg_replace('/\D+/', '', $phonenumber);
|
||
|
|
|
||
|
|
// Handle leading country code (US)
|
||
|
|
if (strlen($digits) === 11 && str_starts_with($digits, '1')) {
|
||
|
|
$digits = substr($digits, 1);
|
||
|
|
}
|
||
|
|
|
||
|
|
return substr($digits, 0, 3) . '-' . substr($digits, 3, 3) . '-' . substr($digits, 6, 4);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ========================
|
||
|
|
// Creates Permit Facts PDF
|
||
|
|
// ========================
|
||
|
|
|
||
|
|
private function createPDFExport_PermitFacts($permitfacts, $usersubscription, $exportjob_base_directory, $exportjob_file_name) {
|
||
|
|
|
||
|
|
require_once ("./reports/Print_AllPermitFactsPDF.php");
|
||
|
|
|
||
|
|
$report = (new Print_PermitFactsPDF())->print($permitfacts, $usersubscription, $exportjob_base_directory, $exportjob_file_name);
|
||
|
|
return $report;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ===========================
|
||
|
|
// Creates Planning/Zoning PDF
|
||
|
|
// ===========================
|
||
|
|
|
||
|
|
private function createPDFExport_PZFacts($pzfacts, $usersubscription, $exportjob_base_directory, $exportjob_file_name) {
|
||
|
|
|
||
|
|
require_once ("./reports/Print_AllPZFactsPDF.php");
|
||
|
|
|
||
|
|
$report = (new Print_PZFactsPDF())->print($pzfacts, $usersubscription, $exportjob_base_directory, $exportjob_file_name);
|
||
|
|
return $report;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ========================
|
||
|
|
// Creates Permit Facts PDF
|
||
|
|
// ========================
|
||
|
|
|
||
|
|
private function createPDFExport_BusinessFacts($businessfacts, $usersubscription, $exportjob_base_directory, $exportjob_file_name) {
|
||
|
|
|
||
|
|
require_once ("./reports/Print_AllBusinessFactsPDF.php");
|
||
|
|
|
||
|
|
$report = (new Print_BusinessFactsPDF())->print($businessfacts, $usersubscription, $exportjob_base_directory, $exportjob_file_name);
|
||
|
|
return $report;
|
||
|
|
}
|
||
|
|
|
||
|
|
// ======================
|
||
|
|
// Return Unique Job Code
|
||
|
|
// ======================
|
||
|
|
|
||
|
|
private function getUniqueJobCode() {
|
||
|
|
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
|
||
|
|
random_int(0, 0xffff), random_int(0, 0xffff), random_int(0, 0xffff),
|
||
|
|
random_int(0, 0x0fff) | 0x4000, random_int(0, 0x3fff) | 0x8000,
|
||
|
|
random_int(0, 0xffff), random_int(0, 0xffff), random_int(0, 0xffff)
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ==========================
|
||
|
|
// Send an Alert/Notification
|
||
|
|
// ==========================
|
||
|
|
|
||
|
|
public function sendWebHookAlert($message, $title = "🚨 DEC Application Alert", $alerttype = "1fff00") {
|
||
|
|
|
||
|
|
$webhookUrl = (string) $this->settings->DiscordWebHookURL;
|
||
|
|
|
||
|
|
$data = [
|
||
|
|
'embeds' => [[
|
||
|
|
'title' => $title,
|
||
|
|
'description' => $message,
|
||
|
|
'color' => hexdec($alerttype),
|
||
|
|
'footer' => [
|
||
|
|
'text' => 'Real Estate Data Inc. System Notificiation',
|
||
|
|
],
|
||
|
|
'timestamp' => date('c'), // ISO 8601 format
|
||
|
|
]]
|
||
|
|
];
|
||
|
|
|
||
|
|
$jsonData = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||
|
|
|
||
|
|
$ch = curl_init($webhookUrl);
|
||
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
||
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
|
||
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
|
||
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||
|
|
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
|
||
|
|
|
||
|
|
$response = curl_exec($ch);
|
||
|
|
|
||
|
|
if ($response === false) {
|
||
|
|
$this->log('Curl error: ' . curl_error($ch));
|
||
|
|
}
|
||
|
|
|
||
|
|
curl_close($ch);
|
||
|
|
}
|
||
|
|
|
||
|
|
// ============
|
||
|
|
// Email Admins
|
||
|
|
// ============
|
||
|
|
|
||
|
|
public function email_admins($subject = "", $message = "") {
|
||
|
|
|
||
|
|
$this->log(date("Y-m-d H:i:s") . " - Emailing Admins...");
|
||
|
|
|
||
|
|
$settings = new SimpleXMLElement((file_exists("./xml/settings.xml") ? file_get_contents("./xml/settings.xml") : "<settings/>"));
|
||
|
|
|
||
|
|
// Server Variables
|
||
|
|
$host = (string) $settings->SmtpServer;
|
||
|
|
$username = (string) $settings->SmtpUserName;
|
||
|
|
$password = (string) $settings->SmtpPassword;
|
||
|
|
|
||
|
|
// Recipient Variables
|
||
|
|
$from_email = (string) $settings->FromEmail;
|
||
|
|
$from_name = (string) $settings->FromName;
|
||
|
|
|
||
|
|
$support_email = (string) $settings->SupportEmail;
|
||
|
|
$support_name = (string) $settings->SupportName;
|
||
|
|
|
||
|
|
if ((string) $settings->Environment == 'Production') {
|
||
|
|
|
||
|
|
$admin_email = (string) $settings->AdminEmail;
|
||
|
|
$admin_name = (string) $settings->AdminName;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Content Variables
|
||
|
|
|
||
|
|
$attachment_name = "";
|
||
|
|
|
||
|
|
$mail = new PHPMailer(true);
|
||
|
|
|
||
|
|
try {
|
||
|
|
|
||
|
|
//Server settings
|
||
|
|
$mail->isSMTP();
|
||
|
|
$mail->Host = $host;
|
||
|
|
$mail->SMTPAuth = true;
|
||
|
|
$mail->Username = $username;
|
||
|
|
$mail->Password = $password;
|
||
|
|
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
|
||
|
|
$mail->Port = 465;
|
||
|
|
|
||
|
|
//Recipients
|
||
|
|
$mail->setFrom($from_email, $from_name);
|
||
|
|
$mail->addAddress($support_email, $support_name);
|
||
|
|
|
||
|
|
if ($settings->Environment == 'Production') {
|
||
|
|
$mail->addAddress($admin_email, $admin_name);
|
||
|
|
}
|
||
|
|
|
||
|
|
//Attachments
|
||
|
|
$mail->addAttachment($attachment_name);
|
||
|
|
|
||
|
|
//Content
|
||
|
|
$mail->isHTML(true);
|
||
|
|
$mail->Subject = $subject;
|
||
|
|
$mail->Body = $message;
|
||
|
|
|
||
|
|
$mail->send();
|
||
|
|
} catch (Exception $e) {
|
||
|
|
$this->log("Message could not be sent. Mailer Error: {$e->ErrorInfo}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
?>
|