1 -- Group: runningAvailability
3 -- Notes: used by dspRunningAvailability, itemAvailabilityWorkbench
4 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
5 -- See www.xtuple.com/CPAL for the full text of the software license.
7 SELECT orderid, altorderid, ordertype, ordernumber, sequence, item_number,
8 duedate, amount, qtyordered, qtyreceived, balance,
9 balance AS runningavail, balance AS runningnetable,
10 <? if exists("isReport") ?>
11 CASE WHEN duedate = startOfTime() THEN ''
12 ELSE formatDate(duedate) END AS f_duedate,
13 formatMoney(amount) AS f_amount,
14 formatQty(qtyordered) AS f_qtyordered,
15 formatQty(qtyreceived) AS f_qtyreceived,
16 formatQty(balance) AS f_balance,
19 1 AS runningavail_xtrunningrole,
20 1 AS runningnetable_xtrunningrole,
21 <? value("qoh") ?> AS runningavail_xtrunninginit,
22 <? value("netableqoh") ?> AS runningnetable_xtrunninginit,
23 CASE WHEN late THEN 'error' END AS duedate_qtforegroundrole,
24 CASE WHEN duedate = startOfTime() THEN '' END AS duedate_qtdisplayrole,
25 CASE WHEN ordertype ~ <? value("plannedPo") ?> OR
26 ordertype ~ <? value("plannedWo") ?> OR
27 ordertype ~ <? value("plannedTo") ?> THEN
28 'emphasis' END AS qtforegroundrole,
29 'currency' AS amount_xtnumericrole,
30 'qty' AS qtyordered_xtnumericrole,
31 'qty' AS qtyreceived_xtnumericrole,
32 'qty' AS balance_xtnumericrole
34 <? if exists("isReport") ?>
35 SELECT -1 AS orderid, -1 AS altorderid, 'QOH' AS ordertype,
39 startOfTime() AS duedate,
44 <? value("qoh") ?> AS balance,
48 <? if exists("MultiWhs") ?>
49 SELECT tohead_id AS orderid, toitem_id AS altorderid, 'T/O' AS ordertype,
50 TEXT(tohead_number) AS ordernumber,
52 tohead_srcname || '/' || tohead_destname AS item_number,
53 toitem_duedate AS duedate,
54 (toitem_duedate < CURRENT_DATE) AS late,
55 (toitem_stdcost * toitem_qty_ordered) AS amount,
56 toitem_qty_ordered AS qtyordered,
57 toitem_qty_received AS qtyreceived,
58 noNeg(toitem_qty_ordered - toitem_qty_received) AS balance,
59 tohead_ordercomments AS notes
61 WHERE ((toitem_tohead_id=tohead_id)
62 AND (toitem_status NOT IN ('C', 'X'))
63 AND (toitem_item_id=<? value("item_id") ?>)
64 AND (tohead_dest_warehous_id=<? value("warehous_id") ?>)
65 AND (toitem_qty_ordered > toitem_qty_received) )
68 SELECT tohead_id AS orderid, toitem_id AS altorderid, 'T/O' AS ordertype,
69 TEXT(tohead_number) AS ordernumber,
71 tohead_srcname || '/' || tohead_destname AS item_number,
72 toitem_duedate AS duedate,
73 (toitem_duedate < CURRENT_DATE) AS late,
74 (toitem_stdcost * toitem_qty_ordered) AS amount,
75 toitem_qty_ordered AS qtyordered,
76 toitem_qty_received AS qtyreceived,
77 -1 * noNeg(toitem_qty_ordered - toitem_qty_shipped - qtyAtShipping('TO', toitem_id)) AS balance,
78 tohead_ordercomments AS notes
79 -- TODO: old code had ^^^^ for formatted balance and vvvv used to calc running avail! which is right?
80 -- -1 * noNeg(toitem_qty_ordered - toitem_qty_received) AS balance
82 WHERE ((toitem_tohead_id=tohead_id)
83 AND (toitem_status NOT IN ('C', 'X'))
84 AND (toitem_item_id=<? value("item_id") ?>)
85 AND (tohead_src_warehous_id=<? value("warehous_id") ?>)
86 AND (toitem_qty_ordered - toitem_qty_shipped - qtyAtShipping('TO', toitem_id)) > 0 )
90 SELECT wo_id AS orderid, -1 AS altorderid,
92 formatWoNumber(wo_id) AS ordernumber,
95 wo_duedate AS duedate,
96 (wo_duedate < CURRENT_DATE) AS late,
97 (itemCost(wo_itemsite_id) * wo_qtyord) AS amount,
98 wo_qtyord AS qtyordered,
99 wo_qtyrcv AS qtyreceived,
100 noNeg(wo_qtyord - wo_qtyrcv) AS balance,
101 wo_prodnotes AS notes
102 FROM wo, itemsite, item
103 WHERE ((wo_status<>'C')
104 AND (wo_itemsite_id=itemsite_id)
105 AND (itemsite_item_id=item_id)
106 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
107 AND (itemsite_item_id=<? value("item_id") ?>)
108 AND (item_type NOT IN ('C', 'Y')))
112 -- Tools on work orders to be returned
113 SELECT wo_id AS orderid, -1 AS altorderid,
115 formatWoNumber(wo_id) AS ordernumber,
118 wo_duedate AS duedate,
119 (wo_duedate < CURRENT_DATE) AS late,
120 (womatl_cost * womatl_qtyreq) AS amount,
121 womatl_qtyreq AS qtyordered,
122 COALESCE(SUM(abs(invhist_invqty)),0) AS qtyreceived,
123 noNeg(womatl_qtyreq - COALESCE(SUM(abs(invhist_invqty)),0)) AS balance,
124 wo_prodnotes AS notes
126 JOIN wo ON (wo_id=womatl_wo_id)
127 JOIN itemsite ON (womatl_itemsite_id=itemsite_id)
128 JOIN item ON (itemsite_item_id=item_id)
129 LEFT OUTER JOIN womatlpost ON (womatl_id=womatlpost_womatl_id)
130 LEFT OUTER JOIN invhist ON ((womatlpost_invhist_id=invhist_id)
131 AND (invhist_invqty < 0))
132 WHERE ((wo_status<>'C')
133 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
134 AND (itemsite_item_id=<? value("item_id") ?>)
135 AND (item_type = 'T'))
136 GROUP BY wo_id, wo_duedate, item_number, womatl_qtyreq, womatl_cost, wo_prodnotes
138 <? if exists("Manufacturing") ?>
140 SELECT wo_id AS orderid, -1 AS altorderid,
142 formatWoNumber(wo_id) AS ordernumber,
145 wo_duedate AS duedate,
146 (wo_duedate < CURRENT_DATE) AS late,
147 (itemCost(wo_itemsite_id) * wo_qtyord * brddist_stdqtyper) AS amount,
148 (wo_qtyord * brddist_stdqtyper) AS qtyordered,
149 (wo_qtyrcv * brddist_stdqtyper) AS qtyreceived,
150 noNeg((wo_qtyord - wo_qtyrcv) * brddist_stdqtyper) AS balance,
151 wo_prodnotes AS notes
152 FROM xtmfg.brddist, wo, itemsite, item
153 WHERE ((wo_status<>'C')
154 AND (brddist_wo_id=wo_id)
155 AND (wo_itemsite_id=itemsite_id)
156 AND (itemsite_item_id=item_id)
157 AND (brddist_itemsite_id=itemsite_id)
158 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
159 AND (itemsite_item_id=<? value("item_id") ?>)
160 AND (item_type IN ('C', 'Y')) )
164 SELECT wo_id AS orderid, womatl_id AS altorderid,
166 formatWoNumber(wo_id) AS ordernumber,
169 womatl_duedate AS duedate,
171 (itemCost(womatl_itemsite_id) * itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, womatl_qtyreq)) AS amount,
172 itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, womatl_qtyreq) AS qtyordered,
173 itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, womatl_qtyiss) AS qtyreceived,
174 itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, (noNeg(womatl_qtyreq - womatl_qtyiss) * -1)) AS balance,
175 wo_prodnotes AS notes
176 FROM womatl, wo, itemsite AS wois, item AS woi, itemsite AS womatlis, item AS womatli
177 WHERE ((wo_status<>'C')
178 AND (wo_itemsite_id=wois.itemsite_id)
179 AND (wois.itemsite_item_id=woi.item_id)
180 AND (womatlis.itemsite_item_id=womatli.item_id)
181 AND (womatli.item_type != 'T')
182 AND (womatl_wo_id=wo_id)
183 AND (womatlis.itemsite_item_id=<? value("item_id") ?>)
184 AND (womatlis.itemsite_warehous_id=<? value("warehous_id") ?>)
185 AND (womatl_itemsite_id=womatlis.itemsite_id) )
188 -- Special handling for tools
189 SELECT wo_id AS orderid, womatl_id AS altorderid,
191 formatWoNumber(wo_id) AS ordernumber,
194 womatl_duedate AS duedate,
196 (womatl_cost * itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, womatl_qtyreq)) AS amount,
197 itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, womatl_qtyreq) AS qtyordered,
198 COALESCE(SUM(invhist_invqty),0) AS qtyreceived,
199 (itemuomtouom(womatlis.itemsite_item_id, womatl_uom_id, NULL, (noNeg(womatl_qtyreq))) - COALESCE(SUM(invhist_invqty),0)) * -1 AS balance,
200 wo_prodnotes AS notes
201 FROM itemsite AS wois, item AS woi, itemsite AS womatlis, item AS womatli, wo, womatl
202 LEFT OUTER JOIN womatlpost ON (womatl_id=womatlpost_womatl_id)
203 LEFT OUTER JOIN invhist ON ((womatlpost_invhist_id=invhist_id)
204 AND (invhist_invqty > 0))
205 WHERE ((wo_status<>'C')
206 AND (wo_itemsite_id=wois.itemsite_id)
207 AND (wois.itemsite_item_id=woi.item_id)
208 AND (womatlis.itemsite_item_id=womatli.item_id)
209 AND (womatli.item_type = 'T')
210 AND (womatl_wo_id=wo_id)
211 AND (womatlis.itemsite_item_id=<? value("item_id") ?>)
212 AND (womatlis.itemsite_warehous_id=<? value("warehous_id") ?>)
213 AND (womatl_itemsite_id=womatlis.itemsite_id) )
214 GROUP BY wo_id, woi.item_number, womatl_id, womatl_duedate, womatlis.itemsite_item_id, womatl_uom_id, womatl_qtyreq, womatl_cost, wo_prodnotes
217 SELECT pohead_id AS orderid, poitem_id AS altorderid,
219 TEXT(pohead_number) AS ordernumber,
221 vend_name AS item_number,
222 poitem_duedate AS duedate,
223 (poitem_duedate < CURRENT_DATE) AS late,
224 (poitem_unitprice * poitem_qty_ordered) AS amount,
225 (poitem_qty_ordered * poitem_invvenduomratio) AS qtyordered,
226 (NoNeg(poitem_qty_received - poitem_qty_returned) * poitem_invvenduomratio) AS qtyreceived,
227 (noNeg(poitem_qty_ordered - poitem_qty_received) * poitem_invvenduomratio) AS balance,
228 pohead_comments AS notes
229 FROM pohead, vendinfo, poitem, itemsite, item
230 WHERE ((vend_id=pohead_vend_id)
231 AND (poitem_pohead_id=pohead_id)
232 AND (poitem_status <> 'C')
233 AND (poitem_itemsite_id=itemsite_id)
234 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
235 AND (itemsite_item_id=item_id)
236 AND (item_id=<? value("item_id") ?>) )
239 SELECT cohead_id AS orderid, coitem_id AS altorderid,
241 TEXT(cohead_number) AS ordernumber,
243 cust_name AS item_number,
244 coitem_scheddate AS duedate,
245 (coitem_scheddate < CURRENT_DATE) AS late,
246 (coitem_price * coitem_qtyord) AS amount,
247 (coitem_qtyord * coitem_qty_invuomratio) AS qtyordered,
248 (coitem_qty_invuomratio * (coitem_qtyshipped - coitem_qtyreturned + qtyAtShipping(coitem_id))) AS qtyreceived,
249 (coitem_qty_invuomratio * noNeg(coitem_qtyord - coitem_qtyshipped + coitem_qtyreturned - qtyAtShipping(coitem_id)) * -1) AS balance,
250 cohead_ordercomments AS notes
251 FROM coitem, cohead, custinfo, itemsite, item
252 WHERE ((coitem_status='O')
253 AND (cohead_cust_id=cust_id)
254 AND (coitem_cohead_id=cohead_id)
255 AND (coitem_itemsite_id=itemsite_id)
256 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
257 AND (itemsite_item_id=item_id)
258 AND (item_id=<? value("item_id") ?>))
260 <? if exists("showPlanned") ?>
261 <? if exists("showMRPplan") ?>
263 SELECT planord_id AS orderid, -1 AS altorderid,
264 CASE WHEN (planord_firm) THEN <? value("firmPo") ?>
265 ELSE <? value("plannedPo") ?>
267 CAST(planord_number AS text) AS ordernumber,
270 planord_duedate AS duedate,
272 (itemCost(planord_itemsite_id) * planord_qty) AS amount,
273 planord_qty AS qtyordered,
275 planord_qty AS balance,
276 planord_comments AS notes
277 FROM planord, itemsite
278 WHERE ((planord_type='P')
279 AND (planord_itemsite_id=itemsite_id)
280 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
281 AND (itemsite_item_id=<? value("item_id") ?>) )
284 SELECT planord_id AS orderid, -1 AS altorderid,
285 CASE WHEN (planord_firm) THEN <? value("firmWo") ?>
286 ELSE <? value("plannedWo") ?>
288 CAST(planord_number AS text) AS ordernumber,
291 planord_duedate AS duedate,
293 (itemCost(planord_itemsite_id) * planord_qty) AS amount,
294 planord_qty AS qtyordered,
296 planord_qty AS balance,
297 planord_comments AS notes
298 FROM planord, itemsite
299 WHERE ((planord_type='W')
300 AND (planord_itemsite_id=itemsite_id)
301 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
302 AND (itemsite_item_id=<? value("item_id") ?>) )
305 -- Tools on Planned Work Orders
306 SELECT planord_id AS orderid, -1 AS altorderid,
307 CASE WHEN (planord_firm) THEN <? value("firmWo") ?>
308 ELSE <? value("plannedWo") ?>
310 CAST(planord_number AS text) AS ordernumber,
313 planord_duedate AS duedate,
315 (itemCost(planreq_itemsite_id) * planreq_qty) AS amount,
316 planreq_qty AS qtyordered,
318 planreq_qty AS balance,
319 planord_comments AS notes
321 JOIN itemsite ON (itemsite_id=planreq_itemsite_id)
322 JOIN item ON (item_id=itemsite_item_id)
323 JOIN planord ON ((planreq_source_id=planord_id)
324 AND (planreq_source='P'))
325 WHERE ((itemsite_warehous_id=<? value("warehous_id") ?>)
326 AND (itemsite_item_id=<? value("item_id") ?>)
327 AND (item_type='T') )
330 SELECT planord_id AS orderid, -1 AS altorderid,
331 CASE WHEN (planord_firm) THEN <? value("firmTo") ?>
332 ELSE <? value("plannedTo") ?>
334 CAST(planord_number AS text) AS ordernumber,
336 srcwhsinfo.warehous_code || '/' || whsinfo.warehous_code AS item_number,
337 planord_duedate AS duedate,
339 (itemCost(planord_itemsite_id) * planord_qty) AS amount,
340 planord_qty AS qtyordered,
342 planord_qty AS balance,
343 planord_comments AS notes
344 FROM planord JOIN itemsite ON (itemsite.itemsite_id=planord_itemsite_id)
345 JOIN whsinfo ON (whsinfo.warehous_id=itemsite.itemsite_warehous_id)
346 JOIN itemsite srcitemsite ON (srcitemsite.itemsite_id=planord_supply_itemsite_id)
347 JOIN whsinfo srcwhsinfo ON (srcwhsinfo.warehous_id=srcitemsite.itemsite_warehous_id)
348 WHERE ((planord_type='T')
349 AND (itemsite.itemsite_warehous_id=<? value("warehous_id") ?>)
350 AND (itemsite.itemsite_item_id=<? value("item_id") ?>) )
353 SELECT planord_id AS orderid, -1 AS altorderid,
354 CASE WHEN (planord_firm) THEN <? value("firmTo") ?>
355 ELSE <? value("plannedTo") ?>
357 CAST(planord_number AS text) AS ordernumber,
359 srcwhsinfo.warehous_code || '/' || whsinfo.warehous_code AS item_number,
360 planord_duedate AS duedate,
362 (itemCost(planord_itemsite_id) * planord_qty) AS amount,
363 planord_qty AS qtyordered,
365 (planord_qty * -1) AS balance,
366 planord_comments AS notes
367 FROM planord JOIN itemsite ON (itemsite.itemsite_id=planord_itemsite_id)
368 JOIN whsinfo ON (whsinfo.warehous_id=itemsite.itemsite_warehous_id)
369 JOIN itemsite srcitemsite ON (srcitemsite.itemsite_id=planord_supply_itemsite_id)
370 JOIN whsinfo srcwhsinfo ON (srcwhsinfo.warehous_id=srcitemsite.itemsite_warehous_id)
371 WHERE ((planord_type='T')
372 AND (srcitemsite.itemsite_warehous_id=<? value("warehous_id") ?>)
373 AND (srcitemsite.itemsite_item_id=<? value("item_id") ?>) )
376 SELECT planreq_id AS orderid, -1 AS altorderid,
377 CASE WHEN (planord_firm) THEN <? value("firmWoReq") ?>
378 ELSE <? value("plannedWoReq") ?>
380 CAST(planord_number AS text) AS ordernumber,
382 --get the planned order number for the higher level demand
385 WHERE((itemsite_item_id=item_id)
386 AND (itemsite_id=planord_itemsite_id))
388 planord_startdate AS duedate,
390 (itemCost(planreq_itemsite_id) * planreq_qty) AS amount,
391 planreq_qty AS f_qtyordered,
393 (planreq_qty * -1) AS balance,
394 planreq_notes AS notes
395 FROM planreq, planord, itemsite, item
396 WHERE ((planreq_source='P')
397 AND (planreq_source_id=planord_id)
398 AND (planreq_itemsite_id=itemsite_id)
399 AND (itemsite_item_id=item_id)
400 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
401 AND (itemsite_item_id=<? value("item_id") ?>) )
405 SELECT pr_id AS orderid, -1 AS altorderid,
406 <? value("pr") ?> AS ordertype,
407 CAST(pr_number AS text) AS ordernumber,
410 pr_duedate AS duedate,
412 (itemCost(pr_itemsite_id) * pr_qtyreq) AS amount,
413 pr_qtyreq AS qtyordered,
415 pr_qtyreq AS balance,
416 pr_releasenote AS notes
417 FROM pr, itemsite, item
418 WHERE ((pr_itemsite_id=itemsite_id)
419 AND (itemsite_item_id=item_id)
420 AND (pr_itemsite_id=itemsite_id)
421 AND (itemsite_warehous_id=<? value("warehous_id") ?>)
422 AND (itemsite_item_id=<? value("item_id") ?>) )
426 ORDER BY duedate, sequence;