Ver Fonte

major fixes

Jad Meouchy há 9 anos atrás
pai
commit
f5dbd197c1

+ 56 - 0
cron/ftpwriter.php

@@ -0,0 +1,56 @@
+<?php
+
+include '../db.php';
+
+
+//connect
+$conn = ftp_connect(FTP_HOST, FTP_PORT);
+
+if(!ftp_login($conn, FTP_USER, FTP_PASS)) 
+{
+	echo "Unable to login to FTP\n";
+	return;
+}
+
+ftp_chdir($conn, FTP_DIR);
+
+
+
+$stmt = $dbh->prepare(
+	"SELECT DISTINCT id_company, ftp_directory
+	FROM file_row_update
+	INNER JOIN file_row USING(id_file_row)
+	INNER JOIN file USING(id_file)
+	INNER JOIN company USING(id_company)
+	WHERE date_modified > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 7 DAY)");
+
+$stmt->execute();
+$companies = $stmt->fetchAll(PDO::FETCH_ASSOC);
+
+foreach($companies as $company)
+{
+	$id_company = $company['id_company'];
+	$week_number = date('W');
+
+	//make the csv in memory
+	$f = fopen('php://temp/maxmemory:1048576', 'w');
+	
+	getRowsByCompanyCSV($id_company, $f, $week_number);
+	
+	rewind($f);
+
+
+	$remote_filename = $company['ftp_directory'] . '-' . date('Y-W') . '.csv';
+
+	if(!ftp_fput($conn, $remote_filename, $f, FTP_ASCII))
+	{
+		echo "Error uploading file.\n";
+		return;
+	}
+}
+
+ftp_close($conn);
+
+echo "DONE\n";
+
+?>

+ 71 - 12
db.php

@@ -34,6 +34,22 @@ function getCompanies()
 	return $rows;
 }
 
