last price age

This commit is contained in:
Paul Trowbridge 2025-07-29 02:20:10 -04:00
parent 90ba57ca9b
commit b42573a8ff
2 changed files with 17 additions and 10 deletions

View File

@ -1,7 +1,8 @@
CREATE OR REPLACE FUNCTION pricequote.guidance_logic( CREATE OR REPLACE FUNCTION pricequote.guidance_logic(
_target_price NUMERIC(20,5), _target_price NUMERIC(20,5),
_last_price NUMERIC(20,5), _last_price NUMERIC(20,5),
_list_price NUMERIC(20,5) _list_price NUMERIC(20,5),
_last_date DATE
) )
RETURNS TABLE ( RETURNS TABLE (
guidance_price NUMERIC(20,5), guidance_price NUMERIC(20,5),
@ -12,8 +13,9 @@ DECLARE
_reason TEXT := ''; _reason TEXT := '';
_floored NUMERIC(20,5); _floored NUMERIC(20,5);
_capped NUMERIC(20,5); _capped NUMERIC(20,5);
_is_last_recent BOOLEAN := _last_date IS NOT NULL AND _last_date > CURRENT_DATE - INTERVAL '2 years';
BEGIN BEGIN
IF _target_price IS NOT NULL AND _last_price IS NOT NULL THEN IF _target_price IS NOT NULL AND _last_price IS NOT NULL AND _is_last_recent THEN
_floored := GREATEST(_target_price, _last_price * 0.95); _floored := GREATEST(_target_price, _last_price * 0.95);
_capped := LEAST(_floored, _last_price); _capped := LEAST(_floored, _last_price);
_price := LEAST(COALESCE(_list_price, 1e9), _capped); _price := LEAST(COALESCE(_list_price, 1e9), _capped);
@ -33,16 +35,19 @@ BEGIN
END IF; END IF;
END IF; END IF;
ELSIF _last_price IS NOT NULL THEN ELSIF _last_price IS NOT NULL AND _is_last_recent THEN
_price := _last_price; _price := _last_price;
_reason := 'Last price - no target'; _reason := 'Last price - no target';
ELSE ELSIF _target_price IS NOT NULL THEN
_price := _target_price; _price := _target_price;
_reason := 'Target price - no prior sale'; _reason := 'Target price - no prior sale';
ELSE
_price := NULL;
_reason := 'No pricing available';
END IF; END IF;
RETURN QUERY SELECT _price, _reason; RETURN QUERY SELECT _price, _reason;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;

View File

@ -1,3 +1,5 @@
DROP FUNCTION IF EXISTS pricequote.single_price_call;
CREATE OR REPLACE FUNCTION pricequote.single_price_call( CREATE OR REPLACE FUNCTION pricequote.single_price_call(
_bill TEXT, _bill TEXT,
_ship TEXT, _ship TEXT,
@ -18,7 +20,7 @@ RETURNS TABLE (
tier TEXT, tier TEXT,
pltq NUMERIC, pltq NUMERIC,
plevel TEXT, plevel TEXT,
hist JSONB, -- hist JSONB,
last_price NUMERIC, last_price NUMERIC,
last_date DATE, last_date DATE,
last_order TEXT, last_order TEXT,
@ -127,8 +129,8 @@ BEGIN
'last_price', _last_price, 'last_price', _last_price,
'last_date', _last_date, 'last_date', _last_date,
'last_order', _last_order, 'last_order', _last_order,
'last_quote', _last_quote, 'last_quote', _last_quote
'full_history_________', _hist -- 'full_history_________', _hist
); );
------------------------------------------------------------------ ------------------------------------------------------------------
@ -165,7 +167,7 @@ BEGIN
INTO INTO
_guidance_price, _guidance_reason _guidance_price, _guidance_reason
FROM FROM
pricequote.guidance_logic(_tprice, _last_price, _list_price) gl; pricequote.guidance_logic(_tprice, _last_price, _list_price, _last_date) gl;
_expl := _expl || jsonb_build_object( _expl := _expl || jsonb_build_object(
'guidance_price', _guidance_price, 'guidance_price', _guidance_price,
@ -179,7 +181,7 @@ BEGIN
SELECT SELECT
_bill, _ship, _part, _stlc, _v1ds, _vol, _bill, _ship, _part, _stlc, _v1ds, _vol,
_chan, _cust, _tier, _pltq, _plevel, _chan, _cust, _tier, _pltq, _plevel,
_hist, -- _hist,
_last_price, _last_date, _last_order, _last_quote, _last_price, _last_date, _last_order, _last_quote,
_tprice, _tprice,
_guidance_price, _guidance_price,