P5-801 Add specialized views for eSales export
This commit is contained in:
@@ -0,0 +1,74 @@
|
|||||||
|
DROP MATERIALIZED VIEW IF EXISTS v_esales_categorytree_i18n;
|
||||||
|
-- REFRESH MATERIALIZED VIEW v_esales_categorytree_i18n;
|
||||||
|
|
||||||
|
CREATE MATERIALIZED VIEW v_esales_categorytree_i18n AS
|
||||||
|
SELECT *,
|
||||||
|
-- Remove diacritics and other stuff
|
||||||
|
REGEXP_REPLACE(
|
||||||
|
UNACCENT(REPLACE(REPLACE(path, ' ', '_'), '&', 'and')),
|
||||||
|
'[^\w/\-]', '', 'g'
|
||||||
|
) AS path_translated
|
||||||
|
FROM (
|
||||||
|
SELECT c.id,
|
||||||
|
(
|
||||||
|
SELECT id
|
||||||
|
FROM categories s
|
||||||
|
WHERE s.lft < c.lft AND s.rgt > c.rgt
|
||||||
|
ORDER BY s.rgt-c.rgt ASC
|
||||||
|
LIMIT 1
|
||||||
|
) AS parent_id,
|
||||||
|
locale_id,
|
||||||
|
locale,
|
||||||
|
c.name,
|
||||||
|
(
|
||||||
|
SELECT LOWER(array_to_string(array_agg(main.parent_name), '/')) AS path
|
||||||
|
FROM (
|
||||||
|
SELECT node.id,
|
||||||
|
(
|
||||||
|
SELECT name
|
||||||
|
FROM category_texts
|
||||||
|
WHERE locale_id = c.locale_id
|
||||||
|
AND category_id = parent.id
|
||||||
|
) AS parent_name
|
||||||
|
FROM categories node,
|
||||||
|
categories parent
|
||||||
|
WHERE node.lft BETWEEN parent.lft AND parent.rgt
|
||||||
|
AND node.id = c.id
|
||||||
|
ORDER BY parent.lft
|
||||||
|
) main
|
||||||
|
GROUP BY main.id
|
||||||
|
) AS path,
|
||||||
|
CASE c.rgt - c.lft
|
||||||
|
WHEN 1 THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END AS is_leaf,
|
||||||
|
(
|
||||||
|
SELECT count(*) - 1
|
||||||
|
FROM categories node,
|
||||||
|
categories parent
|
||||||
|
WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.id = c.id
|
||||||
|
) AS depth,
|
||||||
|
(
|
||||||
|
SELECT count(*) - 1
|
||||||
|
FROM categories c1
|
||||||
|
WHERE c1.lft BETWEEN c.lft AND c.rgt
|
||||||
|
) AS child_count,
|
||||||
|
c.lft,
|
||||||
|
c.rgt
|
||||||
|
FROM (
|
||||||
|
SELECT c.id,
|
||||||
|
s.id AS locale_id,
|
||||||
|
s.value AS locale,
|
||||||
|
LOWER(s_t.name) AS name,
|
||||||
|
rgt,
|
||||||
|
lft
|
||||||
|
FROM locales s
|
||||||
|
JOIN category_texts s_t ON s.id = s_t.locale_id
|
||||||
|
JOIN categories c ON s_t.category_id = c.id
|
||||||
|
ORDER BY s.id, c.lft
|
||||||
|
) c
|
||||||
|
) main;
|
||||||
|
|
||||||
|
-- DROP INDEX v_esales_categorytree_i18n_id_locale_id;
|
||||||
|
CREATE UNIQUE INDEX v_esales_categorytree_i18n_id_locale_id
|
||||||
|
ON v_esales_categorytree_i18n (id, locale_id);
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
-- DROP MATERIALIZED VIEW v_esales_printproduct;
|
||||||
|
-- REFRESH MATERIALIZED VIEW v_esales_printproduct;
|
||||||
|
-- CREATE MATERIALIZED VIEW v_esales_printproduct
|
||||||
|
CREATE MATERIALIZED VIEW v_esales_printproduct AS
|
||||||
|
SELECT main.id,
|
||||||
|
main.product_id,
|
||||||
|
main.path,
|
||||||
|
main.article_number,
|
||||||
|
main.title,
|
||||||
|
main.group_id,
|
||||||
|
main.group_name,
|
||||||
|
main.type_id,
|
||||||
|
main.type_name,
|
||||||
|
main.price,
|
||||||
|
main.image,
|
||||||
|
main.thumbnail,
|
||||||
|
main.width,
|
||||||
|
main.height,
|
||||||
|
CASE
|
||||||
|
WHEN main.width::integer > main.height::integer THEN 'landscape'::text
|
||||||
|
WHEN main.width::integer < main.height::integer THEN 'portrait'::text
|
||||||
|
ELSE 'square'::text
|
||||||
|
END AS orientation
|
||||||
|
FROM (
|
||||||
|
SELECT pp.printid AS id,
|
||||||
|
pp.productid AS product_id,
|
||||||
|
(SELECT path FROM "product-products" WHERE productid = pp.productid LIMIT 1) AS path,
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = pp.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'artNo' LIMIT 1)
|
||||||
|
) AS article_number,
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = pp.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'name' LIMIT 1)
|
||||||
|
) AS title,
|
||||||
|
pp.groupid AS group_id,
|
||||||
|
(
|
||||||
|
SELECT "group"
|
||||||
|
FROM "product-groups"
|
||||||
|
WHERE groupid = pp.groupid
|
||||||
|
LIMIT 1
|
||||||
|
) AS group_name,
|
||||||
|
pp.typeid AS type_id,
|
||||||
|
(
|
||||||
|
SELECT type
|
||||||
|
FROM "product-types"
|
||||||
|
WHERE typeid = pp.typeid
|
||||||
|
LIMIT 1
|
||||||
|
) AS type_name,
|
||||||
|
(
|
||||||
|
(
|
||||||
|
SELECT min(price) AS min
|
||||||
|
FROM "product-printprices"
|
||||||
|
WHERE groupid = pp.groupid
|
||||||
|
) * COALESCE(
|
||||||
|
(
|
||||||
|
SELECT 1 + designers.pricepremium / 100
|
||||||
|
FROM designers
|
||||||
|
WHERE designers.designerid = (
|
||||||
|
SELECT designerid FROM "product-products" WHERE productid = pp.productid LIMIT 1)
|
||||||
|
), 1)
|
||||||
|
) AS price,
|
||||||
|
('//images.photowall.com/products/' || pp.productid) || '.jpg' AS image,
|
||||||
|
('//images.photowall.com/products/' || pp.productid) || '.jpg?w=80' AS thumbnail,
|
||||||
|
(SELECT value FROM "product-products_fields" WHERE productid = pp.productid AND fieldid = 5 LIMIT 1) AS width,
|
||||||
|
(SELECT value FROM "product-products_fields" WHERE productid = pp.productid AND fieldid = 3 LIMIT 1) AS height
|
||||||
|
FROM "product-printproducts" pp
|
||||||
|
) main;
|
||||||
|
|
||||||
|
-- DROP INDEX v_categorytree_i18n_id_locale_id;
|
||||||
|
CREATE UNIQUE INDEX v_esales_printproduct_id
|
||||||
|
ON v_esales_printproduct (id);
|
||||||
|
|
||||||
|
CREATE INDEX v_esales_printproduct_product_id
|
||||||
|
ON v_esales_printproduct (product_id);
|
||||||
@@ -0,0 +1,245 @@
|
|||||||
|
-- DROP MATERIALIZED VIEW v_esales_product;
|
||||||
|
-- REFRESH MATERIALIZED VIEW v_esales_product;
|
||||||
|
CREATE MATERIALIZED VIEW v_esales_product AS
|
||||||
|
SELECT main.product_id AS id,
|
||||||
|
main."artNo",
|
||||||
|
stock.id AS stock_id,
|
||||||
|
stock.price AS stock_price,
|
||||||
|
main.path,
|
||||||
|
main.visible,
|
||||||
|
main.browsable,
|
||||||
|
main.designerid,
|
||||||
|
main.designercollection_id,
|
||||||
|
COALESCE((
|
||||||
|
SELECT pricepremium / 100
|
||||||
|
FROM designers
|
||||||
|
WHERE designerid = main.designerid
|
||||||
|
LIMIT 1
|
||||||
|
), 0) AS designer_margin,
|
||||||
|
(
|
||||||
|
SELECT typeid
|
||||||
|
FROM "product-printproducts"
|
||||||
|
WHERE productid = main.product_id
|
||||||
|
LIMIT 1
|
||||||
|
) AS producttype_id,
|
||||||
|
main.name,
|
||||||
|
main.height,
|
||||||
|
main.original_article_number,
|
||||||
|
main.width,
|
||||||
|
main.widths,
|
||||||
|
main.min_height,
|
||||||
|
main.min_width,
|
||||||
|
main.max_height,
|
||||||
|
main.max_width,
|
||||||
|
main.photowall_resolution,
|
||||||
|
main.canvas_resolution,
|
||||||
|
main.wallpaper_resolution,
|
||||||
|
main.lock_height,
|
||||||
|
COALESCE(main.additionalprice, 0::double precision) AS additionalprice,
|
||||||
|
main.ref1,
|
||||||
|
main.ref2,
|
||||||
|
main.ref3,
|
||||||
|
main.copyright,
|
||||||
|
main.proportions_warning,
|
||||||
|
main.margin_width_max,
|
||||||
|
main.margin_width_min,
|
||||||
|
main.margin_height_max,
|
||||||
|
main.margin_height_min,
|
||||||
|
main.width::numeric /
|
||||||
|
CASE
|
||||||
|
WHEN main.height = 0 THEN (-1.0)
|
||||||
|
ELSE main.height::numeric
|
||||||
|
END AS width_height_ratio,
|
||||||
|
main.batch,
|
||||||
|
main.image_resolution,
|
||||||
|
main."focusXpoint",
|
||||||
|
main."focusYpoint",
|
||||||
|
main."focusXpoint2",
|
||||||
|
main."focusYpoint2",
|
||||||
|
main.repeating_pattern
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT products.productid AS product_id,
|
||||||
|
products.path,
|
||||||
|
products.visible,
|
||||||
|
products.browsable,
|
||||||
|
products.designerid,
|
||||||
|
products.designercollectionid AS designercollection_id,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'artNo' LIMIT 1)
|
||||||
|
) AS "artNo",
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'name' LIMIT 1)
|
||||||
|
) AS name,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'height' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS height,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'orgArtNo' LIMIT 1)
|
||||||
|
) AS original_article_number,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'width' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS width,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'widths' LIMIT 1)
|
||||||
|
) AS widths,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'min-height' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS min_height,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'min-width' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS min_width,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'max-height' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS max_height,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'max-width' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS max_width,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'photowall_resolution' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS photowall_resolution,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'canvas_resolution' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS canvas_resolution,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'wallpaper_resolution' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS wallpaper_resolution,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'lock_height' LIMIT 1)
|
||||||
|
) AS lock_height,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'additionalprice' LIMIT 1)
|
||||||
|
)::double precision AS additionalprice,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'ref1' LIMIT 1)
|
||||||
|
) AS ref1,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'ref2' LIMIT 1)
|
||||||
|
) AS ref2,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'ref3' LIMIT 1)
|
||||||
|
) AS ref3,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'copyright' LIMIT 1)
|
||||||
|
) AS copyright,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'proportions_warning' LIMIT 1)
|
||||||
|
) AS proportions_warning,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'margin_width_max' LIMIT 1)
|
||||||
|
) AS margin_width_max,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'margin_width_min' LIMIT 1)
|
||||||
|
) AS margin_width_min,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'margin_height_max' LIMIT 1)
|
||||||
|
) AS margin_height_max,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'margin_height_min' LIMIT 1)
|
||||||
|
) AS margin_height_min,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'batch' LIMIT 1)
|
||||||
|
) AS batch,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'image_resolution' LIMIT 1)
|
||||||
|
AND value ~ '^\d+$'
|
||||||
|
)::integer AS image_resolution,
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'focusXpoint' LIMIT 1)
|
||||||
|
)::double precision AS "focusXpoint",
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'focusYpoint' LIMIT 1)
|
||||||
|
)::double precision AS "focusYpoint",
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'focusXpoint2' LIMIT 1)
|
||||||
|
)::double precision AS "focusXpoint2",
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'focusYpoint2' LIMIT 1)
|
||||||
|
)::double precision AS "focusYpoint2",
|
||||||
|
|
||||||
|
(
|
||||||
|
SELECT value FROM "product-products_fields" WHERE productid = products.productid
|
||||||
|
AND fieldid = (SELECT fieldid FROM "product-fields" WHERE field = 'repeating_pattern' LIMIT 1)
|
||||||
|
) AS repeating_pattern
|
||||||
|
|
||||||
|
FROM "product-products" products
|
||||||
|
) main
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT stockid AS id,
|
||||||
|
productid AS product_id,
|
||||||
|
(SELECT price FROM "product-stockprices" WHERE priceid = s.priceid LIMIT 1) AS price
|
||||||
|
FROM "product-stockproducts" s
|
||||||
|
) stock ON main.product_id = stock.product_id;
|
||||||
|
|
||||||
|
-- DROP INDEX v_product_id;
|
||||||
|
CREATE UNIQUE INDEX v_esales_product_id
|
||||||
|
ON v_esales_product (id);
|
||||||
Reference in New Issue
Block a user