瀏覽代碼

adding drivers and trailer

Jad Meouchy 9 年之前
父節點
當前提交
abe472d66e
共有 6 個文件被更改,包括 208 次插入21 次删除
  1. 24 2
      db.php
  2. 24 0
      www/api/getDriversByCompany.php
  3. 1 1
      www/api/getRows.php
  4. 54 0
      www/api/updateRowImmediate.php
  5. 2 0
      www/js/init.js
  6. 103 18
      www/js/routes.js

+ 24 - 2
db.php

@@ -12,7 +12,7 @@ try
 catch(Exception $e)
 {
 	error_log(print_r($e, true));
-	
+
 	http_response_code(500);
 	echo "unable to connect to DB\n";
 	die;
@@ -145,10 +145,13 @@ function getRowsByCompany($id_company, $week_number = null)
 			
 			dispatch_reference,
 			ctns, weight, cube,
-			DATE_FORMAT(file_row.date_processed, '%m/%d/%Y') date_processed
+			DATE_FORMAT(file_row.date_processed, '%m/%d/%Y') date_processed,
+			
+			driver.id_driver id_driver, trailer
 
 		FROM file_row
 		INNER JOIN file USING(id_file)
+		LEFT OUTER JOIN driver USING(id_driver)
 		WHERE id_company = :id_company
 		" . ($week_number ? 
 		" AND
@@ -235,5 +238,24 @@ function getRowsByCompanyCSV($id_company, $f, $week_number = null)
 	}
 }
 