+function getCompany($id_company)
+{
+	global $dbh;
+	
+	$stmt = $dbh->prepare(
+		"SELECT id_company, name, ftp_directory, description
+		FROM company
+		WHERE id_company = :id_company");
+	$stmt->bindValue(':id_company', $id_company);
+	$stmt->execute();
+	
+	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+	
+	return $rows;
+}
+
 function getCompanyDirectories()
 {
 	global $dbh;
@@ -45,12 +61,11 @@ function getCompanyDirectories()
 	return $rows;
 }
 
-function getRowsByCompany($id_company)
+function getRowsByCompany($id_company, $week_number = null)
 {
 	global $dbh;
 	
-	$stmt = $dbh->prepare(
-		"SELECT
+	$sql = "SELECT
 			id_file_row, row_number,
 			division, consignee,
 			DATE_FORMAT(date_called_in, '%m/%d/%Y') date_called_in,
@@ -89,27 +104,43 @@ function getRowsByCompany($id_company)
 		FROM file_row
 		INNER JOIN file USING(id_file)
 		WHERE id_company = :id_company
-		LIMIT 5000");
-								
-	$stmt->execute(array(':id_company' => $id_company));
+		" . ($week_number ? 
+		" AND id_file_row IN
+		(
+			SELECT id_file_row
+			FROM file_row_update
+			WHERE WEEK(date_modified) = :week_number
+		) " : "") .
+		"LIMIT 5000";
+	
+	$stmt = $dbh->prepare($sql);
 
+	if($week_number)
+		$stmt->bindValue(':week_number', $week_number);
+	
+	$stmt->bindValue(':id_company', $id_company);
+	
+	$stmt->execute();
 	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
 	
 	return $rows;
 }
 
-function getRowUpdatesByComapny($id_company)
+function getRowUpdatesByCompany($id_company)
 {
 	global $dbh;
 	
 	$stmt = $dbh->prepare(
-		"SELECT DATE_FORMAT(date_modified, '%m/%d/%Y %h:%i %p') date_modified,
+		"SELECT DATE_FORMAT(fru.date_modified, '%m/%d/%Y %h:%i %p') date_modified,
 				user.id_user id_user, user.name user_name, id_file_row,
-				DATE_FORMAT(time_pickup, '%m/%d/%Y %h:%i %p') time_pickup,
-				DATE_FORMAT(time_depart, '%m/%d/%Y %h:%i %p') time_depart,
-				DATE_FORMAT(bol_delivered, '%m/%d/%Y %h:%i %p') bol_delivered
-		FROM file_row_update
+				fr.dispatch_number dispatch_number,
+				fr.dispatch_reference dispatch_reference,
+				DATE_FORMAT(fru.time_pickup, '%m/%d/%Y %h:%i %p') time_pickup,
+				DATE_FORMAT(fru.time_depart, '%m/%d/%Y %h:%i %p') time_depart,
+				DATE_FORMAT(fru.bol_delivered, '%m/%d/%Y %h:%i %p') bol_delivered
+		FROM file_row_update fru
 		INNER JOIN user USING(id_user)
+		INNER JOIN file_row fr USING(id_file_row)
 		WHERE id_company = :id_company
 		ORDER BY date_created DESC
 		LIMIT 200");
@@ -121,5 +152,33 @@ function getRowUpdatesByComapny($id_company)
 	return $rows;
 }
 
+function getRowsByCompanyCSV($id_company, $f, $week_number = null)
+{
+	$file_rows = getRowsByCompany($id_company, $week_number);
+
+	$headers = array('Division', 'Consignee', 'Called In', 'Dispatch #', 'Shipper', 'Ready', 'Address 1', 'Address 2', 'City', 'ST', 'Zip', 'Phone',
+						'', '',
+						'Ready Time', 'Close Time', 'Pickup Time', 'Depart Time', 'BOL Delivered',
+						'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+						'Dispatch Refere',
+						'', '', '', '', '', '', '', '',
+						'Ctns', 'Weight', 'Cube');
+						
+	fputcsv($f, $headers);
+
+	foreach($file_rows as $row)
+	{
+		fputcsv($f,
+			array($row['division'], $row['consignee'], $row['date_called_in'], $row['dispatch_number'], $row['shipper'], $row['date_ready'], $row['address_1'], $row['address_2'], $row['city'], $row['state'], $row['zip'], $row['phone'],
+			'', '',
+			$row['time_ready'], $row['time_close'], $row['time_pickup'], $row['time_depart'], $row['bol_delivered'],
+			'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+			$row['dispatch_reference'],
+			'', '', '', '', '', '', '', '',
+			$row['ctns'], $row['weight'], $row['cube']
+			));
+	}
+}
+
 
 ?>

+ 36 - 0
www/api/downloadCSV.php

@@ -0,0 +1,36 @@
+<?php
+
+require('auth-validate.php');
+require('../../db.php');
+
+
+
+$id_company = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
+
+if(!$id_company)
+{
+	http_response_code(400);
+	echo 'missing parameter: id';
+	return;
+}
+
+
+header("Content-type: text/csv");
+header("Content-Disposition: attachment; filename=file.csv");
+header("Pragma: no-cache");
+header("Expires: 0");
+
+
+
+$f = fopen('php://temp/maxmemory:1048576', 'w');
+
+getRowsByCompanyCSV($id_company, $f);
+
+
+rewind($f);
+$csv = stream_get_contents($f);
+fclose($f);
+
+echo $csv;
+
+?>

+ 1 - 1
www/api/getRows.php

@@ -13,7 +13,7 @@ for($c = 0; $c < count($companies); $c++)
 {
 	$companies[$c]['file_rows'] = getRowsByCompany($companies[$c]['id_company']);
 	
-	$companies[$c]['row_updates'] = getRowUpdatesByComapny($companies[$c]['id_company']);
+	$companies[$c]['row_updates'] = getRowUpdatesByCompany($companies[$c]['id_company']);
 }
 
 echo json_encode($companies, JSON_PRETTY_PRINT);

+ 3 - 3
www/api/getRowsByCompany.php

@@ -4,9 +4,6 @@ require('auth-validate.php');
 require('../../db.php');
 
 
-header('Content-Type: application/json');
-
-
 $id_company = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
 
 if(!$id_company)
@@ -17,6 +14,9 @@ if(!$id_company)
 }
 
 
+header('Content-Type: application/json');
+
+
 $rows = getRowsByCompany($id_company);
 
 echo json_encode($rows, JSON_PRETTY_PRINT);

+ 0 - 13
www/css/sd.css

@@ -26,17 +26,4 @@
 	text-align: center;
 	
 	margin-top: 1em;
-}
-
-.tab-content .dataTables_wrapper
-{
-	padding-top: 2em;
-	padding-bottom: 2em;
-	
-	border-bottom: 1px solid #f0f0f0;
-}
-
-.tab-content .dataTables_wrapper:first-child
-{
-	padding-top: 0;
 }

+ 4 - 0
www/html/screen/audit.html

@@ -0,0 +1,4 @@
+<div id="screen-audit" class="screen">
+	<div class="container">
+	</div>
+</div>

+ 9 - 2
www/html/screen/sd.html

@@ -3,7 +3,14 @@
 		<img src="media/sd.gif" height="100"/>
 		<br/>
 		<br/>
-		<ul class="nav nav-tabs"></ul>
-		<div class="tab-content"></div>
+		
+		<ul class="nav nav-tabs">
+			<li id="audit-tab-parent"><a data-toggle="tab" href="#audit-content" id="audit-tab">Audit Log</a></li>
+		</ul>
+		
+		<div class="tab-content">
+			<div id="audit-content" class="tab-pane fade in">
+			</div>
+		</div>
 	</div>
 </div>

+ 1 - 1
www/index.html

@@ -54,7 +54,7 @@
 $(function()
 {
 	loadHTML('html/', [
-			'nav', 'screen-login', 'screen-sd', 'screen-admin'])
+			'nav', 'screen-login', 'screen-sd', 'screen-admin', 'screen-audit'])
 			.done(window.loadApp);
 });
 </script>

