Add archiving for invoice item. Add creation of other archive tables. #762
This commit is contained in:
parent
d7a2b25e51
commit
c1578eee1f
1 changed files with 229 additions and 55 deletions
|
|
@ -51,14 +51,19 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
// (6) rider_rating (has jo foreign key)
|
||||
|
||||
// create the archive tables
|
||||
// TODO: create the other archive tables
|
||||
$archive_table_name = $this->createJobOrderArchiveTable($year);
|
||||
$this->createJobOrderArchiveTables($year);
|
||||
$this->createInvoiceArchiveTable($year);
|
||||
$this->createInvoiceItemArchiveTable($year);
|
||||
$this->createTicketArchiveTable($year);
|
||||
$this->createJORejectionArchiveTable($year);
|
||||
$this->createRiderRatingArchiveTable($year);
|
||||
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
$query_sql = 'SELECT *
|
||||
FROM job_order
|
||||
WHERE YEAR(date_create) = :year
|
||||
ORDER BY date_create';
|
||||
ORDER BY date_create';
|
||||
|
||||
$query_stmt = $db->prepare($query_sql);
|
||||
$query_stmt->bindValue('year', $year, PDO::PARAM_STR);
|
||||
|
|
@ -82,52 +87,66 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
$this->deleteDataFiles($tname);
|
||||
}
|
||||
|
||||
// special since this is not directly related to JO but to invoice
|
||||
$this->deleteDataFiles('invoice_item');
|
||||
|
||||
while ($row = $results->fetchAssociative())
|
||||
{
|
||||
$jo_data[] = $this->createJobOrderArchiveData($row);
|
||||
$jo_data['job_order'][$row['id']] = $this->createJobOrderArchiveData($row);
|
||||
|
||||
// foreach job order id we got from the first query, we get the JO related
|
||||
// data for that id from jo_event, invoice, ticket, jo_rejection, rider_rating
|
||||
|
||||
if (is_callable($callbackJO))
|
||||
{
|
||||
{
|
||||
foreach ($related_tables as $table_name)
|
||||
{
|
||||
call_user_func($callbackJO, $row, $table_name);
|
||||
if (($table_name == 'jo_event') ||
|
||||
($table_name == 'invoice') ||
|
||||
($table_name == 'ticket'))
|
||||
{
|
||||
$query_sql = 'SELECT * FROM ' . $table_name . ' WHERE job_order_id = :id';
|
||||
}
|
||||
else
|
||||
{
|
||||
$query_sql = 'SELECT * FROM ' . $table_name . ' WHERE jo_id = :id';
|
||||
}
|
||||
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
$query_stmt = $db->prepare($query_sql);
|
||||
$query_stmt->bindValue('id', $row['id']);
|
||||
|
||||
call_user_func($callbackJO, $row, $query_stmt, $table_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: load data infile for job order
|
||||
|
||||
// write the array into the file
|
||||
$file = $this->createDataFileRelatedArchiveData($jo_data, 'job_order', 'w');
|
||||
|
||||
if ($file != null)
|
||||
{
|
||||
// call load data infile
|
||||
}
|
||||
}
|
||||
|
||||
protected function getRelatedArchiveData($row, $table_name)
|
||||
protected function getRelatedArchiveData($row, $query_stmt, $table_name)
|
||||
{
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
if (($table_name == 'jo_event') ||
|
||||
($table_name == 'invoice') ||
|
||||
($table_name == 'ticket'))
|
||||
{
|
||||
$query_sql = 'SELECT *
|
||||
FROM ' . $table_name . ' WHERE job_order_id = :id';
|
||||
}
|
||||
else
|
||||
{
|
||||
$query_sql = 'SELECT *
|
||||
FROM ' . $table_name . ' WHERE jo_id = :id';
|
||||
}
|
||||
|
||||
$query_stmt = $db->prepare($query_sql);
|
||||
$query_stmt->bindValue('id', $row['id']);
|
||||
|
||||
$results = $query_stmt->executeQuery();
|
||||
|
||||
$data = [];
|
||||
|
||||
while ($q_row = $results->fetchAssociative())
|
||||
{
|
||||
// check if table name is invoice because we need to get
|
||||
// all invoice items for a specific invoice too
|
||||
if ($table_name == 'invoice')
|
||||
{
|
||||
// get invoice item related data
|
||||
$this->getInvoiceItemArchiveData($q_row);
|
||||
}
|
||||
|
||||
$fields = [];
|
||||
|
||||
foreach ($q_row as $key => $value)
|
||||
|
|
@ -140,7 +159,46 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
}
|
||||
|
||||
// write the array into the file
|
||||
$file = $this->createDataFileRelatedArchiveData($data, $table_name);
|
||||
$file = $this->createDataFileRelatedArchiveData($data, $table_name, 'a');
|
||||
|
||||
if ($file != null)
|
||||
{
|
||||
// call load data infile
|
||||
}
|
||||
}
|
||||
|
||||
protected function getInvoiceItemArchiveData($row)
|
||||
{
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
$query_sql = 'SELECT * FROM invoice_item WHERE invoice_id = :id';
|
||||
|
||||
$query_stmt = $db->prepare($query_sql);
|
||||
$query_stmt->bindValue('id', $row['id']);
|
||||
|
||||
$results = $query_stmt->executeQuery();
|
||||
|
||||
$ii_data = [];
|
||||
while ($ii_row = $results->fetchAssociative())
|
||||
{
|
||||
$id = $ii_row['id'];
|
||||
$invoice_id = $ii_row['invoice_id'];
|
||||
$title = $ii_row['title'];
|
||||
$qty = $ii_row['qty'];
|
||||
$price = $ii_row['price'];
|
||||
$battery_id = $ii_row['battery_id'] ?? '\N';
|
||||
|
||||
$ii_data['invoice_item'][$id] = [
|
||||
$id,
|
||||
$invoice_id,
|
||||
$title,
|
||||
$qty,
|
||||
$price,
|
||||
$battery_id
|
||||
];
|
||||
}
|
||||
|
||||
$file = $this->createDataFileRelatedArchiveData($ii_data, 'invoice_item', 'a');
|
||||
|
||||
if ($file != null)
|
||||
{
|
||||
|
|
@ -159,7 +217,7 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
unlink($file);
|
||||
}
|
||||
|
||||
protected function createDataFileRelatedArchiveData($archive_data, $table_name)
|
||||
protected function createDataFileRelatedArchiveData($archive_data, $table_name, $option)
|
||||
{
|
||||
if (isset($archive_data[$table_name]))
|
||||
{
|
||||
|
|
@ -171,7 +229,7 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
$file = $cache_dir . '/' . $table_name . '_archive.tab';
|
||||
error_log('opening file for archive - ' . $file);
|
||||
|
||||
$fp = fopen($file, 'a');
|
||||
$fp = fopen($file, $option);
|
||||
if ($fp === false)
|
||||
{
|
||||
error_log('could not open file for load data infile - ' . $file);
|
||||
|
|
@ -193,11 +251,7 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
return null;
|
||||
}
|
||||
|
||||
// TODO: make this so you just call one function to create all the tables
|
||||
// pass the year and the table name
|
||||
// set the create sql as a constant or something
|
||||
protected function createJobOrderArchiveTable($year)
|
||||
{
|
||||
protected function createJobOrderArchiveTables($year) {
|
||||
// form the archive table name <original table name>_archive_<year of data being archived>
|
||||
$archive_table_name = 'job_order_archive_' . $year;
|
||||
|
||||
|
|
@ -269,10 +323,142 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
$create_stmt = $db->prepare($create_sql);
|
||||
|
||||
$result = $create_stmt->execute();
|
||||
|
||||
return $archive_table_name;
|
||||
}
|
||||
|
||||
protected function createInvoiceArchiveTable($year)
|
||||
{
|
||||
// form the archive table name <original table name>_archive_<year of data being archived>
|
||||
$archive_table_name = 'invoice_archive_' . $year;
|
||||
|
||||
// create the table if it doesn't exist
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
// TODO: What if table already exists?
|
||||
$create_sql = 'CREATE TABLE IF NOT EXISTS `' . $archive_table_name . '` (
|
||||
`id` int(11) NOT NULL,
|
||||
`user_id` int(11) DEFAULT NULL,
|
||||
`job_order_id` int(11) DEFAULT NULL,
|
||||
`date_create` datetime NOT NULL,
|
||||
`date_paid` datetime DEFAULT NULL,
|
||||
`date_cancel` datetime DEFAULT NULL,
|
||||
`discount` decimal(9,2) NOT NULL,
|
||||
`trade_in` decimal(9,2) NOT NULL,
|
||||
`vat` decimal(9,2) NOT NULL,
|
||||
`vat_exclusive_price` decimal(9,2) NOT NULL,
|
||||
`total_price` decimal(9,2) NOT NULL,
|
||||
`status` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`promo_id` int(11) DEFAULT NULL,
|
||||
`used_customer_tag_id` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`))';
|
||||
|
||||
$create_stmt = $db->prepare($create_sql);
|
||||
|
||||
$result = $create_stmt->execute();
|
||||
}
|
||||
|
||||
protected function createInvoiceItemArchiveTable($year)
|
||||
{
|
||||
// form the archive table name <original table name>_archive_<year of data being archived>
|
||||
$archive_table_name = 'invoice_item_archive_' . $year;
|
||||
|
||||
// create the table if it doesn't exist
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
// TODO: What if table already exists?
|
||||
$create_sql = 'CREATE TABLE IF NOT EXISTS `' . $archive_table_name . '` (
|
||||
`id` int(11) NOT NULL,
|
||||
`invoice_id` int(11) DEFAULT NULL,
|
||||
`title` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`qty` smallint(6) NOT NULL,
|
||||
`price` decimal(9,2) NOT NULL,
|
||||
`battery_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`))';
|
||||
|
||||
$create_stmt = $db->prepare($create_sql);
|
||||
|
||||
$result = $create_stmt->execute();
|
||||
}
|
||||
|
||||
protected function createTicketArchiveTable($year)
|
||||
{
|
||||
// form the archive table name <original table name>_archive_<year of data being archived>
|
||||
$archive_table_name = 'ticket_archive_' . $year;
|
||||
|
||||
// create the table if it doesn't exist
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
// TODO: What if table already exists?
|
||||
$create_sql = 'CREATE TABLE IF NOT EXISTS `' . $archive_table_name . '` (
|
||||
`id` int(11) NOT NULL,
|
||||
`user_id` int(11) DEFAULT NULL,
|
||||
`customer_id` int(11) DEFAULT NULL,
|
||||
`date_create` datetime NOT NULL,
|
||||
`status` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`ticket_type` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`other_ticket_type` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`first_name` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`last_name` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`contact_num` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`details` longtext COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`job_order_id` int(11) DEFAULT NULL,
|
||||
`plate_number` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`ticket_type_id` int(11) DEFAULT NULL,
|
||||
`subticket_type_id` int(11) DEFAULT NULL,
|
||||
`source_of_awareness` varchar(80) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`remarks` longtext COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`other_description` longtext COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`))';
|
||||
|
||||
$create_stmt = $db->prepare($create_sql);
|
||||
|
||||
$result = $create_stmt->execute();
|
||||
}
|
||||
|
||||
protected function createJORejectionArchiveTable($year)
|
||||
{
|
||||
// form the archive table name <original table name>_archive_<year of data being archived>
|
||||
$archive_table_name = 'jo_rejection_archive_' . $year;
|
||||
|
||||
// create the table if it doesn't exist
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
// TODO: What if table already exists?
|
||||
$create_sql = 'CREATE TABLE IF NOT EXISTS `' . $archive_table_name . '` (
|
||||
`id` int(11) NOT NULL,
|
||||
`user_id` int(11) DEFAULT NULL,
|
||||
`hub_id` int(11) DEFAULT NULL,
|
||||
`jo_id` int(11) DEFAULT NULL,
|
||||
`date_create` datetime NOT NULL,
|
||||
`reason` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`remarks` longtext COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||
`contact_person` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`))';
|
||||
|
||||
$create_stmt = $db->prepare($create_sql);
|
||||
|
||||
$result = $create_stmt->execute();
|
||||
}
|
||||
|
||||
protected function createRiderRatingArchiveTable($year)
|
||||
{
|
||||
// form the archive table name <original table name>_archive_<year of data being archived>
|
||||
$archive_table_name = 'jo_rejection_archive_' . $year;
|
||||
|
||||
// create the table if it doesn't exist
|
||||
$db = $this->em->getConnection();
|
||||
|
||||
// TODO: What if table already exists?
|
||||
$create_sql = 'CREATE TABLE IF NOT EXISTS `' . $archive_table_name . '` (
|
||||
`id` int(11) NOT NULL,
|
||||
`rider_id` int(11) DEFAULT NULL,
|
||||
`customer_id` int(11) DEFAULT NULL,
|
||||
`jo_id` int(11) DEFAULT NULL,
|
||||
`date_create` datetime NOT NULL,
|
||||
`rating` int(11) NOT NULL,
|
||||
`comment` longtext COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`))';
|
||||
|
||||
$create_stmt = $db->prepare($create_sql);
|
||||
|
||||
$result = $create_stmt->execute();
|
||||
}
|
||||
|
||||
|
||||
protected function createJobOrderArchiveData($row)
|
||||
{
|
||||
// TODO: this could be shrunk further
|
||||
|
|
@ -436,31 +622,19 @@ class GetJobOrderArchiveDataCommand extends Command
|
|||
return $data;
|
||||
}
|
||||
|
||||
protected function createLoadDataFileForArchiveData($archive_data, $table_name)
|
||||
// TODO: rewrite this to just load the file
|
||||
protected function loadDataFileForArchiveData($file, $table_name)
|
||||
{
|
||||
// cache directory
|
||||
$cache_dir = __DIR__ . '/../../var/cache';
|
||||
|
||||
$file = $cache_dir . '/jo_archive.tab';
|
||||
$file = $cache_dir . '/' $table_name . 'archive.tab';
|
||||
error_log('opening file for jo archive - ' . $file);
|
||||
|
||||
$fp = fopen($file, 'w');
|
||||
if ($fp === false)
|
||||
{
|
||||
error_log('could not open file for load data infile - ' . $file);
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($archive_data as $key => $data)
|
||||
{
|
||||
$line = implode('|', $data) . "\r\n";
|
||||
fwrite($fp, $line);
|
||||
}
|
||||
}
|
||||
|
||||
fclose($fp);
|
||||
|
||||
$conn = $this->em->getConnection();
|
||||
|
||||
// this statement is for job order
|
||||
// TODO: make for other tables
|
||||
$stmt = $conn->prepare('LOAD DATA LOCAL INFILE \'' . $file . '\' INTO TABLE ' . $table_name . '
|
||||
FIELDS TERMINATED BY \'|\'
|
||||
LINES TERMINATED BY \'\\r\\n\'
|
||||
|
|
|
|||
Loading…
Reference in a new issue