P5-801 Add specialized views for eSales export

This commit is contained in:
Rikard Bartholf
2016-08-11 07:55:31 +02:00
parent 2deda628b2
commit 131da5e69e
3 changed files with 394 additions and 0 deletions
+74
View File
@@ -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);
+75
View File
@@ -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);
+245
View File
@@ -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);