167 lines
3.7 KiB
SQL
167 lines
3.7 KiB
SQL
DELIMITER $$
|
|
$$
|
|
|
|
CREATE OR REPLACE DEFINER=`root`@`localhost`PROCEDURE floranet.order_confirm(vCatalogueFk INT)
|
|
READS SQL DATA
|
|
|
|
proc:BEGIN
|
|
/** Update order.isPaid field, and makes the ticket
|
|
*
|
|
* @param vCatalogueFk floranet.catalogue.id
|
|
*
|
|
* @returns floranet.order.isPaid
|
|
*/
|
|
DECLARE vNewTicketFk INT;
|
|
DECLARE vCustomerEmail VARCHAR(255);
|
|
DECLARE vFloranetEmail VARCHAR(255);
|
|
DECLARE vSubjectEmail VARCHAR(100);
|
|
DECLARE vBodyEmail TEXT;
|
|
DECLARE vZoneFk INT;
|
|
|
|
DECLARE exit handler FOR SQLEXCEPTION
|
|
BEGIN
|
|
ROLLBACK;
|
|
|
|
GET DIAGNOSTICS CONDITION 2 @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
|
|
|
|
SELECT CONCAT('ERROR ', IFNULL(@errno,0), ': ', ifnull(@text,'texto')) AS `SQLEXCEPTION`;
|
|
|
|
CALL vn.mail_insert(
|
|
'floranet@verdnatura.es,pako@verdnatura.es',
|
|
'noreply@verdnatura.es',
|
|
'Floranet.order_confirm failure',
|
|
CONCAT('CatalogueFk: ', vCatalogueFk, '\n','ERROR ', IFNULL(@errno, 0), ': ', ifnull(@text, 'texto'))
|
|
);
|
|
END;
|
|
|
|
IF (SELECT isPaid FROM `order` WHERE catalogueFk = vCatalogueFk) THEN
|
|
SELECT CONCAT('CatalogueFk: ', vCatalogueFk, ' Esta orden ya está confirmada') AS `ERROR`;
|
|
LEAVE proc;
|
|
END IF;
|
|
|
|
START TRANSACTION;
|
|
|
|
UPDATE `order`
|
|
SET isPaid = TRUE,
|
|
payed = NOW()
|
|
WHERE catalogueFk = vCatalogueFk;
|
|
|
|
SELECT zoneFk
|
|
INTO vZoneFk
|
|
FROM (
|
|
SELECT zoneFk, COUNT(*) totalCount
|
|
FROM vn.ticket t
|
|
JOIN catalogue c ON c.id = vCatalogueFk
|
|
WHERE t.shipped > util.VN_CURDATE() - INTERVAL 1 YEAR
|
|
AND t.addressFk = c.addressFk
|
|
GROUP BY zoneFk
|
|
ORDER BY totalCount DESC
|
|
LIMIT 10000000000000000000
|
|
) sub
|
|
LIMIT 1;
|
|
|
|
INSERT INTO vn.ticket (
|
|
clientFk,
|
|
shipped,
|
|
addressFk,
|
|
agencyModeFk,
|
|
nickname,
|
|
warehouseFk,
|
|
routeFk,
|
|
companyFk,
|
|
landed,
|
|
zoneFk
|
|
)
|
|
SELECT a.clientFk,
|
|
c.dated - INTERVAL 1 DAY,
|
|
c.addressFk,
|
|
a.agencyModeFk,
|
|
a.nickname,
|
|
ag.warehouseFk,
|
|
NULL,
|
|
co.id,
|
|
c.dated,
|
|
vZoneFk
|
|
FROM vn.address a
|
|
JOIN vn.agencyMode am ON am.id = a.agencyModeFk
|
|
JOIN vn.agency ag ON ag.id = am.agencyFk
|
|
JOIN catalogue c ON c.addressFk = a.id
|
|
JOIN vn.company co ON co.code = 'VNL'
|
|
WHERE c.id = vCatalogueFk;
|
|
|
|
SET vNewTicketFk = LAST_INSERT_ID();
|
|
|
|
INSERT INTO vn.sale(
|
|
ticketFk,
|
|
itemFk,
|
|
concept,
|
|
price,
|
|
quantity)
|
|
SELECT
|
|
vNewTicketFk,
|
|
c.itemFk,
|
|
CONCAT('Entrega: ',c.name),
|
|
- c.price,
|
|
1
|
|
FROM catalogue c
|
|
JOIN addressPostCode apc
|
|
ON apc.addressFk = c.addressFk
|
|
AND apc.dayOfWeek = dayOfWeek(c.dated)
|
|
WHERE c.id = vCatalogueFk;
|
|
|
|
INSERT INTO vn.sale(
|
|
ticketFk,
|
|
itemFk,
|
|
concept,
|
|
price,
|
|
quantity)
|
|
SELECT
|
|
vNewTicketFk,
|
|
r.elementFk,
|
|
i.longName,
|
|
r.cost,
|
|
r.quantity
|
|
FROM catalogue c
|
|
JOIN recipe r ON r.itemFk = c.itemFk
|
|
JOIN vn.item i ON i.id = r.elementFk
|
|
WHERE c.id = vCatalogueFk;
|
|
|
|
SELECT cl.email,
|
|
cf.email,
|
|
CONCAT('Nuevo pedido FLORANET para entrega el ',c.dated),
|
|
CONCAT_WS('\n',
|
|
CONCAT('Producto: ', c.name),
|
|
CONCAT('Fecha de entrega: ',c.dated),
|
|
CONCAT('Destinatario: ', o.deliveryName),
|
|
CONCAT('Dirección: ', o.address),
|
|
CONCAT('CP: ', c.postalCode),
|
|
CONCAT('Foto: ', c.image),
|
|
CONCAT('Mensaje: ', IFNULL(o.message,"Ninguno.")),
|
|
CONCAT('Teléfono: ',IFNULL(o.deliveryPhone,"--")),
|
|
CONCAT('Observaciones: ', IFNULL(o.observations,"No hay."))
|
|
)
|
|
INTO vCustomerEmail,
|
|
vFloranetEmail,
|
|
vSubjectEmail,
|
|
vBodyEmail
|
|
FROM vn.client cl
|
|
JOIN vn.address a ON a.clientFk = cl.id
|
|
JOIN catalogue c ON c.addressFk = a.id
|
|
JOIN `order` o ON o.catalogueFk = c.id
|
|
JOIN config cf
|
|
WHERE c.id = vCatalogueFk;
|
|
|
|
CALL vn.mail_insert(
|
|
vCustomerEmail,
|
|
vFloranetEmail,
|
|
vSubjectEmail,
|
|
vBodyEmail);
|
|
|
|
SELECT isPaid, vNewTicketFk
|
|
FROM `order`
|
|
WHERE catalogueFk = vCatalogueFk;
|
|
|
|
COMMIT;
|
|
|
|
END$$
|
|
DELIMITER ; |