Merge pull request '2791-item_botanical_remove_field' (#564) from 2791-item_botanical_remove_field into dev
gitea/salix/pipeline/head This commit looks good
Details
gitea/salix/pipeline/head This commit looks good
Details
Reviewed-on: #564 Reviewed-by: Joan Sanchez <joan@verdnatura.es>
This commit is contained in:
commit
b0a3a9b7bc
|
@ -1,3 +1,4 @@
|
||||||
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
INSERT INTO `salix`.`ACL` (`model`, `property`, `accessType`, `permission`, `principalType`, `principalId`)
|
||||||
VALUES
|
VALUES
|
||||||
('StarredModule', '*', '*', 'ALLOW', 'ROLE', 'employee');
|
('StarredModule', '*', '*', 'ALLOW', 'ROLE', 'employee'),
|
||||||
|
('ItemBotanical', '*', 'WRITE', 'ALLOW', 'ROLE', 'logisticBoss');
|
|
@ -1064,25 +1064,25 @@ INSERT INTO `vn`.`ticketCollection` (`ticketFk`, `collectionFk`, `level`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1, 1);
|
(1, 1, 1);
|
||||||
|
|
||||||
INSERT INTO `edi`.`genus`(`genus_id`, `latin_genus_name`, `entry_date`, `expiry_date`, `change_date_time`)
|
INSERT INTO `vn`.`genus`(`id`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Abelia' , CURDATE(), NULL, CURDATE()),
|
(1, 'Abelia'),
|
||||||
(2, 'Abies', CURDATE(), NULL, CURDATE()),
|
(2, 'Abies'),
|
||||||
(3, 'Abutilon', CURDATE(), NULL, CURDATE());
|
(3, 'Abutilon');
|
||||||
|
|
||||||
INSERT INTO `edi`.`specie`(`specie_id`, `genus_id`, `latin_species_name`, `entry_date`, `expiry_date`, `change_date_time`)
|
INSERT INTO `vn`.`specie`(`id`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 1, 'grandiflora', CURDATE(), NULL, CURDATE()),
|
(1, 'grandiflora'),
|
||||||
(2, 2, 'procera', CURDATE(), NULL, CURDATE()),
|
(2, 'procera'),
|
||||||
(3, 3, 'decurrens', CURDATE(), NULL, CURDATE()),
|
(3, 'decurrens'),
|
||||||
(4, 3, 'dealbata', CURDATE(), NULL, CURDATE());
|
(4, 'dealbata');
|
||||||
|
|
||||||
INSERT INTO `vn`.`itemBotanical`(`itemFk`, `botanical`, `genusFk`, `specieFk`)
|
INSERT INTO `vn`.`itemBotanical`(`itemFk`, `genusFk`, `specieFk`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Hedera helix', 1, 1),
|
(1, 1, 1),
|
||||||
(2, NULL, 2, 2),
|
(2, 2, 2),
|
||||||
(3, 'Cycas revoluta', 2, NULL),
|
(3, 2, NULL),
|
||||||
(4, 'Polygonum', NULL, NULL);
|
(4, NULL, NULL);
|
||||||
|
|
||||||
INSERT INTO `vn`.`tag`(`id`, `code`, `name`, `isFree`, `isQuantitatif`, `sourceTable`, `unit`, `ediTypeFk`, `overwrite`)
|
INSERT INTO `vn`.`tag`(`id`, `code`, `name`, `isFree`, `isQuantitatif`, `sourceTable`, `unit`, `ediTypeFk`, `overwrite`)
|
||||||
VALUES
|
VALUES
|
||||||
|
@ -1233,11 +1233,18 @@ INSERT INTO `vn`.`annualAverageInvoiced`(`clientFk`, `invoiced`)
|
||||||
(104, 500),
|
(104, 500),
|
||||||
(105, 5000);
|
(105, 5000);
|
||||||
|
|
||||||
INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`)
|
INSERT INTO `vn`.`supplierActivity`(`code`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
(1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, 0, CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18),
|
('animals', 'Food and complements for pets'),
|
||||||
(2, 'Farmer King', 'The farmer', 4000020002, 1, '87945234L', 1, 0, CURDATE(), 1, 'supplier address 2', 'SILLA', 2, 43022, 1, 2, 10, 93, 2, 8, 18),
|
('complements', 'Other complements'),
|
||||||
(442, 'Verdnatura Levante SL', 'Verdnatura', 5115000442, 1, '06815934E', 0, 0, CURDATE(), 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15, 6, 9, 3, 18);
|
('flowerPlants', 'Wholesale of flowers and plants'),
|
||||||
|
('vegetablesFruits', 'Fruit and vegetable trade');
|
||||||
|
|
||||||
|
INSERT INTO `vn`.`supplier`(`id`, `name`, `nickname`,`account`,`countryFk`,`nif`,`isFarmer`,`commission`, `created`, `isActive`, `street`, `city`, `provinceFk`, `postCode`, `payMethodFk`, `payDemFk`, `payDay`, `taxTypeSageFk`, `withholdingSageFk`, `transactionTypeSageFk`, `workerFk`, `supplierActivityFk`)
|
||||||
|
VALUES
|
||||||
|
(1, 'Plants SL', 'Plants nick', 4100000001, 1, '06089160W', 0, 0, CURDATE(), 1, 'supplier address 1', 'PONTEVEDRA', 1, 15214, 1, 1, 15, 4, 1, 1, 18, 'flowerPlants'),
|
||||||
|
(2, 'Farmer King', 'The farmer', 4000020002, 1, '87945234L', 1, 0, CURDATE(), 1, 'supplier address 2', 'SILLA', 2, 43022, 1, 2, 10, 93, 2, 8, 18, 'animals'),
|
||||||
|
(442, 'Verdnatura Levante SL', 'Verdnatura', 5115000442, 1, '06815934E', 0, 0, CURDATE(), 1, 'supplier address 3', 'SILLA', 1, 43022, 1, 2, 15, 6, 9, 3, 18, 'flowerPlants');
|
||||||
|
|
||||||
INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`)
|
INSERT INTO `vn`.`supplierContact`(`id`, `supplierFk`, `phone`, `mobile`, `email`, `observation`, `name`)
|
||||||
VALUES
|
VALUES
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
-- MariaDB dump 10.18 Distrib 10.5.8-MariaDB, for Linux (x86_64)
|
-- MariaDB dump 10.19 Distrib 10.5.9-MariaDB, for Linux (x86_64)
|
||||||
--
|
--
|
||||||
-- Host: test-db.verdnatura.es Database: account
|
-- Host: test-db.verdnatura.es Database: account
|
||||||
-- ------------------------------------------------------
|
-- ------------------------------------------------------
|
||||||
|
@ -7119,7 +7119,7 @@ CREATE TABLE `cache_calc` (
|
||||||
KEY `cache_id` (`cache_id`),
|
KEY `cache_id` (`cache_id`),
|
||||||
KEY `cacheName` (`cacheName`),
|
KEY `cacheName` (`cacheName`),
|
||||||
KEY `expires` (`expires`)
|
KEY `expires` (`expires`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -7133,7 +7133,7 @@ CREATE TABLE `cache_valid` (
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
`valid` tinyint(3) unsigned NOT NULL,
|
`valid` tinyint(3) unsigned NOT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
) ENGINE=MEMORYDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -9243,6 +9243,7 @@ BEGIN
|
||||||
DECLARE vError VARCHAR(100) DEFAULT 'Orderregel niet meer teruggevonden op basis van de orderps';
|
DECLARE vError VARCHAR(100) DEFAULT 'Orderregel niet meer teruggevonden op basis van de orderps';
|
||||||
DECLARE vVmpIdError INT DEFAULT 7;
|
DECLARE vVmpIdError INT DEFAULT 7;
|
||||||
DECLARE vVmpFk INT;
|
DECLARE vVmpFk INT;
|
||||||
|
DECLARE vSupplyResponseNumberOfUnits INT;
|
||||||
|
|
||||||
SELECT sr.vmpID INTO vVmpFk
|
SELECT sr.vmpID INTO vVmpFk
|
||||||
FROM edi.supplyResponse sr
|
FROM edi.supplyResponse sr
|
||||||
|
@ -9258,6 +9259,17 @@ BEGIN
|
||||||
SET NEW.OrderStatus = 2;
|
SET NEW.OrderStatus = 2;
|
||||||
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
-- Error de disponible menor de lo solicitado
|
||||||
|
IF NEW.error LIKE 'error2602%' THEN
|
||||||
|
|
||||||
|
SELECT NumberOfUnits INTO vSupplyResponseNumberOfUnits
|
||||||
|
FROM edi.supplyResponse sr
|
||||||
|
WHERE sr.ID = NEW.supplyResponseID;
|
||||||
|
|
||||||
|
SET NEW.error = CONCAT('(',vSupplyResponseNumberOfUnits,') ', NEW.error);
|
||||||
|
|
||||||
|
END IF;
|
||||||
END */;;
|
END */;;
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
/*!50003 SET sql_mode = @saved_sql_mode */ ;
|
/*!50003 SET sql_mode = @saved_sql_mode */ ;
|
||||||
|
@ -10063,9 +10075,9 @@ DELIMITER ;
|
||||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||||
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||||
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||||
/*!50003 SET character_set_client = utf8mb4 */ ;
|
/*!50003 SET character_set_client = utf8 */ ;
|
||||||
/*!50003 SET character_set_results = utf8mb4 */ ;
|
/*!50003 SET character_set_results = utf8 */ ;
|
||||||
/*!50003 SET collation_connection = utf8mb4_unicode_ci */ ;
|
/*!50003 SET collation_connection = utf8_general_ci */ ;
|
||||||
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
||||||
/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
|
/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
|
||||||
DELIMITER ;;
|
DELIMITER ;;
|
||||||
|
@ -10080,6 +10092,7 @@ proc: BEGIN
|
||||||
DECLARE vIsAuctionDay BOOLEAN;
|
DECLARE vIsAuctionDay BOOLEAN;
|
||||||
DECLARE vMaxNewItems INT DEFAULT 100000;
|
DECLARE vMaxNewItems INT DEFAULT 100000;
|
||||||
DECLARE vStartingTime DATETIME;
|
DECLARE vStartingTime DATETIME;
|
||||||
|
DECLARE vAalsmeerMarketPlaceID VARCHAR(13) DEFAULT '8713783439043';
|
||||||
|
|
||||||
DECLARE cur1 CURSOR FOR
|
DECLARE cur1 CURSOR FOR
|
||||||
SELECT id
|
SELECT id
|
||||||
|
@ -10123,10 +10136,11 @@ proc: BEGIN
|
||||||
FROM (
|
FROM (
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM edi.supplyOffer
|
FROM edi.supplyOffer
|
||||||
ORDER BY NumberOfUnits DESC) t
|
ORDER BY (MarketPlaceID = vAalsmeerMarketPlaceID) DESC, NumberOfUnits DESC) t
|
||||||
JOIN edi.item_groupToOffer igo ON igo.group_code = t.group_id
|
JOIN edi.item_groupToOffer igo ON igo.group_code = t.group_id
|
||||||
LEFT JOIN edi.item_defaultType idt ON idt.item_id = t.Item_ArticleCode
|
LEFT JOIN edi.item_defaultType idt ON idt.item_id = t.Item_ArticleCode
|
||||||
GROUP BY Item_ArticleCode, s1, s2, s3, s4, s5, s6, company_name, Quality, NumberOfItemsPerCask, EmbalageCode, Price ;
|
GROUP BY Item_ArticleCode, s1, s2, s3, s4, s5, s6, company_name, Quality, NumberOfItemsPerCask, EmbalageCode, Price
|
||||||
|
;
|
||||||
|
|
||||||
-- -- select now(),'Antes de crear edi.offer';
|
-- -- select now(),'Antes de crear edi.offer';
|
||||||
DROP TEMPORARY TABLE IF EXISTS edi.offer;
|
DROP TEMPORARY TABLE IF EXISTS edi.offer;
|
||||||
|
@ -10368,6 +10382,423 @@ proc: BEGIN
|
||||||
WHERE vLanded IS NOT NULL;
|
WHERE vLanded IS NOT NULL;
|
||||||
|
|
||||||
|
|
||||||
|
-- Elimina la oferta obsoleta
|
||||||
|
UPDATE vn.buy b
|
||||||
|
JOIN vn.entry e ON e.id = b.entryFk
|
||||||
|
JOIN vn.travel tr ON tr.id = e.travelFk
|
||||||
|
JOIN vn.agencyMode am ON am.id = tr.agencyFk
|
||||||
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
|
JOIN edi.supplyResponse sr ON i.supplyResponseFk = sr.ID
|
||||||
|
LEFT JOIN edi.putOrder po ON b.deliveryFk = po.deliveryInformationID
|
||||||
|
LEFT JOIN edi.deliveryInformation di ON di.ID = b.deliveryFk
|
||||||
|
SET b.quantity = 0
|
||||||
|
WHERE (di.LatestOrderDateTime < NOW()
|
||||||
|
OR sr.ID IS NULL
|
||||||
|
OR sr.NumberOfUnits = 0)
|
||||||
|
AND am.name = 'LOGIFLORA'
|
||||||
|
AND e.isRaid;
|
||||||
|
|
||||||
|
-- Localiza las entradas de cada almacen
|
||||||
|
UPDATE edi.warehouseFloramondo
|
||||||
|
SET entryFk = vn.floramondo_getEntry(TIMESTAMPADD(DAY,travellingDays,vLanded), warehouseFk);
|
||||||
|
|
||||||
|
IF vLanded IS NOT NULL THEN
|
||||||
|
-- actualiza la oferta existente
|
||||||
|
UPDATE vn.buy b
|
||||||
|
JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
|
||||||
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
|
JOIN edi.offer o ON i.supplyResponseFk = o.`srId`
|
||||||
|
SET b.quantity = o.NumberOfUnits * o.NumberOfItemsPerCask,
|
||||||
|
b.buyingValue = o.price
|
||||||
|
WHERE (b.quantity <> o.NumberOfUnits * o.NumberOfItemsPerCask OR b.buyingValue <> o.price);
|
||||||
|
|
||||||
|
-- Se eliminan las ofertas ya incluidas en las entradas
|
||||||
|
DELETE o
|
||||||
|
FROM edi.offer o
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = o.srId
|
||||||
|
JOIN vn.buy b ON i.id = b.itemFk
|
||||||
|
JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk;
|
||||||
|
|
||||||
|
-- Se inserta el resto
|
||||||
|
SET vLastInserted := NOW();
|
||||||
|
|
||||||
|
-- Inserta la oferta
|
||||||
|
INSERT INTO vn.buy(entryFk,
|
||||||
|
itemFk,
|
||||||
|
quantity,
|
||||||
|
buyingValue,
|
||||||
|
stickers,
|
||||||
|
packing,
|
||||||
|
`grouping`,
|
||||||
|
groupingMode,
|
||||||
|
packageFk,
|
||||||
|
deliveryFk)
|
||||||
|
|
||||||
|
SELECT wf.entryFk,
|
||||||
|
i.id,
|
||||||
|
o.NumberOfUnits * o.NumberOfItemsPerCask as quantity,
|
||||||
|
o.Price,
|
||||||
|
o.NumberOfUnits as etiquetas,
|
||||||
|
o.NumberOfItemsPerCask as packing,
|
||||||
|
GREATEST(1, IFNULL(o.MinimumQuantity,0)) * o.NumberOfItemsPerCask as `grouping`,
|
||||||
|
2, -- Obliga al Packing
|
||||||
|
o.embalageCode,
|
||||||
|
o.diId
|
||||||
|
FROM edi.offer o
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = o.srId
|
||||||
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
|
JOIN edi.warehouseFloramondo wf ON wf.isFV = it.isFV OR wf.isFV IS NULL
|
||||||
|
JOIN vn.packaging p ON p.id LIKE o.embalageCode; -- llevar esta linea i mirar de crear els packages a temps real
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp.buyRecalc;
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE tmp.buyRecalc
|
||||||
|
SELECT b.id
|
||||||
|
FROM vn.buy b
|
||||||
|
JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
|
||||||
|
WHERE b.created >= vLastInserted;
|
||||||
|
|
||||||
|
CALL vn.buy_recalcPrices();
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE
|
||||||
|
edi.offer,
|
||||||
|
itemToInsert;
|
||||||
|
|
||||||
|
DROP TABLE tmp.item;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
-- Esto habria que pasarlo a procesos programados o trabajar con tags y dejar las familias
|
||||||
|
UPDATE vn.item i
|
||||||
|
SET typeFk = 121
|
||||||
|
WHERE i.longName LIKE 'Rosa Garden %'
|
||||||
|
AND typeFk = 17;
|
||||||
|
|
||||||
|
UPDATE vn.item i
|
||||||
|
SET typeFk = 156
|
||||||
|
WHERE i.longName LIKE 'Rosa ec %'
|
||||||
|
AND typeFk = 17;
|
||||||
|
|
||||||
|
INSERT INTO edi.log(tableName, fieldName,fieldValue)
|
||||||
|
VALUES('floramondo_offerRefresh','Tiempo de proceso',TIMEDIFF(NOW(),vStartingTime));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
END ;;
|
||||||
|
DELIMITER ;
|
||||||
|
/*!50003 SET sql_mode = @saved_sql_mode */ ;
|
||||||
|
/*!50003 SET character_set_client = @saved_cs_client */ ;
|
||||||
|
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||||
|
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||||
|
/*!50003 DROP PROCEDURE IF EXISTS `floramondo_offerRefresh__` */;
|
||||||
|
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||||
|
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
|
||||||
|
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
|
||||||
|
/*!50003 SET character_set_client = utf8 */ ;
|
||||||
|
/*!50003 SET character_set_results = utf8 */ ;
|
||||||
|
/*!50003 SET collation_connection = utf8_general_ci */ ;
|
||||||
|
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
|
||||||
|
/*!50003 SET sql_mode = 'NO_ENGINE_SUBSTITUTION' */ ;
|
||||||
|
DELIMITER ;;
|
||||||
|
CREATE DEFINER=`root`@`%` PROCEDURE `floramondo_offerRefresh__`()
|
||||||
|
proc: BEGIN
|
||||||
|
|
||||||
|
DECLARE vLanded DATETIME;
|
||||||
|
DECLARE done INT DEFAULT FALSE;
|
||||||
|
DECLARE vFreeId INT;
|
||||||
|
DECLARE vSupplyResponseFk INT;
|
||||||
|
DECLARE vLastInserted DATETIME;
|
||||||
|
DECLARE vIsAuctionDay BOOLEAN;
|
||||||
|
DECLARE vMaxNewItems INT DEFAULT 100000;
|
||||||
|
DECLARE vStartingTime DATETIME;
|
||||||
|
|
||||||
|
DECLARE cur1 CURSOR FOR
|
||||||
|
SELECT id
|
||||||
|
FROM edi.item_free;
|
||||||
|
|
||||||
|
DECLARE cur2 CURSOR FOR
|
||||||
|
SELECT srId
|
||||||
|
FROM itemToInsert;
|
||||||
|
|
||||||
|
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
|
||||||
|
DECLARE EXIT HANDLER FOR SQLSTATE '45000'
|
||||||
|
BEGIN
|
||||||
|
ROLLBACK;
|
||||||
|
RESIGNAL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
SET vStartingTime = NOW();
|
||||||
|
|
||||||
|
-- CALL vn.clean_logiflora();
|
||||||
|
|
||||||
|
-- Refresca las fotos de los items existentes, con prioridad baja (0.7 seg)
|
||||||
|
INSERT IGNORE INTO vn.itemImageQueue(itemFk, url,priority)
|
||||||
|
SELECT i.id, sr.PictureReference , 100
|
||||||
|
FROM edi.supplyResponse sr
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = sr.ID
|
||||||
|
WHERE i.image != edi.imageName(sr.PictureReference)
|
||||||
|
AND sr.NumberOfUnits > 0;
|
||||||
|
|
||||||
|
DELETE itf.*
|
||||||
|
FROM edi.item_free itf
|
||||||
|
JOIN vn.item i ON i.id = itf.id;
|
||||||
|
|
||||||
|
-- -- select now(),'Tras borrar';
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS tmp;
|
||||||
|
CREATE TEMPORARY TABLE tmp (INDEX (`Item_ArticleCode`)) ENGINE = MEMORY
|
||||||
|
SELECT t.*,
|
||||||
|
IFNULL(idt.itemTypeFk, igo.itemTypeFk) itemTypeFk,
|
||||||
|
igo.expenseFk ,
|
||||||
|
igo.intrastatFk ,
|
||||||
|
igo.originFk
|
||||||
|
FROM (
|
||||||
|
SELECT *
|
||||||
|
FROM edi.supplyOffer
|
||||||
|
ORDER BY NumberOfUnits DESC) t
|
||||||
|
JOIN edi.item_groupToOffer igo ON igo.group_code = t.group_id
|
||||||
|
LEFT JOIN edi.item_defaultType idt ON idt.item_id = t.Item_ArticleCode
|
||||||
|
GROUP BY Item_ArticleCode, s1, s2, s3, s4, s5, s6, company_name, Quality, NumberOfItemsPerCask, EmbalageCode, Price ;
|
||||||
|
|
||||||
|
-- -- select now(),'Antes de crear edi.offer';
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS edi.offer;
|
||||||
|
CREATE TEMPORARY TABLE edi.offer (INDEX (`srID`), INDEX (`EmbalageCode`)) ENGINE = MEMORY
|
||||||
|
SELECT so.*, ev1.type_description s1Value, ev2.type_description s2Value, ev3.type_description s3Value,
|
||||||
|
ev4.type_description s4Value, ev5.type_description s5Value, ev6.type_description s6Value,
|
||||||
|
eif1.feature ef1, eif2.feature ef2, eif3.feature ef3, eif4.feature ef4, eif5.feature ef5, eif6.feature ef6
|
||||||
|
FROM tmp so
|
||||||
|
LEFT JOIN edi.item_feature eif1 ON eif1.item_id = so.Item_ArticleCode
|
||||||
|
AND eif1.presentation_order = 1 AND eif1.expiry_date IS NULL
|
||||||
|
LEFT JOIN edi.item_feature eif2 ON eif2.item_id = so.Item_ArticleCode
|
||||||
|
AND eif2.presentation_order = 2 AND eif2.expiry_date IS NULL
|
||||||
|
LEFT JOIN edi.item_feature eif3 ON eif3.item_id = so.Item_ArticleCode
|
||||||
|
AND eif3.presentation_order = 3 AND eif3.expiry_date IS NULL
|
||||||
|
LEFT JOIN edi.item_feature eif4 ON eif4.item_id = so.Item_ArticleCode
|
||||||
|
AND eif4.presentation_order = 4 AND eif4.expiry_date IS NULL
|
||||||
|
LEFT JOIN edi.item_feature eif5 ON eif5.item_id = so.Item_ArticleCode
|
||||||
|
AND eif5.presentation_order = 5 AND eif5.expiry_date IS NULL
|
||||||
|
LEFT JOIN edi.item_feature eif6 ON eif6.item_id = so.Item_ArticleCode
|
||||||
|
AND eif6.presentation_order = 6 AND eif6.expiry_date IS NULL
|
||||||
|
LEFT JOIN edi.`value` ev1 ON ev1.type_id = eif1.feature AND so.s1 = ev1.type_value
|
||||||
|
LEFT JOIN edi.`value` ev2 ON ev2.type_id = eif2.feature AND so.s2 = ev2.type_value
|
||||||
|
LEFT JOIN edi.`value` ev3 ON ev3.type_id = eif3.feature AND so.s3 = ev3.type_value
|
||||||
|
LEFT JOIN edi.`value` ev4 ON ev4.type_id = eif4.feature AND so.s4 = ev4.type_value
|
||||||
|
LEFT JOIN edi.`value` ev5 ON ev5.type_id = eif5.feature AND so.s5 = ev5.type_value
|
||||||
|
LEFT JOIN edi.`value` ev6 ON ev6.type_id = eif6.feature AND so.s6 = ev6.type_value
|
||||||
|
ORDER BY Price;
|
||||||
|
|
||||||
|
DROP TEMPORARY TABLE tmp;
|
||||||
|
|
||||||
|
|
||||||
|
START TRANSACTION;
|
||||||
|
|
||||||
|
-- Actualizamos el campo supplyResponseFk para aquellos articulos que ya estan creados y reutilizamos
|
||||||
|
UPDATE IGNORE edi.offer o
|
||||||
|
LEFT JOIN vn.item iExist ON iExist.supplyResponseFk = o.srID
|
||||||
|
JOIN vn.item i
|
||||||
|
ON i.name = o.product_name
|
||||||
|
AND i.subname <=> o.company_name
|
||||||
|
AND i.value5 <=> o.s1Value
|
||||||
|
AND i.value6 <=> o.s2Value
|
||||||
|
AND i.value7 <=> o.s3Value
|
||||||
|
AND i.value8 <=> o.s4Value
|
||||||
|
AND i.value9 <=> o.s5Value
|
||||||
|
AND i.value10 <=> o.s6Value
|
||||||
|
AND i.NumberOfItemsPerCask <=> o.NumberOfItemsPerCask
|
||||||
|
AND i.EmbalageCode <=> o.EmbalageCode
|
||||||
|
AND i.quality <=> o.Quality
|
||||||
|
LEFT JOIN deliveryInformation di ON di.supplyResponseID = i.supplyResponseFk
|
||||||
|
JOIN vn.itemType it ON it.id = i.typeFk
|
||||||
|
SET i.supplyResponseFk = o.srID
|
||||||
|
WHERE iExist.id IS NULL
|
||||||
|
AND (di.LatestOrderDateTime < NOW() OR di.ID IS NULL)
|
||||||
|
AND it.isInventory
|
||||||
|
;
|
||||||
|
-- select now(),'Antes de crear ITO';
|
||||||
|
DROP TEMPORARY TABLE IF EXISTS itemToInsert;
|
||||||
|
CREATE TEMPORARY TABLE itemToInsert ENGINE = MEMORY
|
||||||
|
SELECT o.*, CAST(NULL AS DECIMAL(6,0)) as itemFk
|
||||||
|
FROM edi.offer o
|
||||||
|
LEFT JOIN vn.item i ON i.supplyResponseFk = o.srId
|
||||||
|
WHERE i.id IS NULL
|
||||||
|
LIMIT vMaxNewItems;
|
||||||
|
|
||||||
|
-- Reciclado de nº de item
|
||||||
|
OPEN cur1;
|
||||||
|
OPEN cur2;
|
||||||
|
|
||||||
|
read_loop: LOOP
|
||||||
|
|
||||||
|
FETCH cur2 INTO vSupplyResponseFk;
|
||||||
|
FETCH cur1 INTO vFreeId;
|
||||||
|
|
||||||
|
IF done THEN
|
||||||
|
LEAVE read_loop;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
UPDATE itemToInsert
|
||||||
|
SET itemFk = vFreeId
|
||||||
|
WHERE srId = vSupplyResponseFk;
|
||||||
|
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
CLOSE cur1;
|
||||||
|
CLOSE cur2;
|
||||||
|
|
||||||
|
-- Insertamos todos los items en Articles de la oferta
|
||||||
|
INSERT INTO vn.item( id,
|
||||||
|
`name`,
|
||||||
|
longName,
|
||||||
|
subName,
|
||||||
|
expenceFk,
|
||||||
|
typeFk,
|
||||||
|
intrastatFk,
|
||||||
|
originFk,
|
||||||
|
supplyResponseFk,
|
||||||
|
numberOfItemsPerCask,
|
||||||
|
embalageCode,
|
||||||
|
quality,
|
||||||
|
isFloramondo)
|
||||||
|
SELECT itemFk,
|
||||||
|
product_name,
|
||||||
|
product_name,
|
||||||
|
company_name,
|
||||||
|
expenseFk,
|
||||||
|
itemTypeFk,
|
||||||
|
intrastatFk,
|
||||||
|
originFk,
|
||||||
|
`srId`,
|
||||||
|
NumberOfItemsPerCask,
|
||||||
|
EmbalageCode,
|
||||||
|
Quality,
|
||||||
|
TRUE
|
||||||
|
FROM itemToInsert;
|
||||||
|
|
||||||
|
INSERT IGNORE INTO vn.itemImageQueue(itemFk, url)
|
||||||
|
SELECT i.id, PictureReference
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.srId
|
||||||
|
WHERE PictureReference IS NOT NULL;
|
||||||
|
|
||||||
|
INSERT INTO edi.log(tableName, fieldName,fieldValue)
|
||||||
|
SELECT 'itemImageQueue','NumImagenesPtes', COUNT(*)
|
||||||
|
FROM vn.itemImageQueue
|
||||||
|
WHERE attempts = 0;
|
||||||
|
|
||||||
|
-- Inserta si se añadiesen tags nuevos
|
||||||
|
INSERT IGNORE INTO vn.tag (name, ediTypeFk)
|
||||||
|
SELECT description, type_id FROM edi.type;
|
||||||
|
|
||||||
|
-- Inserta los tags sólo en los articulos nuevos
|
||||||
|
|
||||||
|
-- desabilita el trigger para recalcular los tags al final
|
||||||
|
SET @isTriggerDisabled = TRUE;
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , ii.product_name, 1
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.`name` = 'Producto'
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`;
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , ii.Quality, 3
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.`name` = 'Calidad'
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`;
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , ii.company_name, 4
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.`name` = 'Productor'
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`;
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , s1Value, 5
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.ediTypeFk = ii.ef1
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
WHERE s1Value != '';
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , s2Value, 6
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.ediTypeFk = ii.ef2
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
WHERE s2Value != '';
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , s3Value, 7
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.ediTypeFk = ii.ef3
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
WHERE s3Value != '';
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , s4Value, 8
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.ediTypeFk = ii.ef4
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
WHERE s4Value != '';
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , s5Value, 9
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.ediTypeFk = ii.ef5
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
WHERE s5Value != '';
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id , s6Value, 10
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.tag t ON t.ediTypeFk = ii.ef6
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
WHERE s6Value != '';
|
||||||
|
|
||||||
|
INSERT INTO vn.itemTag(itemFk, tagFk, value, priority)
|
||||||
|
SELECT i.id, t.id, ink.name, 11
|
||||||
|
FROM itemToInsert ii
|
||||||
|
JOIN vn.item i ON i.supplyResponseFk = ii.`srId`
|
||||||
|
JOIN vn.tag t ON t.`name` = 'Color'
|
||||||
|
JOIN edi.feature f ON f.item_id = ii.Item_ArticleCode
|
||||||
|
JOIN edi.`type` tp ON tp.type_id = f.feature_type_id AND tp.`description` = 'Hoofdkleur 1'
|
||||||
|
JOIN vn.ink ON ink.dutchCode = f.feature_value;
|
||||||
|
|
||||||
|
UPDATE vn.item i
|
||||||
|
JOIN itemToInsert ii ON i.supplyResponseFk = ii.`srId`
|
||||||
|
JOIN vn.packaging p ON p.id LIKE ii.EmbalageCode AND hasCompressionVariations
|
||||||
|
JOIN vn.itemTag diameter ON diameter.itemFk = i.id
|
||||||
|
JOIN vn.tag tDiameter ON tDiameter.overwrite = 'diameter' AND tDiameter.id = diameter.tagFk
|
||||||
|
JOIN vn.itemTag size ON size.itemFk = i.id
|
||||||
|
JOIN vn.tag tSize ON tSize.overwrite = 'size' AND tSize.id = size.tagFk
|
||||||
|
SET i.`compression` =
|
||||||
|
(PI() * POW(diameter.`value`/ 2, 2) * size.`value`)
|
||||||
|
/
|
||||||
|
((p.width * p.depth * p.height) / ii.NumberOfItemsPerCask);
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tmp.item;
|
||||||
|
CREATE TABLE tmp.item
|
||||||
|
(PRIMARY KEY (id))
|
||||||
|
SELECT i.id FROM vn.item i
|
||||||
|
JOIN itemToInsert ii ON i.supplyResponseFk = ii.`srId`;
|
||||||
|
|
||||||
|
CALL vn.item_refreshTags();
|
||||||
|
|
||||||
|
SET @isTriggerDisabled = FALSE;
|
||||||
|
|
||||||
|
SELECT MIN(LatestDeliveryDateTime) INTO vLanded
|
||||||
|
FROM edi.supplyResponse sr
|
||||||
|
JOIN edi.deliveryInformation di ON di.supplyResponseID = sr.ID
|
||||||
|
JOIN edi.marketPlace mp ON mp.id = sr.MarketPlaceID
|
||||||
|
JOIN vn.floramondoConfig fc
|
||||||
|
WHERE mp.isLatestOrderDateTimeRelevant
|
||||||
|
AND di.LatestOrderDateTime > IF(fc.MaxLatestOrderHour > HOUR(NOW()), CURDATE(), TIMESTAMPADD(DAY,1,CURDATE()));
|
||||||
|
|
||||||
|
UPDATE vn.floramondoConfig
|
||||||
|
SET nextLanded = vLanded
|
||||||
|
WHERE vLanded IS NOT NULL;
|
||||||
|
|
||||||
|
|
||||||
-- Elimina la oferta obsoleta
|
-- Elimina la oferta obsoleta
|
||||||
UPDATE vn.buy b
|
UPDATE vn.buy b
|
||||||
JOIN vn.entry e ON e.id = b.entryFk
|
JOIN vn.entry e ON e.id = b.entryFk
|
||||||
|
@ -10382,14 +10813,14 @@ proc: BEGIN
|
||||||
AND sr.ID IS NULL
|
AND sr.ID IS NULL
|
||||||
AND am.name = 'LOGIFLORA'
|
AND am.name = 'LOGIFLORA'
|
||||||
AND e.isRaid;
|
AND e.isRaid;
|
||||||
/*
|
|
||||||
UPDATE vn.buy b
|
UPDATE vn.buy b
|
||||||
JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
|
JOIN edi.warehouseFloramondo wf ON wf.entryFk = b.entryFk
|
||||||
JOIN vn.item i ON i.id = b.itemFk
|
JOIN vn.item i ON i.id = b.itemFk
|
||||||
LEFT JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
|
LEFT JOIN edi.supplyResponse sr ON sr.ID = i.supplyResponseFk
|
||||||
SET b.quantity = 0
|
SET b.quantity = 0
|
||||||
WHERE sr.ID IS NULL;
|
WHERE sr.ID IS NULL;
|
||||||
*/
|
|
||||||
-- Localiza las entradas de cada almacen
|
-- Localiza las entradas de cada almacen
|
||||||
UPDATE edi.warehouseFloramondo
|
UPDATE edi.warehouseFloramondo
|
||||||
SET entryFk = vn.floramondo_getEntry(TIMESTAMPADD(DAY,travellingDays,vLanded), warehouseFk);
|
SET entryFk = vn.floramondo_getEntry(TIMESTAMPADD(DAY,travellingDays,vLanded), warehouseFk);
|
||||||
|
@ -20607,7 +21038,7 @@ BEGIN
|
||||||
mc.ImporteRetencion,
|
mc.ImporteRetencion,
|
||||||
mc.SiglaNacion,
|
mc.SiglaNacion,
|
||||||
mc.EjercicioFactura,
|
mc.EjercicioFactura,
|
||||||
mc.FechaOperacion,
|
x.FECHA,
|
||||||
mc.Exclusion347,
|
mc.Exclusion347,
|
||||||
mc.MantenerAsiento,
|
mc.MantenerAsiento,
|
||||||
mc.Metalico347,
|
mc.Metalico347,
|
||||||
|
@ -24444,7 +24875,8 @@ SET character_set_client = utf8;
|
||||||
`account` tinyint NOT NULL,
|
`account` tinyint NOT NULL,
|
||||||
`accountingTypeFk` tinyint NOT NULL,
|
`accountingTypeFk` tinyint NOT NULL,
|
||||||
`entityFk` tinyint NOT NULL,
|
`entityFk` tinyint NOT NULL,
|
||||||
`isActive` tinyint NOT NULL
|
`isActive` tinyint NOT NULL,
|
||||||
|
`currencyFk` tinyint NOT NULL
|
||||||
) ENGINE=MyISAM */;
|
) ENGINE=MyISAM */;
|
||||||
SET character_set_client = @saved_cs_client;
|
SET character_set_client = @saved_cs_client;
|
||||||
|
|
||||||
|
@ -26715,7 +27147,7 @@ CREATE TABLE `cmr_expeditionPallet` (
|
||||||
KEY `cmr_expeditionPallet_fk2_idx` (`expeditionPalletFk`),
|
KEY `cmr_expeditionPallet_fk2_idx` (`expeditionPalletFk`),
|
||||||
CONSTRAINT `cmr_expeditionPallet_fk1` FOREIGN KEY (`cmrFk`) REFERENCES `cmr` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
CONSTRAINT `cmr_expeditionPallet_fk1` FOREIGN KEY (`cmrFk`) REFERENCES `cmr` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
CONSTRAINT `cmr_expeditionPallet_fk2` FOREIGN KEY (`expeditionPalletFk`) REFERENCES `expeditionPallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
CONSTRAINT `cmr_expeditionPallet_fk2` FOREIGN KEY (`expeditionPalletFk`) REFERENCES `expeditionPallet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
|
||||||
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='relaciona los cmr con los pallets de expediciones';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='relaciona los cmr con los pallets de expediciones';
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -28653,6 +29085,26 @@ CREATE TABLE `entryLog` (
|
||||||
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
) ENGINE=InnoDBDEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `entryObservation`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `entryObservation`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `entryObservation` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`entryFk` int(11) NOT NULL,
|
||||||
|
`observationTypeFk` tinyint(3) unsigned DEFAULT NULL,
|
||||||
|
`description` text COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`),
|
||||||
|
UNIQUE KEY `entryFk_observationTypeFk_UNIQUE` (`entryFk`,`observationTypeFk`),
|
||||||
|
KEY `observationType_id_observationTypeFk` (`observationTypeFk`),
|
||||||
|
CONSTRAINT `entry_id_entryFk` FOREIGN KEY (`entryFk`) REFERENCES `entry` (`id`),
|
||||||
|
CONSTRAINT `observationType_id_observationTypeFk` FOREIGN KEY (`observationTypeFk`) REFERENCES `observationType` (`id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for table `entryShelving__`
|
-- Table structure for table `entryShelving__`
|
||||||
--
|
--
|
||||||
|
@ -30760,14 +31212,13 @@ DROP TABLE IF EXISTS `itemBotanical`;
|
||||||
CREATE TABLE `itemBotanical` (
|
CREATE TABLE `itemBotanical` (
|
||||||
`itemFk` int(11) NOT NULL,
|
`itemFk` int(11) NOT NULL,
|
||||||
`botanical` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
|
`botanical` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
|
||||||
`genusFk` int(11) DEFAULT NULL,
|
`genusFk` int(11) NOT NULL,
|
||||||
`specieFk` int(11) DEFAULT NULL,
|
`specieFk` int(11) DEFAULT NULL,
|
||||||
PRIMARY KEY (`itemFk`),
|
PRIMARY KEY (`itemFk`),
|
||||||
KEY `genusFgn_idx` (`genusFk`),
|
KEY `genusFgn_idx` (`genusFk`),
|
||||||
KEY `specieFgn_idx` (`specieFk`),
|
KEY `specieFgn_idx` (`specieFk`),
|
||||||
CONSTRAINT `itemBotanicalItemFkFk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
CONSTRAINT `itemBotanicalItemFkFk` FOREIGN KEY (`itemFk`) REFERENCES `item` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
CONSTRAINT `itemBotanical_FK` FOREIGN KEY (`specieFk`) REFERENCES `specie` (`id`) ON DELETE SET NULL ON UPDATE CASCADE,
|
CONSTRAINT `itemBotanical_FK` FOREIGN KEY (`specieFk`) REFERENCES `specie` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
|
||||||
CONSTRAINT `itemBotanical_fk2` FOREIGN KEY (`genusFk`) REFERENCES `genus` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Sustituye a antiguo NomBotanic de Articles';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Sustituye a antiguo NomBotanic de Articles';
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
|
||||||
|
@ -33982,7 +34433,16 @@ DELIMITER ;;
|
||||||
BEFORE INSERT
|
BEFORE INSERT
|
||||||
ON receipt FOR EACH ROW
|
ON receipt FOR EACH ROW
|
||||||
BEGIN
|
BEGIN
|
||||||
|
DECLARE vIsAutoConciliated BOOLEAN;
|
||||||
|
|
||||||
|
IF NEW.isConciliate = FALSE THEN
|
||||||
|
SELECT isAutoConciliated INTO vIsAutoConciliated
|
||||||
|
FROM accounting a
|
||||||
|
JOIN accountingType at2 ON at2.id = a.accountingTypeFk
|
||||||
|
WHERE a.id = NEW.bankFk;
|
||||||
|
|
||||||
|
SET NEW.isConciliate = vIsAutoConciliated;
|
||||||
|
END IF;
|
||||||
END */;;
|
END */;;
|
||||||
DELIMITER ;
|
DELIMITER ;
|
||||||
/*!50003 SET sql_mode = @saved_sql_mode */ ;
|
/*!50003 SET sql_mode = @saved_sql_mode */ ;
|
||||||
|
@ -35776,6 +36236,8 @@ CREATE TABLE `supplier` (
|
||||||
`withholdingSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipos de retención SAGE',
|
`withholdingSageFk` smallint(6) DEFAULT NULL COMMENT 'Tipos de retención SAGE',
|
||||||
`transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Ti po de transacción SAGE',
|
`transactionTypeSageFk` tinyint(4) DEFAULT NULL COMMENT 'Ti po de transacción SAGE',
|
||||||
`isTrucker` tinyint(1) NOT NULL DEFAULT 0,
|
`isTrucker` tinyint(1) NOT NULL DEFAULT 0,
|
||||||
|
`supplierActivityFk` varchar(45) NOT NULL DEFAULT 'flowersPlants',
|
||||||
|
`healthRegister` varchar(45) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `cuenta` (`account`),
|
UNIQUE KEY `cuenta` (`account`),
|
||||||
UNIQUE KEY `NIF` (`nif`),
|
UNIQUE KEY `NIF` (`nif`),
|
||||||
|
@ -35787,13 +36249,15 @@ CREATE TABLE `supplier` (
|
||||||
KEY `supplier_taxTypeFk_idx` (`taxTypeSageFk`),
|
KEY `supplier_taxTypeFk_idx` (`taxTypeSageFk`),
|
||||||
KEY `supplier_withholdingFk_idx` (`withholdingSageFk`),
|
KEY `supplier_withholdingFk_idx` (`withholdingSageFk`),
|
||||||
KEY `supplier_transactionFk_idx` (`transactionTypeSageFk`),
|
KEY `supplier_transactionFk_idx` (`transactionTypeSageFk`),
|
||||||
|
KEY `suppplier_supplierActivityFk` (`supplierActivityFk`),
|
||||||
CONSTRAINT `Id_Pais` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `Id_Pais` FOREIGN KEY (`countryFk`) REFERENCES `country` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `pay_dem_id` FOREIGN KEY (`payDemFk`) REFERENCES `payDem` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `pay_dem_id` FOREIGN KEY (`payDemFk`) REFERENCES `payDem` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `pay_met_id` FOREIGN KEY (`payMethodFk`) REFERENCES `payMethod` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `pay_met_id` FOREIGN KEY (`payMethodFk`) REFERENCES `payMethod` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `province_id` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON UPDATE CASCADE,
|
CONSTRAINT `province_id` FOREIGN KEY (`provinceFk`) REFERENCES `province` (`id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `supplier_taxTypeFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
|
CONSTRAINT `supplier_taxTypeFk` FOREIGN KEY (`taxTypeSageFk`) REFERENCES `sage`.`TiposIva` (`CodigoIva`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `supplier_transactionFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
|
CONSTRAINT `supplier_transactionFk` FOREIGN KEY (`transactionTypeSageFk`) REFERENCES `sage`.`TiposTransacciones` (`CodigoTransaccion`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `supplier_withholdingFk` FOREIGN KEY (`withholdingSageFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON UPDATE CASCADE
|
CONSTRAINT `supplier_withholdingFk` FOREIGN KEY (`withholdingSageFk`) REFERENCES `sage`.`TiposRetencion` (`CodigoRetencion`) ON UPDATE CASCADE,
|
||||||
|
CONSTRAINT `suppplier_supplierActivityFk` FOREIGN KEY (`supplierActivityFk`) REFERENCES `supplierActivity` (`code`) ON UPDATE CASCADE
|
||||||
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
|
) ENGINE=InnoDBDEFAULT CHARSET=utf8;
|
||||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
|
@ -35849,6 +36313,20 @@ DELIMITER ;
|
||||||
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
/*!50003 SET character_set_results = @saved_cs_results */ ;
|
||||||
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
/*!50003 SET collation_connection = @saved_col_connection */ ;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Table structure for table `supplierActivity`
|
||||||
|
--
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `supplierActivity`;
|
||||||
|
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||||
|
/*!40101 SET character_set_client = utf8 */;
|
||||||
|
CREATE TABLE `supplierActivity` (
|
||||||
|
`code` varchar(45) CHARACTER SET utf8 NOT NULL,
|
||||||
|
`name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
|
||||||
|
PRIMARY KEY (`code`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||||
|
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Table structure for table `supplierContact`
|
-- Table structure for table `supplierContact`
|
||||||
--
|
--
|
||||||
|
@ -77948,7 +78426,7 @@ USE `vn`;
|
||||||
/*!50001 SET collation_connection = utf8mb4_general_ci */;
|
/*!50001 SET collation_connection = utf8mb4_general_ci */;
|
||||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||||
/*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */
|
/*!50013 DEFINER=`root`@`%` SQL SECURITY DEFINER */
|
||||||
/*!50001 VIEW `accounting` AS select `b`.`Id_Banco` AS `id`,`b`.`Banco` AS `bank`,`b`.`Cuenta` AS `account`,`b`.`cash` AS `accountingTypeFk`,`b`.`entity_id` AS `entityFk`,`b`.`activo` AS `isActive` from `vn2008`.`Bancos` `b` */;
|
/*!50001 VIEW `accounting` AS select `b`.`id` AS `id`,`b`.`bank` AS `bank`,`b`.`account` AS `account`,`b`.`cash` AS `accountingTypeFk`,`b`.`entityFk` AS `entityFk`,`b`.`isActive` AS `isActive`,`b`.`currencyFk` AS `currencyFk` from `bank` `b` */;
|
||||||
/*!50001 SET character_set_client = @saved_cs_client */;
|
/*!50001 SET character_set_client = @saved_cs_client */;
|
||||||
/*!50001 SET character_set_results = @saved_cs_results */;
|
/*!50001 SET character_set_results = @saved_cs_results */;
|
||||||
/*!50001 SET collation_connection = @saved_col_connection */;
|
/*!50001 SET collation_connection = @saved_col_connection */;
|
||||||
|
@ -80248,4 +80726,4 @@ USE `vncontrol`;
|
||||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||||
|
|
||||||
-- Dump completed on 2021-03-02 7:45:42
|
-- Dump completed on 2021-03-04 8:02:58
|
||||||
|
|
|
@ -357,7 +357,6 @@ export default {
|
||||||
submitNichesButton: 'vn-item-niche button[type=submit]'
|
submitNichesButton: 'vn-item-niche button[type=submit]'
|
||||||
},
|
},
|
||||||
itemBotanical: {
|
itemBotanical: {
|
||||||
botanical: 'vn-item-botanical vn-horizontal:nth-child(1) vn-textfield[ng-model="$ctrl.botanical.botanical"]',
|
|
||||||
genus: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.genusFk"]',
|
genus: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.genusFk"]',
|
||||||
species: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.specieFk"]',
|
species: 'vn-item-botanical vn-autocomplete[ng-model="$ctrl.botanical.specieFk"]',
|
||||||
submitBotanicalButton: `vn-item-botanical button[type=submit]`
|
submitBotanicalButton: `vn-item-botanical button[type=submit]`
|
||||||
|
|
|
@ -48,10 +48,10 @@ describe('Item summary path', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should check the item summary preview shows fields from botanical`, async() => {
|
it(`should check the item summary preview shows fields from botanical`, async() => {
|
||||||
await page.waitForTextInElement(selectors.itemSummary.botanical, 'Hedera helix');
|
await page.waitForTextInElement(selectors.itemSummary.botanical, 'Abelia');
|
||||||
const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
|
const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
|
||||||
|
|
||||||
expect(result).toContain('Hedera helix');
|
expect(result).toContain('Abelia');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should check the item summary preview shows fields from barcode`, async() => {
|
it(`should check the item summary preview shows fields from barcode`, async() => {
|
||||||
|
@ -102,7 +102,7 @@ describe('Item summary path', () => {
|
||||||
await page.waitForSelector(selectors.itemSummary.basicData, {hidden: true});
|
await page.waitForSelector(selectors.itemSummary.basicData, {hidden: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should navigate to the one of the items detailed section`, async() => {
|
it(`should navigate to one of the items detailed section`, async() => {
|
||||||
await page.accessToSearchResult('Melee weapon combat fist 15cm');
|
await page.accessToSearchResult('Melee weapon combat fist 15cm');
|
||||||
await page.waitForState('item.card.summary');
|
await page.waitForState('item.card.summary');
|
||||||
});
|
});
|
||||||
|
@ -135,7 +135,7 @@ describe('Item summary path', () => {
|
||||||
it(`should check the item summary shows fields from botanical section`, async() => {
|
it(`should check the item summary shows fields from botanical section`, async() => {
|
||||||
const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
|
const result = await page.waitToGetProperty(selectors.itemSummary.botanical, 'innerText');
|
||||||
|
|
||||||
expect(result).toContain('-');
|
expect(result).toContain('procera');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should check the item summary shows fields from barcodes section`, async() => {
|
it(`should check the item summary shows fields from barcodes section`, async() => {
|
||||||
|
|
|
@ -17,7 +17,6 @@ describe('Item Create botanical path', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should create a new botanical for the item`, async() => {
|
it(`should create a new botanical for the item`, async() => {
|
||||||
await page.write(selectors.itemBotanical.botanical, 'Cicuta maculata');
|
|
||||||
await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abelia');
|
await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abelia');
|
||||||
await page.autocompleteSearch(selectors.itemBotanical.species, 'dealbata');
|
await page.autocompleteSearch(selectors.itemBotanical.species, 'dealbata');
|
||||||
await page.waitToClick(selectors.itemBotanical.submitBotanicalButton);
|
await page.waitToClick(selectors.itemBotanical.submitBotanicalButton);
|
||||||
|
@ -26,15 +25,6 @@ describe('Item Create botanical path', () => {
|
||||||
expect(message.text).toContain('Data saved!');
|
expect(message.text).toContain('Data saved!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should confirm the botanical for the item was created`, async() => {
|
|
||||||
await page.reloadSection('item.card.botanical');
|
|
||||||
await page.waitForTextInField(selectors.itemBotanical.botanical, 'Cicuta maculata');
|
|
||||||
const result = await page
|
|
||||||
.waitToGetProperty(selectors.itemBotanical.botanical, 'value');
|
|
||||||
|
|
||||||
expect(result).toEqual('Cicuta maculata');
|
|
||||||
});
|
|
||||||
|
|
||||||
it(`should confirm the Genus for the item was created`, async() => {
|
it(`should confirm the Genus for the item was created`, async() => {
|
||||||
await page.waitForTextInField(selectors.itemBotanical.genus, 'Abelia');
|
await page.waitForTextInField(selectors.itemBotanical.genus, 'Abelia');
|
||||||
const result = await page
|
const result = await page
|
||||||
|
@ -51,8 +41,6 @@ describe('Item Create botanical path', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should edit botanical for the item`, async() => {
|
it(`should edit botanical for the item`, async() => {
|
||||||
await page.clearInput(selectors.itemBotanical.botanical);
|
|
||||||
await page.write(selectors.itemBotanical.botanical, 'Herp Derp');
|
|
||||||
await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abies');
|
await page.autocompleteSearch(selectors.itemBotanical.genus, 'Abies');
|
||||||
await page.autocompleteSearch(selectors.itemBotanical.species, 'decurrens');
|
await page.autocompleteSearch(selectors.itemBotanical.species, 'decurrens');
|
||||||
await page.waitToClick(selectors.itemBotanical.submitBotanicalButton);
|
await page.waitToClick(selectors.itemBotanical.submitBotanicalButton);
|
||||||
|
@ -61,15 +49,6 @@ describe('Item Create botanical path', () => {
|
||||||
expect(message.text).toContain('Data saved!');
|
expect(message.text).toContain('Data saved!');
|
||||||
});
|
});
|
||||||
|
|
||||||
it(`should confirm the botanical for the item was edited`, async() => {
|
|
||||||
await page.reloadSection('item.card.botanical');
|
|
||||||
await page.waitForTextInField(selectors.itemBotanical.botanical, 'Herp Derp');
|
|
||||||
const result = await page
|
|
||||||
.waitToGetProperty(selectors.itemBotanical.botanical, 'value');
|
|
||||||
|
|
||||||
expect(result).toEqual('Herp Derp');
|
|
||||||
});
|
|
||||||
|
|
||||||
it(`should confirm the Genus for the item was edited`, async() => {
|
it(`should confirm the Genus for the item was edited`, async() => {
|
||||||
await page.waitForTextInField(selectors.itemBotanical.genus, 'Abies');
|
await page.waitForTextInField(selectors.itemBotanical.genus, 'Abies');
|
||||||
const result = await page
|
const result = await page
|
||||||
|
|
|
@ -174,5 +174,7 @@
|
||||||
"That item doesn't exists": "Ese artículo no existe",
|
"That item doesn't exists": "Ese artículo no existe",
|
||||||
"There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
|
"There's a new urgent ticket": "Hay un nuevo ticket urgente: [{{title}}](https://cau.verdnatura.es/WorkOrder.do?woMode=viewWO&woID={{issueId}})",
|
||||||
"Invalid account": "Cuenta inválida",
|
"Invalid account": "Cuenta inválida",
|
||||||
"Compensation account is empty": "La cuenta para compensar está vacia"
|
"Compensation account is empty": "La cuenta para compensar está vacia",
|
||||||
|
"This genus already exist": "Este genus ya existe",
|
||||||
|
"This specie already exist": "Esta especie ya existe"
|
||||||
}
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
let UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.rewriteDbError(function(err) {
|
||||||
|
if (err.code === 'ER_DUP_ENTRY')
|
||||||
|
return new UserError(`This genus already exist`);
|
||||||
|
return err;
|
||||||
|
});
|
||||||
|
};
|
|
@ -3,26 +3,17 @@
|
||||||
"base": "VnModel",
|
"base": "VnModel",
|
||||||
"options": {
|
"options": {
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"table": "edi.genus"
|
"table": "vn.genus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"genus_id": {
|
"id": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"id": true,
|
"id": true,
|
||||||
"description": "Identifier"
|
"description": "Identifier"
|
||||||
},
|
},
|
||||||
"latin_genus_name": {
|
"name": {
|
||||||
"type": "String"
|
"type": "String"
|
||||||
},
|
|
||||||
"entry_date": {
|
|
||||||
"type": "date"
|
|
||||||
},
|
|
||||||
"expiry_date": {
|
|
||||||
"type": "date"
|
|
||||||
},
|
|
||||||
"change_date_time": {
|
|
||||||
"type": "date"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"acls": [
|
"acls": [
|
||||||
|
@ -31,6 +22,12 @@
|
||||||
"principalType": "ROLE",
|
"principalType": "ROLE",
|
||||||
"principalId": "$everyone",
|
"principalId": "$everyone",
|
||||||
"permission": "ALLOW"
|
"permission": "ALLOW"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"accessType": "WRITE",
|
||||||
|
"principalType": "ROLE",
|
||||||
|
"principalId": "logisticBoss",
|
||||||
|
"permission": "ALLOW"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -16,9 +16,6 @@
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"id": true,
|
"id": true,
|
||||||
"description": "Identifier"
|
"description": "Identifier"
|
||||||
},
|
|
||||||
"botanical": {
|
|
||||||
"type": "String"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"relations": {
|
"relations": {
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
let UserError = require('vn-loopback/util/user-error');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.rewriteDbError(function(err) {
|
||||||
|
if (err.code === 'ER_DUP_ENTRY')
|
||||||
|
return new UserError(`This specie already exist`);
|
||||||
|
return err;
|
||||||
|
});
|
||||||
|
};
|
|
@ -3,33 +3,17 @@
|
||||||
"base": "VnModel",
|
"base": "VnModel",
|
||||||
"options": {
|
"options": {
|
||||||
"mysql": {
|
"mysql": {
|
||||||
"table": "edi.specie"
|
"table": "vn.specie"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"properties": {
|
"properties": {
|
||||||
"specie_id": {
|
"id": {
|
||||||
"type": "Number",
|
"type": "Number",
|
||||||
"id": true,
|
"id": true,
|
||||||
"description": "Identifier"
|
"description": "Identifier"
|
||||||
},
|
},
|
||||||
"latin_species_name": {
|
"name": {
|
||||||
"type": "String"
|
"type": "String"
|
||||||
},
|
|
||||||
"entry_date": {
|
|
||||||
"type": "date"
|
|
||||||
},
|
|
||||||
"expiry_date": {
|
|
||||||
"type": "date"
|
|
||||||
},
|
|
||||||
"change_date_time": {
|
|
||||||
"type": "date"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"relations": {
|
|
||||||
"genus": {
|
|
||||||
"type": "belongsTo",
|
|
||||||
"model": "Genus",
|
|
||||||
"foreignKey": "genus_id"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"acls": [
|
"acls": [
|
||||||
|
@ -38,6 +22,12 @@
|
||||||
"principalType": "ROLE",
|
"principalType": "ROLE",
|
||||||
"principalId": "$everyone",
|
"principalId": "$everyone",
|
||||||
"permission": "ALLOW"
|
"permission": "ALLOW"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"accessType": "WRITE",
|
||||||
|
"principalType": "ROLE",
|
||||||
|
"principalId": "logisticBoss",
|
||||||
|
"permission": "ALLOW"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1,46 +1,46 @@
|
||||||
<vn-watcher
|
<vn-watcher
|
||||||
vn-id="watcher"
|
vn-id="watcher"
|
||||||
url="ItemBotanicals"
|
|
||||||
data="$ctrl.botanical"
|
data="$ctrl.botanical"
|
||||||
id-field="itemFk"
|
|
||||||
id-value="$ctrl.$params.id"
|
|
||||||
include="[{relation: 'genus'}, {relation: 'specie'}]"
|
|
||||||
auto-fill="true"
|
|
||||||
form="form">
|
form="form">
|
||||||
</vn-watcher>
|
</vn-watcher>
|
||||||
<form name="form" ng-submit="watcher.submit()" ng-cloak class="vn-w-md">
|
<form name="form" ng-submit="$ctrl.onSubmit()" ng-cloak class="vn-w-md">
|
||||||
<vn-card class="vn-pa-lg">
|
<vn-card class="vn-pa-lg">
|
||||||
<vn-horizontal>
|
|
||||||
<vn-textfield
|
|
||||||
label="Botanical"
|
|
||||||
ng-model="$ctrl.botanical.botanical"
|
|
||||||
vn-focus>
|
|
||||||
</vn-textfield>
|
|
||||||
</vn-horizontal>
|
|
||||||
<vn-horizontal>
|
<vn-horizontal>
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
label="Genus"
|
label="Genus"
|
||||||
ng-model="$ctrl.botanical.genusFk"
|
ng-model="$ctrl.botanical.genusFk"
|
||||||
initial-data="$ctrl.botanical.genus"
|
|
||||||
url="Genera"
|
url="Genera"
|
||||||
show-field="latin_genus_name"
|
show-field="name"
|
||||||
value-field="genus_id">
|
value-field="id">
|
||||||
|
<append>
|
||||||
|
<vn-icon-button
|
||||||
|
icon="add_circle"
|
||||||
|
vn-tooltip="New genus"
|
||||||
|
ng-click="$ctrl.showGenus($event)"
|
||||||
|
vn-acl="logisticBoss">
|
||||||
|
</vn-icon-button>
|
||||||
|
</append>
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
<vn-autocomplete
|
<vn-autocomplete
|
||||||
label="Species"
|
label="Species"
|
||||||
ng-model="$ctrl.botanical.specieFk"
|
ng-model="$ctrl.botanical.specieFk"
|
||||||
initial-data="$ctrl.botanical.specie"
|
|
||||||
url="Species"
|
url="Species"
|
||||||
show-field="latin_species_name"
|
show-field="name"
|
||||||
value-field="specie_id"
|
value-field="id">
|
||||||
fields="['genus_id']"
|
|
||||||
include="'genus'">
|
|
||||||
<tpl-item>
|
<tpl-item>
|
||||||
<div>{{latin_species_name}}</div>
|
<div>{{name}}</div>
|
||||||
<div class="text-caption text-secondary">
|
<div class="text-caption text-secondary">
|
||||||
{{genus.latin_genus_name}}
|
{{genus.name}}
|
||||||
</div>
|
</div>
|
||||||
</tpl-item>
|
</tpl-item>
|
||||||
|
<append>
|
||||||
|
<vn-icon-button
|
||||||
|
icon="add_circle"
|
||||||
|
vn-tooltip="New species"
|
||||||
|
ng-click="$ctrl.showSpecies($event)"
|
||||||
|
vn-acl="logisticBoss">
|
||||||
|
</vn-icon-button>
|
||||||
|
</append>
|
||||||
</vn-autocomplete>
|
</vn-autocomplete>
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
</vn-card>
|
</vn-card>
|
||||||
|
@ -57,4 +57,42 @@
|
||||||
ng-click="watcher.loadOriginalData()">
|
ng-click="watcher.loadOriginalData()">
|
||||||
</vn-button> -->
|
</vn-button> -->
|
||||||
</vn-button-bar>
|
</vn-button-bar>
|
||||||
</form>
|
</form>
|
||||||
|
<!-- Create new genus dialog -->
|
||||||
|
<vn-dialog class="edit"
|
||||||
|
vn-id="genus"
|
||||||
|
on-accept="$ctrl.onGenusAccept()"
|
||||||
|
message="New genus">
|
||||||
|
<tpl-body>
|
||||||
|
<vn-horizontal>
|
||||||
|
<vn-textfield vn-one vn-focus
|
||||||
|
label="Latin genus name"
|
||||||
|
ng-model="$ctrl.data.name"
|
||||||
|
required="true">
|
||||||
|
</vn-textfield>
|
||||||
|
</vn-horizontal>
|
||||||
|
</tpl-body>
|
||||||
|
<tpl-buttons>
|
||||||
|
<input type="button" response="cancel" translate-attr="{value: 'Cancel'}"/>
|
||||||
|
<button response="accept" translate>Create</button>
|
||||||
|
</tpl-buttons>
|
||||||
|
</vn-dialog>
|
||||||
|
<!-- Create new species dialog -->
|
||||||
|
<vn-dialog class="edit"
|
||||||
|
vn-id="species"
|
||||||
|
on-accept="$ctrl.onSpeciesAccept()"
|
||||||
|
message="New species">
|
||||||
|
<tpl-body>
|
||||||
|
<vn-horizontal>
|
||||||
|
<vn-textfield vn-one vn-focus
|
||||||
|
label="Latin species name"
|
||||||
|
ng-model="$ctrl.data.name"
|
||||||
|
required="true">
|
||||||
|
</vn-textfield>
|
||||||
|
</vn-horizontal>
|
||||||
|
</tpl-body>
|
||||||
|
<tpl-buttons>
|
||||||
|
<input type="button" response="cancel" translate-attr="{value: 'Cancel'}"/>
|
||||||
|
<button response="accept" translate>Create</button>
|
||||||
|
</tpl-buttons>
|
||||||
|
</vn-dialog>
|
|
@ -1,9 +1,89 @@
|
||||||
import ngModule from '../module';
|
import ngModule from '../module';
|
||||||
import Section from 'salix/components/section';
|
import Section from 'salix/components/section';
|
||||||
|
class Controller extends Section {
|
||||||
|
get item() {
|
||||||
|
return this._item;
|
||||||
|
}
|
||||||
|
|
||||||
class Controller extends Section {}
|
set item(value) {
|
||||||
|
this._item = value;
|
||||||
|
if (value)
|
||||||
|
this.getBotanicalData();
|
||||||
|
}
|
||||||
|
|
||||||
|
showGenus(event) {
|
||||||
|
if (event.defaultPrevented) return;
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
this.$.genus.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
showSpecies(event) {
|
||||||
|
if (event.defaultPrevented) return;
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
this.$.species.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
onGenusAccept() {
|
||||||
|
try {
|
||||||
|
if (!this.data.name)
|
||||||
|
throw new Error(`The name of the genus can't be empty`);
|
||||||
|
|
||||||
|
this.$http.post(`genera`, this.data).then(res => {
|
||||||
|
this.vnApp.showMessage(this.$t('The genus has been created'));
|
||||||
|
this.emit('response', {$response: res.data});
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
this.vnApp.showError(this.$t(e.message));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
onSpeciesAccept() {
|
||||||
|
try {
|
||||||
|
if (!this.data.name)
|
||||||
|
throw new Error(`The name of the specie can't be empty`);
|
||||||
|
|
||||||
|
this.$http.post(`species`, this.data).then(res => {
|
||||||
|
this.vnApp.showMessage(this.$t('The specie has been created'));
|
||||||
|
this.emit('response', {$response: res.data});
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
this.vnApp.showError(this.$t(e.message));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
getBotanicalData() {
|
||||||
|
const filter = {
|
||||||
|
where: {itemFk: this.item.id}
|
||||||
|
};
|
||||||
|
const filterParams = encodeURIComponent(JSON.stringify(filter));
|
||||||
|
this.$http.get(`ItemBotanicals?filter=${filterParams}`).then(res => {
|
||||||
|
if (res.data[0])
|
||||||
|
this.botanical = res.data[0];
|
||||||
|
|
||||||
|
else
|
||||||
|
this.botanical = {itemFk: this.item.id};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onSubmit() {
|
||||||
|
this.$.watcher.check();
|
||||||
|
this.$http.patch(`ItemBotanicals`, this.botanical).then(() => {
|
||||||
|
this.$.watcher.notifySaved();
|
||||||
|
this.$.watcher.updateOriginalData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ngModule.vnComponent('vnItemBotanical', {
|
ngModule.vnComponent('vnItemBotanical', {
|
||||||
template: require('./index.html'),
|
template: require('./index.html'),
|
||||||
|
bindings: {
|
||||||
|
item: '<'
|
||||||
|
},
|
||||||
controller: Controller
|
controller: Controller
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,179 @@
|
||||||
|
import './index.js';
|
||||||
|
|
||||||
|
describe('vnItemBotanical', () => {
|
||||||
|
describe('Component vnItemBotanical', () => {
|
||||||
|
let $httpBackend;
|
||||||
|
let $scope;
|
||||||
|
let controller;
|
||||||
|
let vnApp;
|
||||||
|
beforeEach(ngModule('item'));
|
||||||
|
|
||||||
|
beforeEach(inject(($componentController, $rootScope, _$httpBackend_, _vnApp_) => {
|
||||||
|
$httpBackend = _$httpBackend_;
|
||||||
|
vnApp = _vnApp_;
|
||||||
|
jest.spyOn(vnApp, 'showError');
|
||||||
|
$scope = $rootScope.$new();
|
||||||
|
const $element = angular.element('<vn-item-botanical></vn-item-botanical>');
|
||||||
|
controller = $componentController('vnItemBotanical', {$element, $scope});
|
||||||
|
controller.item = {id: 5};
|
||||||
|
controller.$params = {itemFk: 5};
|
||||||
|
controller.$ = {
|
||||||
|
watcher: {
|
||||||
|
check: () => {},
|
||||||
|
notifySaved: () => {},
|
||||||
|
updateOriginalData: () => {}},
|
||||||
|
genus: {
|
||||||
|
show: () => {}
|
||||||
|
},
|
||||||
|
species: {
|
||||||
|
show: () => {}
|
||||||
|
}};
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('showGenus()', () => {
|
||||||
|
it('should do nothing in genus field if it default is prevented', () => {
|
||||||
|
const event = {
|
||||||
|
defaultPrevented: true,
|
||||||
|
preventDefault: () => {}
|
||||||
|
};
|
||||||
|
jest.spyOn(event, 'preventDefault');
|
||||||
|
jest.spyOn(controller.$.genus, 'show');
|
||||||
|
|
||||||
|
controller.showGenus(event);
|
||||||
|
|
||||||
|
expect(event.preventDefault).not.toHaveBeenCalledWith();
|
||||||
|
expect(controller.$.genus.show).not.toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call preventDefault() and show() in genus field when the default is not prevented', () => {
|
||||||
|
const event = {
|
||||||
|
defaultPrevented: false,
|
||||||
|
preventDefault: () => {}
|
||||||
|
};
|
||||||
|
|
||||||
|
jest.spyOn(event, 'preventDefault');
|
||||||
|
jest.spyOn(controller.$.genus, 'show');
|
||||||
|
|
||||||
|
controller.showGenus(event);
|
||||||
|
|
||||||
|
expect(event.preventDefault).toHaveBeenCalledWith();
|
||||||
|
expect(controller.$.genus.show).toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('showSpecies()', () => {
|
||||||
|
it('should do nothing in species field if it default is prevented', () => {
|
||||||
|
const event = {
|
||||||
|
defaultPrevented: true,
|
||||||
|
preventDefault: () => {}
|
||||||
|
};
|
||||||
|
jest.spyOn(event, 'preventDefault');
|
||||||
|
jest.spyOn(controller.$.species, 'show');
|
||||||
|
|
||||||
|
controller.showSpecies(event);
|
||||||
|
|
||||||
|
expect(event.preventDefault).not.toHaveBeenCalledWith();
|
||||||
|
expect(controller.$.species.show).not.toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call preventDefault() and show() in species field when the default is not prevented', () => {
|
||||||
|
const event = {
|
||||||
|
defaultPrevented: false,
|
||||||
|
preventDefault: () => {}
|
||||||
|
};
|
||||||
|
|
||||||
|
jest.spyOn(event, 'preventDefault');
|
||||||
|
jest.spyOn(controller.$.species, 'show');
|
||||||
|
|
||||||
|
controller.showSpecies(event);
|
||||||
|
|
||||||
|
expect(event.preventDefault).toHaveBeenCalledWith();
|
||||||
|
expect(controller.$.species.show).toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('onGenusAccept()', () => {
|
||||||
|
it('should throw an error if there is no name in the genus name field', () => {
|
||||||
|
jest.spyOn(controller.vnApp, 'showMessage');
|
||||||
|
|
||||||
|
controller.data = {};
|
||||||
|
|
||||||
|
controller.onGenusAccept();
|
||||||
|
|
||||||
|
expect(controller.vnApp.showError).toHaveBeenCalledWith(`The name of the genus can't be empty`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should do add the new genus', () => {
|
||||||
|
$httpBackend.whenRoute('GET', 'ItemBotanicals').respond({});
|
||||||
|
$httpBackend.resetExpectations();
|
||||||
|
|
||||||
|
controller.data = {
|
||||||
|
name: 'Anilius'
|
||||||
|
};
|
||||||
|
|
||||||
|
$httpBackend.expectPOST('genera', controller.data).respond(200, controller.data);
|
||||||
|
|
||||||
|
controller.onGenusAccept();
|
||||||
|
$httpBackend.flush();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('onSpeciesAccept()', () => {
|
||||||
|
it('should throw an error if there is no name in the specie name field', () => {
|
||||||
|
jest.spyOn(controller.vnApp, 'showMessage');
|
||||||
|
|
||||||
|
controller.data = {};
|
||||||
|
|
||||||
|
controller.onSpeciesAccept();
|
||||||
|
|
||||||
|
expect(controller.vnApp.showError).toHaveBeenCalledWith(`The name of the specie can't be empty`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should do add the new specie', () => {
|
||||||
|
$httpBackend.whenRoute('GET', 'ItemBotanicals').respond({});
|
||||||
|
$httpBackend.resetExpectations();
|
||||||
|
|
||||||
|
controller.data = {
|
||||||
|
name: 'Spasiva'
|
||||||
|
};
|
||||||
|
|
||||||
|
$httpBackend.expectPOST('species', controller.data).respond(200, controller.data);
|
||||||
|
|
||||||
|
controller.onSpeciesAccept();
|
||||||
|
$httpBackend.flush();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('onSubmit()', () => {
|
||||||
|
it('should make an HTTP POST request to save the genus and species data', () => {
|
||||||
|
$httpBackend.whenRoute('GET', 'ItemBotanicals').respond({});
|
||||||
|
$httpBackend.resetExpectations();
|
||||||
|
|
||||||
|
jest.spyOn(controller.$.watcher, 'updateOriginalData');
|
||||||
|
jest.spyOn(controller.$.watcher, 'check');
|
||||||
|
jest.spyOn(controller.$.watcher, 'notifySaved');
|
||||||
|
|
||||||
|
controller.botanical = [{itemFk: 5, genusFk: 3, specieFk: 2}];
|
||||||
|
$httpBackend.expectPATCH('ItemBotanicals', controller.botanical).respond({});
|
||||||
|
controller.onSubmit();
|
||||||
|
$httpBackend.flush();
|
||||||
|
|
||||||
|
expect(controller.$.watcher.updateOriginalData).toHaveBeenCalledWith();
|
||||||
|
expect(controller.$.watcher.check).toHaveBeenCalledWith();
|
||||||
|
expect(controller.$.watcher.notifySaved).toHaveBeenCalledWith();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getBotanicalData()', () => {
|
||||||
|
it('should get the item data from itemBotanical', () => {
|
||||||
|
const response = ['MyResult'];
|
||||||
|
$httpBackend.whenRoute('GET', `ItemBotanicals`).respond(response);
|
||||||
|
controller.getBotanicalData();
|
||||||
|
$httpBackend.flush();
|
||||||
|
|
||||||
|
expect(controller.botanical).toEqual(response[0]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
The genus has been created: El genus ha sido creado
|
||||||
|
The specie has been created: La especie ha sido creada
|
||||||
|
Latin species name: Nombre de la especie en latín
|
||||||
|
Latin genus name: Nombre del genus en latín
|
||||||
|
Species: Especie
|
|
@ -26,7 +26,8 @@ Intrastat code: Código intrastat
|
||||||
Warehouse: Almacén
|
Warehouse: Almacén
|
||||||
Code: Código
|
Code: Código
|
||||||
State: Estado
|
State: Estado
|
||||||
Species: Especie
|
New species: Nueva especie
|
||||||
|
New genus: Nuevo genus
|
||||||
Add tag: Añadir etiqueta
|
Add tag: Añadir etiqueta
|
||||||
Remove tag: Quitar etiqueta
|
Remove tag: Quitar etiqueta
|
||||||
Add niche: Añadir nicho
|
Add niche: Añadir nicho
|
||||||
|
|
|
@ -169,14 +169,11 @@
|
||||||
ng-show="!$ctrl.isBuyer">
|
ng-show="!$ctrl.isBuyer">
|
||||||
Botanical
|
Botanical
|
||||||
</h4>
|
</h4>
|
||||||
<vn-label-value label="Botanical"
|
|
||||||
value="{{$ctrl.summary.botanical.botanical}}">
|
|
||||||
</vn-label-value>
|
|
||||||
<vn-label-value label="Genus"
|
<vn-label-value label="Genus"
|
||||||
value="{{$ctrl.summary.botanical.genus.latin_genus_name}}">
|
value="{{$ctrl.summary.botanical.genus.name}}">
|
||||||
</vn-label-value>
|
</vn-label-value>
|
||||||
<vn-label-value label="Specie"
|
<vn-label-value label="Specie"
|
||||||
value="{{$ctrl.summary.botanical.specie.latin_species_name}}">
|
value="{{$ctrl.summary.botanical.specie.name}}">
|
||||||
</vn-label-value>
|
</vn-label-value>
|
||||||
</vn-one>
|
</vn-one>
|
||||||
<vn-one name="barcode">
|
<vn-one name="barcode">
|
||||||
|
|
Loading…
Reference in New Issue