Ver código fonte

fix updateCell

Jad Meouchy 9 anos atrás
pai
commit
06a5c2609f
4 arquivos alterados com 153 adições e 62 exclusões
  1. 24 5
      db.php
  2. 46 34
      schema.sql
  3. 35 12
      www/api/updateCell.php
  4. 48 11
      www/js/routes.js

+ 24 - 5
db.php

@@ -46,11 +46,30 @@ function getCompanyData($id_company)
 			DATE_FORMAT(date_ready, '%m/%d/%Y') date_ready,
 			address_1, address_2, city, state, zip, phone,
 			
-			TIME_FORMAT(time_ready, '%H:%i %p') time_ready,
-			TIME_FORMAT(time_close, '%H:%i %p') time_close,
-			TIME_FORMAT(time_pickup, '%H:%i %p') time_pickup,
-			TIME_FORMAT(time_depart, '%H:%i %p') time_depart,
-			bol_delivered,
+			TIME_FORMAT(time_ready, '%h:%i %p') time_ready,
+			TIME_FORMAT(time_close, '%h:%i %p') time_close,
+			
+			(SELECT DATE_FORMAT(IFNULL(time_pickup, file_row.time_pickup), '%m/%d/%Y %h:%i %p')
+				FROM file_row_update
+				WHERE id_file_row = file_row.id_file_row
+				AND time_pickup IS NOT NULL
+				ORDER BY date_modified DESC
+				LIMIT 1) time_pickup,
+				
+			(SELECT DATE_FORMAT(IFNULL(time_depart, file_row.time_depart), '%m/%d/%Y %h:%i %p')
+				FROM file_row_update
+				WHERE id_file_row = file_row.id_file_row
+				AND time_depart IS NOT NULL
+				ORDER BY date_modified DESC
+				LIMIT 1) time_depart,
+			
+			(SELECT DATE_FORMAT(IFNULL(bol_delivered, file_row.bol_delivered), '%m/%d/%Y %h:%i %p')
+				FROM file_row_update
+				WHERE id_file_row = file_row.id_file_row
+				AND bol_delivered IS NOT NULL
+				ORDER BY date_modified DESC
+				LIMIT 1) bol_delivered,
+			
 			dispatch_reference,
 			ctns, weight, cube
 

+ 46 - 34
schema.sql

@@ -22,32 +22,38 @@ CREATE TABLE `company` (
   `name` varchar(64) NOT NULL,
   `description` text,
   PRIMARY KEY (`id_company`)
-) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
 
-/*Table structure for table `files_processed` */
+/*Table structure for table `file` */
 
-DROP TABLE IF EXISTS `files_processed`;
+DROP TABLE IF EXISTS `file`;
 
