44: l_item_uom_class varchar2(10) := p_item_primary_uom_code;
45: l_item_base_uom varchar2(1);
46: l_item_primary_uom_code varchar2(3);
47:
48: -- standard and intra class conversion using unit_of_measure
49: cursor l_standard_conversion(l_item_id number
50: ,l_uom_class varchar2
51: ,l_unit_of_measure varchar2) is
52: select conversion_rate
45: l_item_base_uom varchar2(1);
46: l_item_primary_uom_code varchar2(3);
47:
48: -- standard and intra class conversion using unit_of_measure
49: cursor l_standard_conversion(l_item_id number
50: ,l_uom_class varchar2
51: ,l_unit_of_measure varchar2) is
52: select conversion_rate
53: from mtl_uom_conversions
53: from mtl_uom_conversions
54: where uom_class = l_uom_class
55: and unit_of_measure = l_unit_of_measure
56: and INVENTORY_ITEM_ID in (l_item_id,0)
57: -- to take care of item specific vs standard conversion
58: order by INVENTORY_ITEM_ID desc;
59:
60: l_standard_conversion_rec l_standard_conversion%rowtype;
61:
56: and INVENTORY_ITEM_ID in (l_item_id,0)
57: -- to take care of item specific vs standard conversion
58: order by INVENTORY_ITEM_ID desc;
59:
60: l_standard_conversion_rec l_standard_conversion%rowtype;
61:
62:
63: -- standard and intra class conversion using uom_code
64: cursor l_standard_conversion2(l_item_id NUMBER
59:
60: l_standard_conversion_rec l_standard_conversion%rowtype;
61:
62:
63: -- standard and intra class conversion using uom_code
64: cursor l_standard_conversion2(l_item_id NUMBER
65: ,l_uom_class VARCHAR2
66: ,l_uom_code VARCHAR2) is
67: SELECT conversion_rate
60: l_standard_conversion_rec l_standard_conversion%rowtype;
61:
62:
63: -- standard and intra class conversion using uom_code
64: cursor l_standard_conversion2(l_item_id NUMBER
65: ,l_uom_class VARCHAR2
66: ,l_uom_code VARCHAR2) is
67: SELECT conversion_rate
68: FROM mtl_uom_conversions
68: FROM mtl_uom_conversions
69: WHERE uom_class = l_uom_class
70: AND uom_code = l_uom_code
71: AND INVENTORY_ITEM_ID in (l_item_id,0)
72: -- to take care of item specific vs standard conversion
73: ORDER BY INVENTORY_ITEM_ID desc ;
74:
75: l_standard_conversion2_rec l_standard_conversion2%rowtype;
76:
71: AND INVENTORY_ITEM_ID in (l_item_id,0)
72: -- to take care of item specific vs standard conversion
73: ORDER BY INVENTORY_ITEM_ID desc ;
74:
75: l_standard_conversion2_rec l_standard_conversion2%rowtype;
76:
77: cursor l_class_conversion(l_item_id number
78: ,l_from_uom_class varchar2
79: ,l_to_uom_class varchar2) is
144: -- to convert to the primary uom of the item if the primary UOM is not the base UOM of that UOM class
145: if(l_item_base_uom = 'Y') then
146: l_item_conversion := 1.0;
147: else
148: open l_standard_conversion2(0, l_item_uom_class, nvl(p_item_primary_uom_code, l_item_primary_uom_code));
149: fetch l_standard_conversion2 INTO l_standard_conversion2_rec ;
150: IF l_standard_conversion2%NOTFOUND then
151: CLOSE l_standard_conversion2 ;
152: RETURN -6 ;
145: if(l_item_base_uom = 'Y') then
146: l_item_conversion := 1.0;
147: else
148: open l_standard_conversion2(0, l_item_uom_class, nvl(p_item_primary_uom_code, l_item_primary_uom_code));
149: fetch l_standard_conversion2 INTO l_standard_conversion2_rec ;
150: IF l_standard_conversion2%NOTFOUND then
151: CLOSE l_standard_conversion2 ;
152: RETURN -6 ;
153: ELSE
146: l_item_conversion := 1.0;
147: else
148: open l_standard_conversion2(0, l_item_uom_class, nvl(p_item_primary_uom_code, l_item_primary_uom_code));
149: fetch l_standard_conversion2 INTO l_standard_conversion2_rec ;
150: IF l_standard_conversion2%NOTFOUND then
151: CLOSE l_standard_conversion2 ;
152: RETURN -6 ;
153: ELSE
154: CLOSE l_standard_conversion2 ;
147: else
148: open l_standard_conversion2(0, l_item_uom_class, nvl(p_item_primary_uom_code, l_item_primary_uom_code));
149: fetch l_standard_conversion2 INTO l_standard_conversion2_rec ;
150: IF l_standard_conversion2%NOTFOUND then
151: CLOSE l_standard_conversion2 ;
152: RETURN -6 ;
153: ELSE
154: CLOSE l_standard_conversion2 ;
155: l_item_conversion := 1.0/l_standard_conversion2_rec.conversion_rate ;
150: IF l_standard_conversion2%NOTFOUND then
151: CLOSE l_standard_conversion2 ;
152: RETURN -6 ;
153: ELSE
154: CLOSE l_standard_conversion2 ;
155: l_item_conversion := 1.0/l_standard_conversion2_rec.conversion_rate ;
156: end if ;
157: end if;
158:
151: CLOSE l_standard_conversion2 ;
152: RETURN -6 ;
153: ELSE
154: CLOSE l_standard_conversion2 ;
155: l_item_conversion := 1.0/l_standard_conversion2_rec.conversion_rate ;
156: end if ;
157: end if;
158:
159: -- same class
161: if(l_line_base_uom = 'Y') then
162: return 1.0 * l_item_conversion; -- no further conversion required
163: else
164: IF p_from_uom_code IS NULL THEN
165: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
166: fetch l_standard_conversion into l_standard_conversion_rec;
167: if l_standard_conversion%NOTFOUND then
168: close l_standard_conversion;
169: return -3;
162: return 1.0 * l_item_conversion; -- no further conversion required
163: else
164: IF p_from_uom_code IS NULL THEN
165: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
166: fetch l_standard_conversion into l_standard_conversion_rec;
167: if l_standard_conversion%NOTFOUND then
168: close l_standard_conversion;
169: return -3;
170: else
163: else
164: IF p_from_uom_code IS NULL THEN
165: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
166: fetch l_standard_conversion into l_standard_conversion_rec;
167: if l_standard_conversion%NOTFOUND then
168: close l_standard_conversion;
169: return -3;
170: else
171: close l_standard_conversion;
164: IF p_from_uom_code IS NULL THEN
165: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
166: fetch l_standard_conversion into l_standard_conversion_rec;
167: if l_standard_conversion%NOTFOUND then
168: close l_standard_conversion;
169: return -3;
170: else
171: close l_standard_conversion;
172: return l_standard_conversion_rec.conversion_rate * l_item_conversion;
167: if l_standard_conversion%NOTFOUND then
168: close l_standard_conversion;
169: return -3;
170: else
171: close l_standard_conversion;
172: return l_standard_conversion_rec.conversion_rate * l_item_conversion;
173: end if;
174: ELSE
175: -- get conversion based on uom_code
168: close l_standard_conversion;
169: return -3;
170: else
171: close l_standard_conversion;
172: return l_standard_conversion_rec.conversion_rate * l_item_conversion;
173: end if;
174: ELSE
175: -- get conversion based on uom_code
176: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code) ;
172: return l_standard_conversion_rec.conversion_rate * l_item_conversion;
173: end if;
174: ELSE
175: -- get conversion based on uom_code
176: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code) ;
177: FETCH l_standard_conversion2 INTO l_standard_conversion2_rec ;
178: IF l_standard_conversion2%NOTFOUND then
179: CLOSE l_standard_conversion2 ;
180: RETURN -3 ;
173: end if;
174: ELSE
175: -- get conversion based on uom_code
176: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code) ;
177: FETCH l_standard_conversion2 INTO l_standard_conversion2_rec ;
178: IF l_standard_conversion2%NOTFOUND then
179: CLOSE l_standard_conversion2 ;
180: RETURN -3 ;
181: ELSE
174: ELSE
175: -- get conversion based on uom_code
176: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code) ;
177: FETCH l_standard_conversion2 INTO l_standard_conversion2_rec ;
178: IF l_standard_conversion2%NOTFOUND then
179: CLOSE l_standard_conversion2 ;
180: RETURN -3 ;
181: ELSE
182: CLOSE l_standard_conversion2 ;
175: -- get conversion based on uom_code
176: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code) ;
177: FETCH l_standard_conversion2 INTO l_standard_conversion2_rec ;
178: IF l_standard_conversion2%NOTFOUND then
179: CLOSE l_standard_conversion2 ;
180: RETURN -3 ;
181: ELSE
182: CLOSE l_standard_conversion2 ;
183: RETURN l_standard_conversion2_rec.conversion_rate * l_item_conversion;
178: IF l_standard_conversion2%NOTFOUND then
179: CLOSE l_standard_conversion2 ;
180: RETURN -3 ;
181: ELSE
182: CLOSE l_standard_conversion2 ;
183: RETURN l_standard_conversion2_rec.conversion_rate * l_item_conversion;
184: end if ;
185: end if ;
186: end if;
179: CLOSE l_standard_conversion2 ;
180: RETURN -3 ;
181: ELSE
182: CLOSE l_standard_conversion2 ;
183: RETURN l_standard_conversion2_rec.conversion_rate * l_item_conversion;
184: end if ;
185: end if ;
186: end if;
187: else -- inter class
189: if(l_line_base_uom = 'Y') then
190: l_conversion := 1.0;
191: else
192: IF p_from_uom_code IS NULL THEN
193: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
194: fetch l_standard_conversion into l_standard_conversion_rec;
195: if l_standard_conversion%NOTFOUND then
196: close l_standard_conversion;
197: return -4;
190: l_conversion := 1.0;
191: else
192: IF p_from_uom_code IS NULL THEN
193: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
194: fetch l_standard_conversion into l_standard_conversion_rec;
195: if l_standard_conversion%NOTFOUND then
196: close l_standard_conversion;
197: return -4;
198: else
191: else
192: IF p_from_uom_code IS NULL THEN
193: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
194: fetch l_standard_conversion into l_standard_conversion_rec;
195: if l_standard_conversion%NOTFOUND then
196: close l_standard_conversion;
197: return -4;
198: else
199: close l_standard_conversion;
192: IF p_from_uom_code IS NULL THEN
193: open l_standard_conversion(p_item_id,l_line_uom_class,p_from_unit_of_measure);
194: fetch l_standard_conversion into l_standard_conversion_rec;
195: if l_standard_conversion%NOTFOUND then
196: close l_standard_conversion;
197: return -4;
198: else
199: close l_standard_conversion;
200: l_conversion := l_standard_conversion_rec.conversion_rate;
195: if l_standard_conversion%NOTFOUND then
196: close l_standard_conversion;
197: return -4;
198: else
199: close l_standard_conversion;
200: l_conversion := l_standard_conversion_rec.conversion_rate;
201: end if;
202: ELSE
203: -- get conversion based on uom_code
196: close l_standard_conversion;
197: return -4;
198: else
199: close l_standard_conversion;
200: l_conversion := l_standard_conversion_rec.conversion_rate;
201: end if;
202: ELSE
203: -- get conversion based on uom_code
204: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code);
200: l_conversion := l_standard_conversion_rec.conversion_rate;
201: end if;
202: ELSE
203: -- get conversion based on uom_code
204: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code);
205: FETCH l_standard_conversion2 into l_standard_conversion2_rec;
206: IF l_standard_conversion2%NOTFOUND then
207: CLOSE l_standard_conversion2;
208: RETURN -4;
201: end if;
202: ELSE
203: -- get conversion based on uom_code
204: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code);
205: FETCH l_standard_conversion2 into l_standard_conversion2_rec;
206: IF l_standard_conversion2%NOTFOUND then
207: CLOSE l_standard_conversion2;
208: RETURN -4;
209: ELSE
202: ELSE
203: -- get conversion based on uom_code
204: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code);
205: FETCH l_standard_conversion2 into l_standard_conversion2_rec;
206: IF l_standard_conversion2%NOTFOUND then
207: CLOSE l_standard_conversion2;
208: RETURN -4;
209: ELSE
210: CLOSE l_standard_conversion2;
203: -- get conversion based on uom_code
204: OPEN l_standard_conversion2(p_item_id,l_line_uom_class,p_from_uom_code);
205: FETCH l_standard_conversion2 into l_standard_conversion2_rec;
206: IF l_standard_conversion2%NOTFOUND then
207: CLOSE l_standard_conversion2;
208: RETURN -4;
209: ELSE
210: CLOSE l_standard_conversion2;
211: l_conversion := l_standard_conversion2_rec.conversion_rate;
206: IF l_standard_conversion2%NOTFOUND then
207: CLOSE l_standard_conversion2;
208: RETURN -4;
209: ELSE
210: CLOSE l_standard_conversion2;
211: l_conversion := l_standard_conversion2_rec.conversion_rate;
212: END IF;
213: END IF ;
214: end if;
207: CLOSE l_standard_conversion2;
208: RETURN -4;
209: ELSE
210: CLOSE l_standard_conversion2;
211: l_conversion := l_standard_conversion2_rec.conversion_rate;
212: END IF;
213: END IF ;
214: end if;
215: -- There could be a single conersion or two conversions back and forth