+function getDriversByCompany($id_company)
+{
+	global $dbh;
+	
+	$stmt = $dbh->prepare(
+		"SELECT id_driver, driver.name
+		FROM driver_company
+		INNER JOIN driver USING(id_driver)
+		WHERE driver_company.id_company = :id_company
+		ORDER BY name DESC
+		LIMIT 500");
+	
+	$stmt->execute(array(':id_company' => $id_company));
+
+	$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
+	
+	return $rows;
+}
+
 
 ?>

+ 24 - 0
www/api/getDriversByCompany.php

@@ -0,0 +1,24 @@
+<?php
+
+require('auth-validate.php');
+require('../../db.php');
+
+
+header('Content-Type: application/json');
+
+
+$id_company = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
+
+if(!$id_company)
+{
+	http_response_code(400);
+	echo 'missing parameter: id';
+	return;
+}
+
+
+$rows = getDriversByCompany($id_company);
+
+echo json_encode($rows, JSON_PRETTY_PRINT);
+
+?>

+ 1 - 1
www/api/getRows.php

@@ -12,8 +12,8 @@ $companies = getCompanies();
 for($c = 0; $c < count($companies); $c++)
 {
 	$companies[$c]['file_rows'] = getRowsByCompany($companies[$c]['id_company']);
-	
 	$companies[$c]['row_updates'] = getRowUpdatesByCompany($companies[$c]['id_company']);
+	$companies[$c]['drivers'] = getDriversByCompany($companies[$c]['id_company']);
 }
 
 echo json_encode($companies, JSON_PRETTY_PRINT);

+ 54 - 0
www/api/updateRowImmediate.php

@@ -0,0 +1,54 @@
+<?php
+require('auth-validate.php');
+require('../../db.php');
+
+
+$id_user = $_SESSION['id_user'];
+$id_file_row = isset($_REQUEST['id_file_row']) ? $_REQUEST['id_file_row'] : null;
+
+
+$fields_to_check = array('id_driver', 'trailer');
+$dynamic_fields = '';
+
+$params = array(
+	':id_file_row' => $id_file_row
+);
+
+
+foreach($fields_to_check as $key)
+	if(isset($_REQUEST[$key]))
+	{
+		$params[":$key"] = $_REQUEST[$key];
+		
+		if(strlen($dynamic_fields) > 0)
+			$dynamic_fields .= ", ";
+		
+		$dynamic_fields .= "$key = :$key";
+	}
+
+	
+$sql = "UPDATE file_row
+	SET $dynamic_fields
+	WHERE id_file_row = :id_file_row";
+
+
+$stmt = $dbh->prepare($sql);
+	
+try
+{
+	$ret = $stmt->execute($params);
+}
+catch(Exception $e)
+{
+	http_response_code(500);
+	
+	//TODO: probably shouldn't report this internal exception message to the user
+	echo $e->getMessage();
+	
+	return;
+}
+
+echo 'OK';
+
+
+?>

+ 2 - 0
www/js/init.js

@@ -8,6 +8,8 @@ var user;
 var tables = [];
 var table_updates = [];
 
+var drivers_by_company = {};
+
 
 
 function loadApp()

+ 103 - 18
www/js/routes.js

@@ -76,7 +76,7 @@ function loadAllData()
 {
 	console.log('requesting data');
 	
-	$.post('api/getRows.php', 'json')
+	$.get('api/getRows.php', 'json')
 	.done(function(companies)
 	{
 		console.log('received data');
@@ -99,7 +99,18 @@ function loadAllData()
 					rows[id_file_row] = company['file_rows'][r];
 				}
 			
+			
+			drivers_by_company[id_company] = {}
+			
+			for(var i = 0; company['drivers'] && i < company['drivers'].length; i++)
+			{
+				var driver = company['drivers'][i];
+				var id_driver = driver['id_driver'];
+				
+				drivers_by_company[id_company][id_driver] = driver;
+			}
 
+			
 			//if the company's tab doesn't exist, create it
 			if(!tables[id_company])
 			{
@@ -170,6 +181,19 @@ function createTable(id_company, table_dom)
 			{ 'title': 'Dispatch&nbsp;#', 'data': 'dispatch_number', 'defaultContent': '', 'className': 'dispatch_number' },
 			{ 'title': 'Shipper', 'data': 'shipper', 'defaultContent': '', 'className': 'shipper' },
 			{ 'title': 'Ready', 'data': 'date_ready', 'defaultContent': '', 'className': 'date_ready' },
+			
+			{ 'title': 'Driver', 'data': 'id_driver', 'defaultContent': '', 'className': 'id_driver',
+				'render': function(data, type, row)
+				{
+					var id_driver = row['id_driver'];
+					
+					if(!id_driver)
+						return '';
+					
+					return drivers_by_company[id_company][id_driver]['name'];
+				}
+			},
+			{ 'title': 'Trailer', 'data': 'trailer', 'defaultContent': '', 'className': 'trailer' },
 
 			{ 'title': 'Address&nbsp;1', 'data': 'address_1', 'address_1': '', 'className': 'address_1' },
 			{ 'title': 'Address&nbsp;2', 'data': 'address_2', 'address_2': '', 'className': 'address_2' },
@@ -225,12 +249,31 @@ function createTable(id_company, table_dom)
 	});
 	
 	
+	var driver_options = [
+	{
+		"value": "",
+		"label": "None"
+	}];
+	
+	
+	for(var id_driver in drivers_by_company[id_company])
+	{
+		var driver = drivers_by_company[id_company][id_driver];
+
+		driver_options.push(
+		{
+			"value": id_driver,
+			"label": driver.name
+		});
+	}
+	
+	
 	var editor = new $.fn.dataTable.Editor(
 	{
 		idSrc: 'id_file_row',
 		table: table_dom,
-		fields: [
-		{
+		fields:
+		[{
 			label: "Pickup Time:",
 			name: "time_pickup",
 			type: "datetime",
@@ -247,6 +290,17 @@ function createTable(id_company, table_dom)
 			name: "bol_delivered",
 			type: "datetime",
 			format: 'MM/DD/YYYY hh:mm A'
+		},
+		{
+			label: "Trailer:",
+			name: "trailer",
+			type: "text"
+		},
+		{
+			label: "Driver:",
+			name: "id_driver",
+			type: "select",
+			options: driver_options
 		}],
 		ajax: function(method, url, d, success, error)
 		{
@@ -258,6 +312,11 @@ function createTable(id_company, table_dom)
 					
 				var row_partial = d['data'][id_file_row];
 				
+				
+				var properties_auditable = ['time_pickup', 'time_depart', 'bol_delivered'];
+				var is_auditable = false;
+
+				
 				//go thru all the properties on the object
 				for(var property in row_partial)
 				{
@@ -265,24 +324,46 @@ function createTable(id_company, table_dom)
 					
 					//update our master record
 					rows[id_file_row][property] = value;
+					
+					//check if this is an auditable property
+					if(properties_auditable.indexOf(property) !== -1)
+						is_auditable = true;
 				}
 
 				
-				//send the update up to the server thru api
-				$.post('api/createRowUpdate.php?id_file_row=' + id_file_row, row_partial)
-					.done(function(response)
-					{
-						console.log(response);
-						
-						//report to the datatable a full updated row
-						success({ "data": [ rows[id_file_row] ] });
-					})
-					.fail(function(err, xhr, text)
-					{
-						console.log(err['responseText']);
-						
-						//TODO: handle error
-					});
+				if(is_auditable)
+				{
+					//send the update up to the server thru api
+					$.post('api/createRowUpdate.php?id_file_row=' + id_file_row, row_partial)
+						.done(function(response)
+						{
+							console.log(response);
+							
+							//report to the datatable a full updated row
+							success({ "data": [ rows[id_file_row] ] });
+						})
+						.fail(function(err, xhr, text)
+						{
+							console.log(err['responseText']);
+							
+							//TODO: handle error
+						});
+				}
+				else
+				{
+					$.post('api/updateRowImmediate.php?id_file_row=' + id_file_row, row_partial)
+						.done(function(response)
+						{
+							console.log(response);
+							
+							//report to the datatable a full updated row
+							success({ "data": [ rows[id_file_row] ] });
+						})
+						.fail(function(err, xhr, text)
+						{
+							console.log(err['responseText']);
+						});
+				}
 			}
 		}
 	});
@@ -302,6 +383,10 @@ function createTable(id_company, table_dom)
 		editor.bubble(this, 'bol_delivered');
 	});
 	
+	$(table_dom).on('click', 'td.id_driver, td.trailer', function(e) {
+		editor.bubble(this, ['trailer', 'id_driver']);
+	});
+	
 	/*
 	$(table_dom).on('click', 'td.time_pickup, td.time_depart, td.bol_delivered', function(e) {
 		editor.bubble(this, [ 'time_pickup', 'time_depart', 'bol_delivered' ]);