-CREATE TABLE `files_processed` (
-  `id_file_processed` int(10) unsigned NOT NULL AUTO_INCREMENT,
+CREATE TABLE `file` (
+  `id_file` int(10) unsigned NOT NULL AUTO_INCREMENT,
   `id_company` smallint(5) unsigned NOT NULL,
+  `dir` varchar(64) DEFAULT NULL,
   `filename` varchar(64) DEFAULT NULL,
+  `md5_hash` char(32) DEFAULT NULL,
   `size` bigint(20) unsigned DEFAULT NULL,
   `num_rows` int(10) unsigned DEFAULT NULL,
-  `num_failed` int(10) unsigned DEFAULT NULL,
+  `num_ok` int(10) unsigned DEFAULT NULL,
+  `num_fail` int(10) unsigned DEFAULT NULL,
+  `num_skip` int(10) unsigned DEFAULT NULL,
   `date_processed` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
-  PRIMARY KEY (`id_file_processed`),
+  PRIMARY KEY (`id_file`),
+  UNIQUE KEY `filename` (`md5_hash`,`size`),
   KEY `id_company` (`id_company`),
-  CONSTRAINT `files_processed_ibfk_1` FOREIGN KEY (`id_company`) REFERENCES `company` (`id_company`) ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+  CONSTRAINT `file_ibfk_1` FOREIGN KEY (`id_company`) REFERENCES `company` (`id_company`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
 
-/*Table structure for table `records` */
+/*Table structure for table `file_row` */
 
-DROP TABLE IF EXISTS `records`;
+DROP TABLE IF EXISTS `file_row`;
 
-CREATE TABLE `records` (
-  `id_record` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
-  `id_company` smallint(6) unsigned NOT NULL,
+CREATE TABLE `file_row` (
+  `id_file_row` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `id_file` int(10) unsigned NOT NULL,
+  `row_number` int(11) unsigned NOT NULL,
   `division` varchar(64) DEFAULT NULL COMMENT 'Dynamic Delivery Services',
   `consignee` varchar(32) DEFAULT NULL COMMENT 'GW-PVH',
   `date_called_in` date DEFAULT NULL COMMENT '05/04/2016',
@@ -62,33 +68,38 @@ CREATE TABLE `records` (
   `phone` varchar(32) DEFAULT NULL COMMENT '2015551234',
   `time_ready` time DEFAULT NULL COMMENT '08:00 AM',
   `time_close` time DEFAULT NULL COMMENT '05:00 PM',
-  `time_pickup` time DEFAULT NULL,
-  `time_depart` time DEFAULT NULL,
-  `bol_delivered` varchar(64) DEFAULT NULL,
+  `time_pickup` datetime DEFAULT NULL COMMENT 'user entered',
+  `time_depart` datetime DEFAULT NULL COMMENT 'user entered',
+  `bol_delivered` datetime DEFAULT NULL COMMENT 'user entered',
   `dispatch_reference` varchar(32) DEFAULT NULL,
   `ctns` int(11) DEFAULT NULL COMMENT '20',
   `weight` decimal(10,0) DEFAULT NULL COMMENT '500.00',
   `cube` decimal(10,0) DEFAULT NULL COMMENT '42.00',
-  PRIMARY KEY (`id_record`),
-  KEY `records_ibfk_1` (`id_company`),
-  CONSTRAINT `records_ibfk_1` FOREIGN KEY (`id_company`) REFERENCES `company` (`id_company`) ON UPDATE CASCADE
-) ENGINE=InnoDB AUTO_INCREMENT=162 DEFAULT CHARSET=latin1;
-
-/*Table structure for table `update` */
-
-DROP TABLE IF EXISTS `update`;
-
-CREATE TABLE `update` (
-  `id_record` bigint(10) unsigned NOT NULL,
+  `date_processed` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  `status` varchar(16) DEFAULT NULL COMMENT '"ok" or "fail"',
+  PRIMARY KEY (`id_file_row`),
+  UNIQUE KEY `id_file` (`id_file`,`row_number`),
+  CONSTRAINT `file_row_ibfk_1` FOREIGN KEY (`id_file`) REFERENCES `file` (`id_file`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=334 DEFAULT CHARSET=latin1;
+
+/*Table structure for table `file_row_update` */
+
+DROP TABLE IF EXISTS `file_row_update`;
+
+CREATE TABLE `file_row_update` (
+  `id_file_row_update` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+  `id_file_row` bigint(10) unsigned NOT NULL,
+  `time_pickup` datetime DEFAULT NULL,
+  `time_depart` datetime DEFAULT NULL,
+  `bol_delivered` datetime DEFAULT NULL,
   `id_user` int(10) unsigned NOT NULL,
-  `key` varchar(32) DEFAULT NULL,
-  `value` varchar(64) DEFAULT NULL,
   `date_modified` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
+  PRIMARY KEY (`id_file_row_update`),
   KEY `id_user` (`id_user`),
-  KEY `id_record` (`id_record`),
-  CONSTRAINT `update_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`) ON UPDATE CASCADE,
-  CONSTRAINT `update_ibfk_2` FOREIGN KEY (`id_record`) REFERENCES `records` (`id_record`) ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+  KEY `id_record` (`id_file_row`),
+  CONSTRAINT `file_row_update_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `user` (`id_user`) ON UPDATE CASCADE,
+  CONSTRAINT `file_row_update_ibfk_2` FOREIGN KEY (`id_file_row`) REFERENCES `file_row` (`id_file_row`) ON UPDATE CASCADE
+) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
 
 /*Table structure for table `user` */
 
@@ -99,6 +110,7 @@ CREATE TABLE `user` (
   `id_company` smallint(5) unsigned NOT NULL,
   `email` varchar(64) NOT NULL,
   `password` varchar(128) DEFAULT NULL,
+  `name` varchar(128) DEFAULT NULL,
   `date_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (`id_user`),
   UNIQUE KEY `email` (`email`),

+ 35 - 12
www/api/updateCell.php

@@ -1,23 +1,46 @@
 <?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;
-$key = isset($_REQUEST['key']) ? $_REQUEST['key'] : null;
-$value = isset($_REQUEST['value']) ? $_REQUEST['value'] : null;
-
-
-$stmt_file = $dbh->prepare(
-	"INSERT INTO file_row_update (id_file_row, key, value, id_user)
-	VALUES(:id_file_row, :key, :value, :id_user)";
-							
-$stmt_file->execute();
 
-$rows = $stmt_file->fetchAll(PDO::FETCH_ASSOC);
+//example: 06-09-2016 2:32 AM
+$time_pickup = isset($_REQUEST['time_pickup']) ? $_REQUEST['time_pickup'] : null;
+$time_depart = isset($_REQUEST['time_depart']) ? $_REQUEST['time_depart'] : null;
+$bol_delivered = isset($_REQUEST['bol_delivered']) ? $_REQUEST['bol_delivered'] : null;
+
+
+$stmt = $dbh->prepare(
+	"INSERT INTO file_row_update
+		(id_user, id_file_row, time_pickup, time_depart, bol_delivered)
+	VALUES
+		(:id_user, :id_file_row,
+			STR_TO_DATE(:time_pickup, '%m/%d/%Y %h:%i %p'),
+			STR_TO_DATE(:time_depart, '%m/%d/%Y %h:%i %p'),
+			STR_TO_DATE(:bol_delivered, '%m/%d/%Y %h:%i %p')
+		)");
+
+try
+{
+	$ret = $stmt->execute(array(
+		':id_user' => $id_user,
+		':id_file_row' => $id_file_row,
+		':time_pickup' => $time_pickup,
+		':time_depart' => $time_depart,
+		':bol_delivered' => $bol_delivered
+	));
+}
+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';
 

+ 48 - 11
www/js/routes.js

@@ -1,5 +1,6 @@
 var tables = [];
 var editors = [];
+var rows = {};
 
 
 function initializeRoutes()
@@ -85,6 +86,14 @@ function loadAllData()
 			var company = companies[c];
 			var id_company = company['id_company'];
 			
+			
+			if(company['file_rows'])
+				for(var r = 0; r < company['file_rows'].length; r++)
+				{
+					var id_file_row = company['file_rows'][r]['id_file_row'];
+					rows[id_file_row] = company['file_rows'][r];
+				}
+			
 
 			//if the company's tab doesn't exist, create it
 			if(!tables[id_company])
@@ -117,7 +126,7 @@ function loadAllData()
 	})
 	.fail(function(err, xhr, text)
 	{
-		console.error(err.responseText);
+		console.error(err['responseText']);
 	});
 }
 
@@ -185,8 +194,6 @@ function createTable(id_company, table_dom)
 	});
 	
 	
-	var todo = {};
-	
 	var editor = new $.fn.dataTable.Editor(
 	{
 		idSrc: 'id_file_row',
@@ -196,31 +203,61 @@ function createTable(id_company, table_dom)
 			label: "Pickup Time:",
 			name: "time_pickup",
 			type: "datetime",
-			format: 'MM-DD-YYYY h:mm A'
+			format: 'MM/DD/YYYY hh:mm A'
 		},
 		{
 			label: "Depart Time:",
 			name: "time_depart",
 			type: "datetime",
-			format: 'MM-DD-YYYY h:mm A'
+			format: 'MM/DD/YYYY hh:mm A'
 		},
 		{
 			label: "BOL Delivered:",
 			name: "bol_delivered",
 			type: "datetime",
-			format: 'MM-DD-YYYY h:mm A'
+			format: 'MM/DD/YYYY hh:mm A'
 		}],
 		ajax: function(method, url, d, success, error)
 		{
-			//var output = { data: [] };
-			
-			console.log(d);
- 
-			//success(d);
+			if(d['action'] === 'edit')
+			{
+				//just get the first row
+				var id_file_row;
+					for(id_file_row in d['data']);
+					
+				var row_partial = d['data'][id_file_row];
+				
+				//go thru all the properties on the object
+				for(var property in row_partial)
+				{
+					var value = row_partial[property];
+					
+					//update our master record
+					rows[id_file_row][property] = value;
+				}
+
+				
+				//send the update up to the server thru api
+				$.post('api/updateCell.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
+					});
+			}
 		}
 	});
 	
 	
+	
 	//attach the editor
 	$(table_dom).on('click', 'td.time_pickup', function(e) {
 		editor.bubble(this, 'time_pickup');