Queries: Stock
From iDempiere en
					
Product
Product grouped by product type
select a.ad_client_id, a.producttype,count(*) from m_product a group by a.ad_client_id, a.producttype order by a.ad_client_id, a.producttype;
Cost
Products with zero cost
drop view if exists zz_product_qtys_v;
create or replace view zz_product_qtys_v as 
SELECT
	l.ad_client_id,
	p.m_product_id,
	p.name AS product_name,
	p.value AS product_code,
	sum(s.qtyonhand) AS qtyonhand,
	sum(s.qtyreserved) AS qtyreserved,
	sum(s.qtyordered) AS qtyordered,
	(sum(s.qtyonhand) - sum(s.qtyreserved)) AS qtyavailable
FROM 
	m_product p, m_storage s, m_locator l, m_warehouse w, ad_org o
WHERE
	p.m_product_id = s.m_product_id AND 
	s.m_locator_id = l.m_locator_id AND 
	l.m_warehouse_id = w.m_warehouse_id AND
     l.ad_org_id = o.ad_org_id
GROUP BY 
	l.ad_client_id, p.m_product_id, p.name, p.value
;
select * from zz_product_qtys_v;
select * from zz_product_qtys_withcosts_v;
drop view if exists zz_product_qtys_withcosts_v;
create or replace view zz_product_qtys_withcosts_v as
SELECT
	p.ad_client_id,
	cl.name as client_name,
	p.m_product_id,
	p.value as product_code,
	p.name as product_name,
	c.m_costelement_id,
	c.m_costelement_name,
	c.currentcostprice,
	c.currentqty,
	c.cumulatedamt,
	c.cumulatedqty,
	q.qtyonhand,
	q.qtyreserved,
	q.qtyordered,
	q.qtyavailable,
	pl.name as pricelist_name,
	plv.name as pricelistversion_name,
	prc.pricelist
from 
	m_product p
left join
	rv_cost c on c.m_product_id = p.m_product_id 
LEFT JOIN 
	zz_product_qtys_v q ON c.m_product_id = q.m_product_id
-- Just to get the price
left join m_productprice prc on 
		prc.ad_client_id = p.ad_client_id and 		/* double check we're in the right client */
		--prc.m_pricelist_version_id = 1000003 and 	/* */ 
		prc.m_product_id = p.m_product_id
left join
		m_pricelist_version plv on plv.m_pricelist_version_id = prc.m_pricelist_version_id
left join
		m_pricelist pl on plv.m_pricelist_id = pl.m_pricelist_id
join 
	ad_client cl on p.ad_client_id = cl.ad_client_id 
;
select * from zz_product_qtys_withcosts_v where product_code = '';
------------------------------------------------------------------
-- Main query to get the zero costs
------------------------------------------------------------------
select 
	client_name as clientname, product_code, product_name, max(qtyonhand) as qtyonhand, max(pricelist) as pricelist
from 
	zz_product_qtys_withcosts_v s 
where 
 	client_name like '%client name%'  and
 	-- Make sure we get at least one record
	--coalesce(pricelistversion_name, '11/08/2013') = '11/08/2013' and
	--m_costelement_name = 'Last Invoice' and
	m_product_id not in (
	-- 1. Products with costs
	select distinct m_product_id from zz_product_qtys_withcosts_v s 
	where 
		s.client_name like '%client name%' and
		-- Make sure we get at least one record
		coalesce(s.pricelistversion_name, '11/08/2013') = '11/08/2013' and
		s.m_costelement_name = 'Last Invoice' and
		coalesce(s.currentcostprice, 0) <> 0
)
group by client_name, product_code, product_name
order by product_code;
------------------------------------------------------------------
-- Some working queries
------------------------------------------------------------------
-- 1. Products with no cost records at all
select * from zz_product_qtys_withcosts_v s 
where 
	s.client_name like '%client name%' and
	-- Make sure we get at least one record
	coalesce(s.pricelistversion_name, '11/08/2013') = '11/08/2013' and
	s.currentcostprice is null;
-- 2. Products with zero cost, but there is something interesting about the product
select * from zz_product_qtys_withcosts_v s 
where 
	s.client_name like '%client name%' and
	-- Make sure we get at least one record
	coalesce(s.pricelistversion_name, '11/08/2013') = '11/08/2013' and
	s.m_costelement_name = 'Last Invoice' and
	s.currentcostprice = 0 and (
		s.qtyonhand <> 0 OR 
		s.qtyreserved <> 0 or 
		s.qtyordered <> 0
	);
select a.* from m_cost a where --a.m_product_id = 1035015; a.m_product_id = ( select m_product_id from m_product where value = 'Test-03' ); update m_cost set currentcostprice = 50.00 where m_product_id = ( select m_product_id from m_product where value = 'Test-02' ); select a.* from m_costdetail a where --a.m_product_id = 1035015; a.m_product_id = 1046609; delete from m_cost where m_product_id in ( select m_product_id from m_product where value = 'Test-03' ); delete from m_costdetail where m_product_id in ( select m_product_id from m_product where value = 'Test-03' ) ;
Cost element
select count(*) --cl.name as clientname, --ele.name as costelementname, --prod.value as productvalue, --prod.name as productname, --a.*, --a.currentqty, a.currentcostprice from m_cost a join m_costelement ele on a.m_costelement_id = ele.m_costelement_id join m_product prod on a.m_product_id = prod.m_product_id join ad_client cl on a.ad_client_id = cl.ad_client_id where a.ad_client_id = 1000000 and ele.name like '%Average%' --order by -- prod.value, ele.name ; --a.m_product_id = 1035015; ;
Change costing method
Still in testing.
select * into bk_m_cost_RQ100022 from m_cost; -- Identify records for "Exclude all items where there is an average cost entry already (81 items)" --select -- distinct a.m_product_id -- --cl.name as clientname, -- --ele.name as costelementname, -- --prod.value as productvalue, -- --prod.name as productname, -- --a.currentqty, a.currentcostprice --from -- m_cost a --join m_costelement ele on a.m_costelement_id = ele.m_costelement_id --join m_product prod on a.m_product_id = prod.m_product_id --join ad_client cl on a.ad_client_id = cl.ad_client_id --where -- a.ad_client_id = 1000000 and -- ele.name like '%Average%'; -- Update update m_cost set m_costelement_id = ( select m_costelement_id from m_costelement where name = 'Average Invoice' and ad_client_id = 1000000 ) where ad_client_id = 1000000 and -- Exclude all items where there is an average cost entry already (81 items) m_product_id not in ( 1036146,1037058,1036065,1036427,1045882,1036542,1036747,1038486,1036979,1036615,1037721,1036974,1035066,1037092,1037012,1036742,1046172,1036540, 1036793,1036756,1036487,1036431,1036632,1046632,1035286,1036940,1035031,1037884,1036962,1036826,1046011,1036456,1046076,1036459,1045894,1036054, 1036095,1036163,1035074,1036714,1035032,1045866,1038110,1036750,1038118,1037015,1046361,1046135,1035518,1035271,1037014,1045916,1035025,1036429, 1045933,1037305,1036748,1035302,1036665,1036637,1036517,1036541,1036498,1036343,1035061,1038411,1036843,1036464,1036936,1036818,1038447,1036630, 1036068,1036098,1036100,1037071,1038501,1036461,1037873,1037013,1036533 );