+ 8 - 0
www/js/init.js

@@ -25,8 +25,16 @@ function loadApp()
 	{
 		var id_company = $(this).closest('li').data('id_company');
 		
+		if(!id_company)
+			return;
+		
 		tables[id_company].draw();
 	});
+	
+	$('#screen-sd').delegate('button.download-csv', 'click', function(e)
+	{
+		window.open('api/downloadCSV.php?id=' + $(this).data('id_company'));
+	});
 }
 
 function login(e)

+ 10 - 3
www/js/routes.js

@@ -104,14 +104,18 @@ function loadAllData()
 				//add tab
 				$('<li><a data-toggle="tab" href="#table-' + id_company + '-container">' + company['name'] + '</a></li>')
 					.data('id_company', id_company)
-					.appendTo('#screen-sd ul.nav-tabs');
+					.insertBefore('#audit-tab-parent');
 				
 				//add table
 				$('<div id="table-' + id_company + '-container" class="tab-pane fade in">'
 					+ '<table id="table-' + id_company + '" class="table table-striped editable" width="100%"></table>'
-					+ '<table id="table-updates-' + id_company + '" class="table table-striped editable" width="100%"></table>'
+					+ '<button class="download-csv" data-id_company="' + id_company + '">Download CSV</button>'
 				+ '</div>')
 				.appendTo('#screen-sd .tab-content');
+				
+				$('<h1>' + company['name'] + '</h1>'
+				+ '<table id="table-updates-' + id_company + '" class="table table-striped editable" width="100%"></table>')
+					.appendTo('#audit-content');
 
 				//create the datatable
 				tables[id_company] = createTable(id_company, '#screen-sd #table-' + id_company);
@@ -245,7 +249,7 @@ function createTable(id_company, table_dom)
 
 				
 				//send the update up to the server thru api
-				$.post('api/CreateRowUpdate.php?id_file_row=' + id_file_row, row_partial)
+				$.post('api/createRowUpdate.php?id_file_row=' + id_file_row, row_partial)
 					.done(function(response)
 					{
 						console.log(response);
@@ -299,6 +303,9 @@ function createUpdatesTable(id_company, table_dom)
 			{ 'title': 'Date', 'data': 'date_modified', 'defaultContent': '&nbsp;', 'className': 'date_modified' },
 			{ 'title': 'User', 'data': 'user_name', 'defaultContent': '&nbsp;', 'className': 'user_name' },
 			
+			{ 'title': 'Dispatch&nbsp;#', 'data': 'dispatch_number', 'defaultContent': '', 'className': 'dispatch_number' },
+			{ 'title': 'Dispatch&nbsp;Reference', 'data': 'dispatch_reference', 'defaultContent': '', 'className': 'dispatch_reference' },
+			
 			{ 'title': 'Pickup&nbsp;Time', 'data': 'time_pickup', 'defaultContent': '&nbsp;', 'className': 'time_pickup' },
 			{ 'title': 'Depart&nbsp;Time', 'data': 'time_depart', 'defaultContent': '&nbsp;', 'className': 'time_depart' },
 			{ 'title': 'BOL&nbsp;Delivered', 'data': 'bol_delivered', 'defaultContent': '&nbsp;', 'className': 'bol_delivered' }