57 lines
1.6 KiB
SQL
57 lines
1.6 KiB
SQL
DELIMITER $$
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost` PROCEDURE `vn`.`item_setGeneric`(vSelf INT)
|
|
BEGIN
|
|
/**
|
|
* Asigna el código genérico a un item, salvo que sea un código de item genérico.
|
|
*
|
|
* @param vSelf identificador de vn.item
|
|
*/
|
|
DECLARE vGenericFk INT;
|
|
|
|
SELECT itemFk INTO vGenericFk
|
|
FROM (
|
|
SELECT itemFk, SUM(matches) = maxMatches `match`
|
|
FROM (
|
|
SELECT ga.id gaid, ga.itemFk,
|
|
CASE
|
|
WHEN t.code = 'nflowers' THEN
|
|
it.value <=> ga.numFlores
|
|
WHEN t.code = 'origin' THEN
|
|
it.value <=> ga.origin
|
|
WHEN t.code = 'quality' THEN
|
|
it.value <=> ga.quality
|
|
WHEN t.code = 'color' THEN
|
|
it.value <=> ga.color
|
|
WHEN t.code = 'category' THEN
|
|
it.value <=> ga.category
|
|
WHEN t.code = 'producer' THEN
|
|
it.value <=> ga.productor
|
|
ELSE
|
|
0
|
|
END matches,
|
|
(NOT ISNULL(ga.origin))
|
|
+ (NOT ISNULL(ga.color))
|
|
+ (NOT ISNULL(ga.quality))
|
|
+ (NOT ISNULL(ga.numFlores))
|
|
+ (NOT ISNULL(ga.category))
|
|
+ (NOT ISNULL(ga.productor)) maxMatches
|
|
FROM vn.item i
|
|
JOIN vn.itemTag it ON it.itemFk = i.id
|
|
JOIN vn.tag t ON t.id = it.tagFk
|
|
JOIN vn.genericAllocation ga
|
|
ON (i.typeFk = ga.typeFk OR ga.typeFk IS NULL)
|
|
AND (i.longName = ga.longName OR ga.longName IS NULL)
|
|
AND (i.`size` = ga.`size` OR ga.`size` IS NULL)
|
|
AND i.id != ga.itemFk
|
|
WHERE i.id = vSelf
|
|
AND NOT i.isFloramondo) sub
|
|
GROUP BY gaid
|
|
HAVING `match`) sub2
|
|
LIMIT 1;
|
|
|
|
UPDATE vn.item
|
|
SET genericFk = vGenericFk
|
|
WHERE id = vSelf;
|
|
END$$
|
|
DELIMITER ;
|