DBA Data[Home] [Help]

PACKAGE BODY: APPS.MRP_RELEASE_PK

Source


1 PACKAGE BODY mrp_release_pk AS
2  /* $Header: MRPARELB.pls 120.3 2006/09/14 06:12:00 arrsubra noship $ */
3   WIP_DIS_MASS_LOAD             CONSTANT INTEGER := 1;
4   PO_MASS_LOAD                  CONSTANT INTEGER := 8;
5 
6   PO_REQUISITION                CONSTANT INTEGER := 2;
7   WIP_DISCRETE_JOB              CONSTANT INTEGER := 3;
8 
9   MAKE                          CONSTANT INTEGER := 1;
10   BUY                           CONSTANT INTEGER := 2;
11   PLANNED_ORDER                 CONSTANT INTEGER := 5;
12   UNRELEASED_NO_CHARGES         CONSTANT INTEGER := 1;
13   STANDARD_ITEM                 CONSTANT INTEGER := 4;
14   NO_AUTO_RELEASE               CONSTANT INTEGER := 5;
15   NO_KANBAN_RELEASE		CONSTANT INTEGER := 6;
16 
17   MRP_PLAN                      CONSTANT INTEGER := 1;
18   MPS_PLAN                      CONSTANT INTEGER := 2;
19   MRP_PLANNED_ITEM              CONSTANT INTEGER := 3;
20   MPS_PLANNED_ITEM              CONSTANT INTEGER := 4;
21 
22   NULL_VALUE                    CONSTANT INTEGER := -23453;
23   MAGIC_STRING                  CONSTANT VARCHAR2(10) := '734jkhJK24';
24   BUFFER_SIZE_LEN		CONSTANT INTEGER := 1000000;
25 
26   SYS_YES                       CONSTANT INTEGER := 1;
27   SYS_NO                        CONSTANT INTEGER := 2;
28 
29 -- ========================================================================
30 --
31 --  Selects the rows in MRP_RECOMMENDATIONS for all orgs in a given plan
32 --  that meet the auto-release criteria and release those planned orders.
33 --
34 -- ========================================================================
35 
36 PROCEDURE mrp_auto_release(
37                         errbuf			OUT NOCOPY VARCHAR2,  --2663505
41 			arg_use_start_date      IN  VARCHAR2) IS
38 		        retcode			OUT NOCOPY NUMBER,    --2663505
39                         arg_org_id              IN  NUMBER,
40                         arg_plan_name           IN  VARCHAR2,
42 
43   VERSION                       CONSTANT CHAR(80) :=
44         '$Header: MRPARELB.pls 120.3 2006/09/14 06:12:00 arrsubra noship $';
45 
46   counter			NUMBER := 0;
47 
48   var_user_id                   NUMBER;
49   var_po_group_by               NUMBER;
50   var_po_batch_number           NUMBER;
51   var_wip_group_id              NUMBER;
52   var_loaded_jobs               NUMBER;
53   var_loaded_reqs               NUMBER;
54   var_loaded_scheds             NUMBER;
55   var_resched_jobs              NUMBER;
56   var_resched_reqs              NUMBER;
57   var_wip_req_id                NUMBER;
58   var_req_load_id               NUMBER;
59   var_req_resched_id            NUMBER;
60 
61   var_rowid                     ROWID;
62   var_start_date		DATE;
63   var_demand_class              VARCHAR(30);
64   var_wip_class_code            VARCHAR(10);
65   var_plan_type                 NUMBER;
66   var_make_buy_code             NUMBER;
67   var_primary_uom_code          VARCHAR(3);
68   var_planner_employee_id       NUMBER;
69   var_employee_id               NUMBER;
70   var_default_job_prefix        VARCHAR(80);
71   var_job_prefix                VARCHAR(80);
72   var_firm_jobs                 VARCHAR(80) := 'N';
73   var_impl_status_code          NUMBER;
74   var_location_id               NUMBER;
75   var_count                     NUMBER;
76   var_org_code                  VARCHAR(3);
77   var_org_id                    NUMBER;
78   var_prev_org_id               NUMBER := -1;
79   var_inventory_item_id         NUMBER;
80   var_prev_inventory_item_id    NUMBER := -1;
81   var_item                      VARCHAR(50);
82   var_new_schedule_date         DATE;
83   var_new_order_quantity        NUMBER;
84   var_planner_code              VARCHAR(10);
85   var_debug                     BOOLEAN := FALSE;
86   var_entity                    VARCHAR(30);
87   var_buf			VARCHAR2(240);
88   var_project_id		NUMBER;
89   var_prev_project_id		NUMBER := -1;
90 
91   err_msg_1                     VARCHAR2(30);
92   err_class_1                   VARCHAR2(10);
93   err_msg_2                     VARCHAR2(30);
94   err_class_2                   VARCHAR2(10);
95 
96   invalid_plan                  EXCEPTION;
97 
98   CURSOR job_status IS
99     SELECT NVL(mwdo.orders_default_job_status, UNRELEASED_NO_CHARGES),
100            NVL(mwdo.job_class_code, var_wip_class_code),
101 		   NVL(mwdo.orders_firm_jobs, 'N')
102     FROM   mrp_workbench_display_options    mwdo,
103            fnd_user                         fu
104     WHERE  fu.employee_id               = var_planner_employee_id
105     AND    fu.start_date               <= sysdate
106     AND    NVL(fu.end_date, sysdate)   >= sysdate
107     AND    mwdo.user_id                 = fu.user_id;
108 
109   --
110   -- PLANNING_MAKE_BUY_CODE cannot be used to determine whether an item is
111   -- a make or buy item for time-phased make-buy item, instead use
112   --
113   --       Curr org     Source org     Item type
114   --       --------     ----------     ---------
115   --          X             X            Make (always populated for Make item)
116   --          X             Y            Buy
117   --          X             -            Buy (for Vendor)
118   --
119   -- MRP_PLANNING_CODE cannot be used to determine whether or not an item
120   -- should be released based on the plan type (MPS/MRP) for Supply Chain
121   -- Planning, instead use
122   --
123   --       In source plan     Release
124   --       --------------     -------
125   --           Yes             No          (items from input supply schedules)
126   --           No              Yes         (items from input demand schedules)
127   --
128 
129   CURSOR planned_orders IS
130         SELECT mr.rowid, mr.organization_id, mr.inventory_item_id,
131                mr.new_schedule_date, mr.new_order_quantity,
132                msi.primary_uom_code,
133                decode(msi.planner_code,NULL,mplm.employee_id,mpl.employee_id),
134                DECODE(mr.source_organization_id, mr.organization_id, MAKE, BUY) ,
135 	       nvl(mr.implement_project_id,mr.project_id)
136         FROM   bom_calendar_dates       cal1,
137                bom_calendar_dates       cal2,
138                mtl_planners             mplm,
139                mtl_planners             mpl,
140                mtl_parameters           mparam,
141                mtl_system_items         master_msi,
142                mtl_system_items         msi,
143                mrp_system_items         rsi,
144                mrp_recommendations      mr,
145                mrp_plan_organizations_v mpo
146         WHERE  mpo.organization_id      = arg_org_id
147         AND    mpo.compile_designator   = arg_plan_name
148         AND    mr.organization_id       = mpo.planned_organization
149         AND    mr.compile_designator    = mpo.compile_designator
150         AND    mr.order_type            = PLANNED_ORDER
151         AND    NVL(mr.schedule_compression_days, 0) = 0
152         AND    mr.new_order_placement_date     BETWEEN TRUNC(var_start_date)
153                                         AND     cal2.calendar_date
154         AND    msi.organization_id      = mr.organization_id
155         AND    msi.inventory_item_id    = mr.inventory_item_id
156         AND    msi.bom_item_type        = STANDARD_ITEM
157         AND    NVL(msi.release_time_fence_code, NO_AUTO_RELEASE) NOT IN
158 					(NO_AUTO_RELEASE, NO_KANBAN_RELEASE)
159         AND    ((msi.build_in_wip_flag        = 'Y'
160         AND      NVL(msi.repetitive_planning_flag, 'N') = 'N'
161         AND      DECODE(mr.source_organization_id, mr.organization_id, MAKE,
165                         BUY)                  = BUY))
162                         BUY)                  = MAKE)
163         OR      (msi.purchasing_enabled_flag  = 'Y'
164         AND      DECODE(mr.source_organization_id, mr.organization_id, MAKE,
166         AND    NOT EXISTS ( SELECT 1 FROM bom_operational_routings
167                      WHERE assembly_item_id = mr.inventory_item_id
168                      AND   organization_id = mr.organization_id
169                      AND   nvl(alternate_routing_designator,'-23453') =
170                                nvl(mr.alternate_routing_designator,'-23453')
171                      AND   cfm_routing_flag = 1)
172         AND    rsi.organization_id      = mr.organization_id
173         AND    rsi.compile_designator   = mr.compile_designator
174         AND    rsi.inventory_item_id    = mr.inventory_item_id
175         AND    NVL(rsi.in_source_plan, SYS_NO) <> SYS_YES
176         AND    master_msi.organization_id = mparam.master_organization_id
177         AND    master_msi.inventory_item_id = msi.inventory_item_id
178         AND    mpl.organization_id   (+) = msi.organization_id
179         AND    mpl.planner_code      (+) = NVL(msi.planner_code, MAGIC_STRING)
180         AND    mplm.organization_id   (+)= master_msi.organization_id
181         AND    mplm.planner_code      (+)= NVL(master_msi.planner_code, MAGIC_STRING)
182         AND    mparam.organization_id   = mr.organization_id
183         AND    cal1.calendar_code       = mparam.calendar_code
184         AND    cal1.exception_set_id    = mparam.calendar_exception_set_id
185         AND    cal1.calendar_date      	= TRUNC(var_start_date)
186         AND    cal2.calendar_code       = cal1.calendar_code
187         AND    cal2.exception_set_id    = cal1.exception_set_id
188         AND    cal2.seq_num             = cal1.next_seq_num +
189                           NVL(DECODE(msi.release_time_fence_code,
190                                      1, msi.cumulative_total_lead_time,
191                                      2, msi.cum_manufacturing_lead_time,
192                                      3, msi.full_lead_time,
193                                      4, msi.release_time_fence_days,
194                                      0),
195                               0)
196         ORDER BY 2;
197 
198 BEGIN
199   retcode := 0;
200   errbuf := NULL;
201 
202   var_debug := FND_PROFILE.VALUE('MRP_DEBUG') = 'Y';
203 
204   -- ------------------------------------------------------------------------
205   -- Validate the plan
206   -- ------------------------------------------------------------------------
207   BEGIN
208     var_entity := 'Plan Validation';
209     mrp_valid_plan_desig_pkg.mrp_valid_plan_designator(
210 			arg_plan_name, arg_org_id, 'Y', 'Y', 'Y', 'N');
211 
212     EXCEPTION
213       WHEN OTHERS THEN
214         fnd_message.set_name('MRP', 'UNSUCCESSFUL PLAN VALIDATION');
215         var_buf := fnd_message.get;
216         fnd_file.put_line(FND_FILE.LOG, var_buf);
217 
218         retcode := 2;
219         errbuf := var_buf;
220         RETURN;
221   END;
222 
223   -- ------------------------------------------------------------------------
224   -- Setup
225   -- ------------------------------------------------------------------------
226   var_user_id            := FND_GLOBAL.USER_ID;
227   var_default_job_prefix := FND_PROFILE.VALUE('WIP_JOB_PREFIX');
228   var_po_group_by        := FND_PROFILE.VALUE('MRP_LOAD_REQ_GROUP_BY');
229 
230   var_entity := 'Setup';
231 
232   SELECT mp.curr_plan_type,
233          wip_job_schedule_interface_s.nextval,
234          mrp_workbench_query_s.nextval,
235          DECODE(UPPER(arg_use_start_date),
236                 'Y', mp.plan_start_date, 'N', sysdate, sysdate),
237          sched.demand_class
238   INTO   var_plan_type,
239          var_wip_group_id, var_po_batch_number,
240          var_start_date, var_demand_class
241   FROM   mrp_plans mp,
242          mrp_schedule_designators sched
243   WHERE  sched.organization_id     (+)= mp.organization_id
244   AND    sched.schedule_designator (+)= mp.compile_designator
245   AND    mp.organization_id           = arg_org_id
246   AND    mp.compile_designator        = arg_plan_name;
247 
248   IF var_debug THEN
249     var_buf := '+++++++++++++++++';
250     fnd_file.put_line(FND_FILE.LOG, var_buf);
251     var_buf := 'User ID                : '||var_user_id;
252     fnd_file.put_line(FND_FILE.LOG, var_buf);
253     var_buf := 'Owning org             : '||arg_org_id;
254     fnd_file.put_line(FND_FILE.LOG, var_buf);
255     var_buf := 'Plan                   : '||arg_plan_name;
256     fnd_file.put_line(FND_FILE.LOG, var_buf);
257     var_buf := 'Plan type              : '||var_plan_type;
258     fnd_file.put_line(FND_FILE.LOG, var_buf);
259     var_buf := 'Use start date         : '||arg_use_start_date;
260     fnd_file.put_line(FND_FILE.LOG, var_buf);
261     var_buf := 'Start date             : '||var_start_date;
262     fnd_file.put_line(FND_FILE.LOG, var_buf);
263     var_buf := 'WIP default job prefix : '||var_default_job_prefix;
264     fnd_file.put_line(FND_FILE.LOG, var_buf);
265     var_buf := 'WIP group ID           : '||var_wip_group_id;
266     fnd_file.put_line(FND_FILE.LOG, var_buf);
267     var_buf := 'PO group by            : '||var_po_group_by;
268     fnd_file.put_line(FND_FILE.LOG, var_buf);
269     var_buf := 'PO batch number        : '||var_po_batch_number;
270     fnd_file.put_line(FND_FILE.LOG, var_buf);
271     var_buf := 'Demand Class           : '||var_demand_class;
272     fnd_file.put_line(FND_FILE.LOG, var_buf);
273   END IF;
274 
275   -- ------------------------------------------------------------------------
276   -- Get planned orders that meet the auto-release criteria
277   -- ------------------------------------------------------------------------
278   var_entity := 'Planned Orders';
279 
280   OPEN planned_orders;
281 
282   LOOP
283     var_entity := 'Fetch Planned Orders';
284 
285     FETCH planned_orders INTO var_rowid,
286                               var_org_id,
287                               var_inventory_item_id,
288                               var_new_schedule_date,
289                               var_new_order_quantity,
290                               var_primary_uom_code,
291                               var_planner_employee_id,
292                               var_make_buy_code,
293 			      var_project_id;
294 
295     EXIT WHEN planned_orders%NOTFOUND;
296 
297     -- ----------------------------------------------------------------------
298     -- Get organization dependent info
299     -- ----------------------------------------------------------------------
300     IF (var_org_id <> var_prev_org_id) THEN
301 /*
302       var_entity := 'WIP Discrete Class';
303 
304       BEGIN
305         SELECT wp.default_discrete_class
306         INTO   var_wip_class_code
307         FROM   wip_parameters         wp
308         WHERE  wp.organization_id     = var_org_id;
309 
310         EXCEPTION
311           WHEN NO_DATA_FOUND THEN
312             var_wip_class_code := NULL;
313           WHEN OTHERS THEN
314             var_buf := var_entity||': '||sqlerrm;
315             fnd_file.put_line(FND_FILE.LOG, var_buf);
316 
317             ROLLBACK;
318             retcode := 2;
319             errbuf := var_buf;
320             RETURN;
321       END;
322 */
323       var_entity := 'PO Location';
324 
325       BEGIN
326         SELECT loc.location_id
327         INTO   var_location_id
328         FROM   hr_locations           loc,
329                hr_organization_units  unit
330         WHERE  unit.organization_id   = var_org_id
331         AND    unit.location_id       = loc.location_id;
332 
333         EXCEPTION
334           WHEN NO_DATA_FOUND THEN
335             var_location_id := NULL;
336           WHEN OTHERS THEN
337             var_buf := var_entity||': '||sqlerrm;
338             fnd_file.put_line(FND_FILE.LOG, var_buf);
339 
340             ROLLBACK;
341             retcode := 2;
342             errbuf := var_buf;
343             RETURN;
344       END;
345 
346       IF var_debug THEN
347         var_buf := '=================';
348         fnd_file.put_line(FND_FILE.LOG, var_buf);
349         var_buf := 'Organization ID        : '||var_org_id;
350         fnd_file.put_line(FND_FILE.LOG, var_buf);
351         var_buf := 'Location ID            : '||var_location_id;
352         fnd_file.put_line(FND_FILE.LOG, var_buf);
353       END IF;
354     END IF;     /* Org ID */
355 
356     -- ----------------------------------------------------------------------
357     -- Get item dependent info
358     -- ----------------------------------------------------------------------
359     IF ( (var_prev_inventory_item_id <> var_inventory_item_id) OR
360 	 (NVL(var_prev_project_id,-1) <> NVL(var_project_id,-1)) )    THEN
361 
362       var_wip_class_code := wip_common.default_acc_class (
363                                    var_org_id,
364                                    var_inventory_item_id,
365                                    1,   -- Entity type for discrete job
366 -- 5514051                                  NULL,-- Project id
367 				   var_project_id,
368                                    err_msg_1,
369                                    err_class_1,
370                                    err_msg_2,
371                                    err_class_2);
372 
373       IF (var_wip_class_code is NULL) THEN
374        BEGIN
375 
376         var_entity := 'WIP Discrete Class';
377 
378         SELECT wp.default_discrete_class
379         INTO   var_wip_class_code
380         FROM   wip_parameters         wp
381         WHERE  wp.organization_id     = var_org_id;
382 
383         EXCEPTION
384           WHEN NO_DATA_FOUND THEN
385             var_wip_class_code := NULL;
386           WHEN OTHERS THEN
387             var_buf := var_entity||': '||sqlerrm;
388             fnd_file.put_line(FND_FILE.LOG, var_buf);
389 
390             ROLLBACK;
391             retcode := 2;
392             errbuf := var_buf;
393             RETURN;
394        END;
395       END IF;
396     END IF; /* Item Id */
397 
398     IF (var_make_buy_code = MAKE) THEN
399 
400       -- --------------------------------------------------------------------
401       -- Get WIP Jobs parameter
402       -- --------------------------------------------------------------------
403       IF var_planner_employee_id IS NULL THEN
404 
405         var_impl_status_code := UNRELEASED_NO_CHARGES;
406 	var_job_prefix       := var_default_job_prefix;
407 
408       ELSE
409 
410         BEGIN
411           var_entity := 'WIP Job Status';
412 
413           OPEN job_status;
414           FETCH job_status INTO var_impl_status_code,var_wip_class_code ,
415 								var_firm_jobs;
416           var_job_prefix  := var_default_job_prefix;
417 
418           IF job_status%NOTFOUND THEN
419             var_impl_status_code := UNRELEASED_NO_CHARGES;
420 	    var_job_prefix       := var_default_job_prefix;
421           END IF;
422 
423           CLOSE job_status;
424         END;
425 
426       END IF;
427 
428       IF var_debug THEN
429         var_buf := '----------------- ';
430         fnd_file.put_line(FND_FILE.LOG, var_buf);
431         var_buf := 'Item ID                : '||var_inventory_item_id;
432         fnd_file.put_line(FND_FILE.LOG, var_buf);
433         var_buf := 'Item Make/Buy          : '||var_make_buy_code;
434         fnd_file.put_line(FND_FILE.LOG, var_buf);
435         var_buf := 'WIP class code         : '||var_wip_class_code;
436         fnd_file.put_line(FND_FILE.LOG, var_buf);
437         var_buf := 'Date                   : '||var_new_schedule_date;
438         fnd_file.put_line(FND_FILE.LOG, var_buf);
439         var_buf := 'Quantity               : '||var_new_order_quantity;
440         fnd_file.put_line(FND_FILE.LOG, var_buf);
441         var_buf := 'Planner emp ID         : '||var_planner_employee_id;
442         fnd_file.put_line(FND_FILE.LOG, var_buf);
443         var_buf := 'WIP job status         : '||var_impl_status_code;
444         fnd_file.put_line(FND_FILE.LOG, var_buf);
445         var_buf := 'WIP job prefix         : '||var_job_prefix;
446         fnd_file.put_line(FND_FILE.LOG, var_buf);
447       END IF;
448 
449       -- --------------------------------------------------------------------
450       -- Update WIP Jobs planned orders
451       -- --------------------------------------------------------------------
452       var_entity := 'WIP Planned Orders';
453 
454       UPDATE mrp_recommendations
455       SET    old_order_quantity       = new_order_quantity,
456              quantity_in_process      = new_order_quantity,
457              implement_date           = new_schedule_date,
458              implement_quantity       = new_order_quantity,
459              implement_firm           = DECODE(var_firm_jobs,
460 												'Y', 1,
461 											   	2),
462              implement_job_name       = var_job_prefix||to_char(wip_job_number_s.nextval),
463              implement_status_code    = var_impl_status_code,
464              implement_wip_class_code = NVL(var_wip_class_code,var_job_prefix),
465              implement_source_org_id  = NULL,
466              implement_vendor_id      = NULL,
467              implement_vendor_site_id = NULL,
468              implement_project_id     = project_id,
469              implement_task_id        = task_id,
470              implement_demand_class   = var_demand_class,
471              load_type                = WIP_DIS_MASS_LOAD,
472              implement_as             = WIP_DISCRETE_JOB
473       WHERE  rowid                    = var_rowid;
474 
475     ELSIF (var_make_buy_code = BUY) THEN
476 
477       -- --------------------------------------------------------------------
478       -- Verify PO Reqs parameters
479       --
480       -- If Planner is not an active employee, do not release
481       -- --------------------------------------------------------------------
482       var_entity := 'Employee';
483 
484       SELECT count(*)
485       INTO   var_count
486       FROM   hr_employees_current_v     emp
487       WHERE  emp.employee_id = NVL(var_planner_employee_id, NULL_VALUE);
488 
489       IF var_debug THEN
490         var_buf := '----------------- ';
491         fnd_file.put_line(FND_FILE.LOG, var_buf);
492         var_buf := 'Item ID                : '||var_inventory_item_id;
493         fnd_file.put_line(FND_FILE.LOG, var_buf);
494         var_buf := 'Item Make/Buy          : '||var_make_buy_code;
495         fnd_file.put_line(FND_FILE.LOG, var_buf);
496         var_buf := 'Date                   : '||var_new_schedule_date;
497         fnd_file.put_line(FND_FILE.LOG, var_buf);
498         var_buf := 'Quantity               : '||var_new_order_quantity;
499         fnd_file.put_line(FND_FILE.LOG, var_buf);
500         var_buf := 'Planner emp ID         : '||var_planner_employee_id;
501         fnd_file.put_line(FND_FILE.LOG, var_buf);
502         var_buf := 'Active employee        : '||var_count;
503         fnd_file.put_line(FND_FILE.LOG, var_buf);
504       END IF;
505 
506       IF (var_count = 0) THEN
507 
508         -- PO Req is not released because Planner is not an active employee
509 
510         var_entity := 'Non-released PO Req';
511 
512         SELECT param.organization_code, msik.concatenated_segments,
513                msik.planner_code
514         INTO   var_org_code, var_item, var_planner_code
515         FROM   mtl_system_items_kfv     msik,
516                mtl_parameters           param,
517                mrp_recommendations      mr
518         WHERE  mr.rowid                 = var_rowid
519         AND    msik.organization_id     = mr.organization_id
520         AND    msik.inventory_item_id   = mr.inventory_item_id
521         AND    param.organization_id    = mr.organization_id;
522 
523         var_buf := '................. ';
524         fnd_file.put_line(FND_FILE.LOG, var_buf);
525 
526         fnd_message.set_name('MRP', 'MRP_UNRELEASED_ORDER1');
527         var_buf := fnd_message.get;
528         fnd_file.put_line(FND_FILE.LOG, var_buf);
529 
530         fnd_message.set_name('MRP', 'MRP_UNRELEASED_ORDER2');
531         fnd_message.set_token('PLANNER_VALUE', var_planner_code);
532         fnd_message.set_token('ORG_VALUE', var_org_code);
533         fnd_message.set_token('ITEM_VALUE', var_item);
534         fnd_message.set_token('DATE_VALUE', to_char(var_new_schedule_date));
535         fnd_message.set_token('QTY_VALUE', to_char(var_new_order_quantity));
536         var_buf := fnd_message.get;
537         fnd_file.put_line(FND_FILE.LOG, var_buf);
538 
539       ELSE
540 
541         -- ------------------------------------------------------------------
542         -- Update PO Reqs planned orders
543         -- ------------------------------------------------------------------
544         var_entity := 'PO Planned Orders';
545 
546         UPDATE mrp_recommendations
547         SET    old_order_quantity       = new_order_quantity,
548                quantity_in_process      = new_order_quantity,
549                implement_date           = new_schedule_date,
550                implement_quantity       = new_order_quantity,
551                implement_firm           = firm_planned_type,
552                implement_dock_date      = new_dock_date,
553                implement_employee_id    = var_planner_employee_id,
554                implement_uom_code       = var_primary_uom_code,
555                implement_location_id    = var_location_id,
556                implement_source_org_id  = source_organization_id,
557                implement_vendor_id      = source_vendor_id,
558                implement_vendor_site_id = source_vendor_site_id,
559                implement_project_id     = project_id,
560                implement_task_id        = task_id,
561                implement_demand_class   = NULL,
562                load_type                = PO_MASS_LOAD,
563                implement_as             = PO_REQUISITION
564         WHERE  rowid                    = var_rowid;
565 
566       END IF;   /* Count */
567 
568     END IF;     /* Make Buy code */
569 
570     var_prev_org_id := var_org_id;
571     var_prev_inventory_item_id := var_inventory_item_id;
572     var_prev_project_id := var_project_id;
573 
574   END LOOP;
575 
576   CLOSE planned_orders;
577 
578   COMMIT WORK;
579 
580   -- ------------------------------------------------------------------------
581   -- Release the planned orders
582   -- ------------------------------------------------------------------------
583   var_entity := 'Release Planned Orders';
584 
585   MRP_Rel_Plan_PUB.mrp_release_plan_sc
586 		     (arg_org_id, arg_org_id, arg_plan_name, var_user_id,
587                       var_po_group_by, var_po_batch_number, var_wip_group_id,
588                       var_loaded_jobs, var_loaded_reqs, var_loaded_scheds,
589                       var_resched_jobs, var_resched_reqs, var_wip_req_id,
590                       var_req_load_id, var_req_resched_id);
591 
592   var_buf := '+++++++++++++++++ ';
593   fnd_file.put_line(FND_FILE.LOG, var_buf);
594 
595   fnd_message.set_name('MRP', 'LOADED_WIP');
596   fnd_message.set_token('VALUE', to_char(var_loaded_jobs));
597   var_buf := fnd_message.get;
598   fnd_file.put_line(FND_FILE.LOG, var_buf);
599 
600   fnd_message.set_name('MRP', 'LOADED_PO');
601   fnd_message.set_token('VALUE', to_char(var_loaded_reqs));
602   var_buf := fnd_message.get;
603   fnd_file.put_line(FND_FILE.LOG, var_buf);
604 
605   fnd_message.set_name('MRP', 'LOAD_WIP_REQUEST_ID');
606   fnd_message.set_token('VALUE', to_char(var_wip_req_id));
607   var_buf := fnd_message.get;
608   fnd_file.put_line(FND_FILE.LOG, var_buf);
609 
610   fnd_message.set_name('MRP', 'LOAD_PO_REQUEST_ID');
611   fnd_message.set_token('VALUE', to_char(var_req_load_id));
612   var_buf := fnd_message.get;
613   fnd_file.put_line(FND_FILE.LOG, var_buf);
614 
615   IF ((var_loaded_jobs > 0) AND (var_wip_req_id = 0)) THEN
616     fnd_file.new_line(FND_FILE.LOG, 1);
617     fnd_message.set_name('MRP', 'CANNOT SUBMIT REQUEST-JOBS');
618     var_buf := fnd_message.get;
619     fnd_file.put_line(FND_FILE.LOG, var_buf);
620 
621     retcode := 2;
622     errbuf := var_buf;
623   END IF;
624 
625   IF ((var_loaded_reqs > 0) AND (var_req_load_id = 0)) THEN
626     fnd_file.new_line(FND_FILE.LOG, 1);
627     fnd_message.set_name('MRP', 'CANNOT SUBMIT REQUEST-REQS');
628     var_buf := fnd_message.get;
629     fnd_file.put_line(FND_FILE.LOG, var_buf);
630 
631     retcode := 2;
632     errbuf := var_buf;
633   END IF;
634 
635   RETURN;
636 
637 EXCEPTION
638   WHEN OTHERS THEN
639     var_buf := var_entity||': '||sqlerrm;
640     fnd_file.put_line(FND_FILE.LOG, var_buf);
641 
642     ROLLBACK;
643     retcode := 2;
644     errbuf := var_buf;
645     RETURN;
646 END mrp_auto_release;
647 
648 END mrp_release_pk;