From 5a1ef1a0a657e2bd4e94425f861b26593663ac9f Mon Sep 17 00:00:00 2001
From: Juan Ferrer Toribio <juan.ferrer.toribio@gmail.com>
Date: Sun, 24 Apr 2016 13:23:34 +0200
Subject: [PATCH] Errores solucionados

---
 agi-bin/incoming.php        |  4 +---
 debian/changelog            |  2 +-
 sql/customer_from_phone.sql | 21 +++++++++++----------
 sql/extension_is_valid.sql  | 24 ++++++++++++++++++++++++
 sql/phone_format.sql        | 19 ++++++++++---------
 sql/phone_is_valid.sql      | 11 ++++++-----
 sql/queue_is_valid.sql      | 23 +++++++++++++++++++++++
 sql/upgrade.sql             | 26 ++++++++++++++------------
 8 files changed, 90 insertions(+), 40 deletions(-)
 create mode 100644 sql/extension_is_valid.sql
 create mode 100644 sql/queue_is_valid.sql

diff --git a/agi-bin/incoming.php b/agi-bin/incoming.php
index a67b0bf..641cab5 100755
--- a/agi-bin/incoming.php
+++ b/agi-bin/incoming.php
@@ -32,7 +32,7 @@ if ($db->getValue ('SELECT COUNT(*) > 0 FROM blacklist WHERE phone = #', [$calle
 
 $sundayFestive = $db->getValue ('SELECT sunday_festive FROM config');
 
-if (date ('N') == 6 && $sundayFestive)
+if (date ('N') == 7 && $sundayFestive)
 {
 	Agi::exec ('SET VARIABLE MACRO playback');
 	Agi::exec ('SET VARIABLE ARG1 out-of-ours');
@@ -65,8 +65,6 @@ if ($customer)
 		Agi::exec ('SET VARIABLE MACRO playback');
 		Agi::exec ('SET VARIABLE ARG1 busy');
 	}
-
-	exit ();
 }
 
 ?>
diff --git a/debian/changelog b/debian/changelog
index 6a9b835..68e3003 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-vn-asterisk (1.004-deb7) stable; urgency=low
+vn-asterisk (1.005-deb7) stable; urgency=low
 
   * Initial Release.
 
diff --git a/sql/customer_from_phone.sql b/sql/customer_from_phone.sql
index 1f66a22..813e7bb 100644
--- a/sql/customer_from_phone.sql
+++ b/sql/customer_from_phone.sql
@@ -4,17 +4,18 @@
  * @param v_phone The caller phone number
  * @return The customer id or %NULL if customer not exists or is inactive
  **/
-DROP FUNCTION IF EXISTS pbx.customer_from_phone;
+USE pbx;
+DROP FUNCTION IF EXISTS customer_from_phone;
 DELIMITER $$
-CREATE FUNCTION pbx.customer_from_phone (v_phone VARCHAR(255))
+CREATE FUNCTION customer_from_phone (v_phone VARCHAR(255))
 RETURNS INT
 DETERMINISTIC
 BEGIN
-    DECLARE v_customer INT DEFAULT NULL;
-    
-    SET @phone = v_phone COLLATE 'utf8_unicode_ci';
-    
-    -- Searchs a customer associated to the phone number
+	DECLARE v_customer INT DEFAULT NULL;
+
+	SET @phone = v_phone COLLATE 'utf8_unicode_ci';
+
+	-- Searchs a customer associated to the phone number
 
 	DROP TEMPORARY TABLE IF EXISTS tmp.customer;
 	CREATE TEMPORARY TABLE tmp.customer
@@ -34,12 +35,12 @@ BEGIN
 				JOIN vn2008.Contactos c ON r.Id_Contacto = c.Id_Contacto
 			WHERE telefono = @phone
 				OR movil = @phone;
-        
+
 	SELECT t.customer INTO v_customer
 		FROM tmp.customer t
-			JOIN vn2008.Clientes c
+			JOIN vn2008.Clientes c ON c.id_cliente = t.customer
 		WHERE c.activo
-        LIMIT 1;
+		LIMIT 1;
 
 	DROP TEMPORARY TABLE tmp.customer;
 
diff --git a/sql/extension_is_valid.sql b/sql/extension_is_valid.sql
new file mode 100644
index 0000000..1f922ff
--- /dev/null
+++ b/sql/extension_is_valid.sql
@@ -0,0 +1,24 @@
+/**
+ * Checks whether a passed extension number has valid sintax
+ *
+ * @param v_extension The extension to check format
+ * @return %TRUE if it's well formated
+ **/
+USE pbx;
+DROP PROCEDURE IF EXISTS extension_is_valid;
+DELIMITER $$
+CREATE PROCEDURE extension_is_valid (v_extension VARCHAR(255))
+BEGIN
+	DECLARE v_is_valid BOOLEAN;
+
+	SET v_is_valid =  v_extension IS NULL
+		OR (v_extension REGEXP '^[0-9]{4}$'
+		AND MOD(v_extension, 100) != 0);
+
+	IF NOT v_is_valid
+	THEN
+		SIGNAL SQLSTATE '45000'
+			SET MESSAGE_TEXT = 'EXTENSION_INVALID_FORMAT';
+	END IF;
+END$$
+DELIMITER ;
diff --git a/sql/phone_format.sql b/sql/phone_format.sql
index 5a54a61..d03ff63 100644
--- a/sql/phone_format.sql
+++ b/sql/phone_format.sql
@@ -4,9 +4,10 @@
  * @param v_phone The phone to format
  * @return The formated phone or %NULL if bad sintax
  **/
-DROP FUNCTION IF EXISTS pbx.phone_format;
+USE pbx;
+DROP FUNCTION IF EXISTS phone_format;
 DELIMITER $$
-CREATE FUNCTION pbx.phone_format (phone VARCHAR(255))
+CREATE FUNCTION phone_format (phone VARCHAR(255))
 RETURNS VARCHAR(255)
 DETERMINISTIC
 BEGIN
@@ -16,19 +17,19 @@ BEGIN
 	DECLARE newPhone VARCHAR(255) DEFAULT '';
 
 	WHILE i < len
-    DO
+	DO
 		SET chr = SUBSTR(phone, i+1, 1);
-    
+
 		IF chr REGEXP '^[0-9]$'
-        THEN
+		THEN
 			SET newPhone = CONCAT(newPhone, chr);
 		ELSEIF chr = '+' AND i = 0
-        THEN
+		THEN
 			SET newPhone = CONCAT(newPhone, '00');
 		END IF;
-        
-        SET i = i + 1;
-    END WHILE;
+
+		SET i = i + 1;
+	END WHILE;
 
 	IF newPhone REGEXP '^0+$' OR newPhone = '' THEN
 		RETURN NULL;
diff --git a/sql/phone_is_valid.sql b/sql/phone_is_valid.sql
index 1e41cef..e2ade1e 100644
--- a/sql/phone_is_valid.sql
+++ b/sql/phone_is_valid.sql
@@ -4,21 +4,22 @@
  * @param v_phone The phone to check format
  * @return %TRUE if it's well formated
  **/
-DROP PROCEDURE IF EXISTS pbx.phone_is_valid;
+USE pbx;
+DROP PROCEDURE IF EXISTS phone_is_valid;
 DELIMITER $$
-CREATE PROCEDURE pbx.phone_is_valid (v_phone VARCHAR(255))
+CREATE PROCEDURE phone_is_valid (v_phone VARCHAR(255))
 BEGIN
 	DECLARE v_is_valid BOOLEAN;
 
-    SET v_is_valid =  v_phone IS NULL
+	SET v_is_valid =  v_phone IS NULL
 		OR (v_phone REGEXP '^[0-9]+$'
 		AND v_phone NOT REGEXP '^0+$'
 		AND v_phone NOT REGEXP '^0034');
 
 	IF NOT v_is_valid
-    THEN
+	THEN
 		SIGNAL SQLSTATE '45000'
 			SET MESSAGE_TEXT = 'PHONE_INVALID_FORMAT';
-    END IF;
+	END IF;
 END$$
 DELIMITER ;
diff --git a/sql/queue_is_valid.sql b/sql/queue_is_valid.sql
new file mode 100644
index 0000000..d3d7cf3
--- /dev/null
+++ b/sql/queue_is_valid.sql
@@ -0,0 +1,23 @@
+/**
+ * Checks whether a passed queue number has valid sintax
+ *
+ * @param v_queue The queue to check format
+ * @return %TRUE if it's well formated
+ **/
+USE pbx;
+DROP PROCEDURE IF EXISTS queue_is_valid;
+DELIMITER $$
+CREATE PROCEDURE queue_is_valid (v_queue VARCHAR(255))
+BEGIN
+	DECLARE v_is_valid BOOLEAN;
+
+	SET v_is_valid = v_queue IS NULL
+		OR v_queue REGEXP '^[1-9][0-9]00$';
+
+	IF NOT v_is_valid
+	THEN
+		SIGNAL SQLSTATE '45000'
+			SET MESSAGE_TEXT = 'QUEUE_INVALID_FORMAT';
+	END IF;
+END$$
+DELIMITER ;
diff --git a/sql/upgrade.sql b/sql/upgrade.sql
index ed836c9..438e355 100644
--- a/sql/upgrade.sql
+++ b/sql/upgrade.sql
@@ -1,42 +1,44 @@
 
+USE vn2008;
+
 -- Updates the bad formated phones
 
-UPDATE vn2008.Clientes
+UPDATE Clientes
 	SET telefono = pbx.phone_format (telefono),
 		fax = pbx.phone_format (fax),
 		movil = pbx.phone_format (movil);
 
-UPDATE vn2008.Consignatarios
+UPDATE Consignatarios
 	SET telefono = pbx.phone_format (telefono),
 		movil = pbx.phone_format (movil);
 
-UPDATE vn2008.Contactos
+UPDATE Contactos
 	SET telefono = pbx.phone_format (telefono),
 		fax = pbx.phone_format (fax),
 		movil = pbx.phone_format (movil);
 
 -- Indexes the phone columns
 
-ALTER TABLE vn2008.`Clientes` ADD INDEX(`Telefono`);
-ALTER TABLE vn2008.`Clientes` ADD INDEX(`movil`);
+ALTER TABLE Clientes ADD INDEX(Telefono);
+ALTER TABLE Clientes ADD INDEX(movil);
 
-ALTER TABLE vn2008.`Consignatarios` ADD INDEX(`telefono`);
-ALTER TABLE vn2008.`Consignatarios` ADD INDEX(`movil`);
+ALTER TABLE Consignatarios ADD INDEX(telefono);
+ALTER TABLE Consignatarios ADD INDEX(movil);
 
-ALTER TABLE vn2008.`Contactos` ADD INDEX(`Telefono`);
-ALTER TABLE vn2008.`Contactos` ADD INDEX(`Movil`);
+ALTER TABLE Contactos ADD INDEX(Telefono);
+ALTER TABLE Contactos ADD INDEX(Movil);
 
 -- Returns all bad formated phones
 
-SELECT telefono, movil c FROM vn2008.Clientes
+SELECT telefono, movil c FROM Clientes
 	WHERE telefono NOT REGEXP '^[0-9]+$'
 		OR movil NOT REGEXP '^[0-9]+$'
 UNION
-SELECT telefono, movil FROM vn2008.Consignatarios
+SELECT telefono, movil FROM Consignatarios
 	WHERE telefono NOT REGEXP '^[0-9]+$'
 		OR movil NOT REGEXP '^[0-9]+$'
 UNION
-SELECT telefono, movil FROM vn2008.Contactos
+SELECT telefono, movil FROM Contactos
 	WHERE telefono NOT REGEXP '^[0-9]+$'
 		OR movil NOT REGEXP '^[0-9]+$';