core-jgi/db/maintain/Maintenance/AD_Menu_Check.sql

254 lines
10 KiB
SQL

/*************************************************************************
* The contents of this file are subject to the Adempiere License. You may
* obtain a copy of the License at http://www.adempiere.org/license.html
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for details. Code: Adempiere ERP+CRM
* Copyright (C) 1999-2001 Jorg Janke, ComPiere, Inc. All Rights Reserved.
*************************************************************************
* $Id: AD_Menu_Check.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
***
* Title: Menu Check
* Description:
* For AD_Menu create
* - Missing Translations
* - Missing Windows in Main Menu
* - Missing Menu Tree Structure(s)
* - Synchronize Window Names with
* AD_Window/AD_Process/AD_Form/AD_Workflow/AD_Task
************************************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('Clean up Nodes');
UPDATE AD_Menu
SET Action = NULL
WHERE IsSummary='Y'
AND Action IS NOT NULL;
UPDATE AD_Menu
SET AD_Workbench_ID=NULL
WHERE Action <> 'B' AND AD_Workbench_ID IS NOT NULL;
UPDATE AD_Menu
SET AD_WorkFlow_ID=NULL
WHERE (Action <> 'F' OR Action IS NULL) AND AD_WorkFlow_ID IS NOT NULL;
UPDATE AD_Menu
SET AD_Process_ID=NULL
WHERE (Action NOT IN ('P','R') OR Action IS NULL) AND AD_Process_ID IS NOT NULL;
UPDATE AD_Menu
SET AD_Task_ID=NULL
WHERE (Action <> 'T' OR Action IS NULL) AND AD_Task_ID IS NOT NULL;
UPDATE AD_Menu
SET AD_Window_ID=NULL
WHERE (Action <> 'W' OR Action IS NULL) AND AD_Window_ID IS NOT NULL;
UPDATE AD_Menu
SET AD_Form_ID=NULL
WHERE (Action <> 'X' OR Action IS NULL) AND AD_Form_ID IS NOT NULL;
DBMS_OUTPUT.PUT_LINE('Adding Windows to Menu');
DECLARE
NextNo NUMBER;
CURSOR Cur_Window IS
SELECT *
FROM AD_Window -- add only non existing menus
WHERE NOT EXISTS (SELECT * FROM AD_Menu m
WHERE AD_Window.AD_Window_ID=m.AD_Window_ID);
BEGIN
FOR CW IN Cur_Window LOOP
AD_Sequence_Next('AD_Menu', 0, NextNo); -- get ID
INSERT INTO AD_Menu
(AD_MENU_ID, AD_CLIENT_ID, AD_ORG_ID,
ISACTIVE, CREATED, CREATEDBY, UPDATED, UPDATEDBY,
NAME, DESCRIPTION,
ISSUMMARY, ACTION, AD_WINDOW_ID)
VALUES
(NextNo, CW.AD_CLIENT_ID, CW.AD_ORG_ID,
CW.ISACTIVE, CW.CREATED, CW.CREATEDBY, CW.UPDATED, CW.UPDATEDBY,
CW.NAME, CW.DESCRIPTION,
'N', 'W', CW.AD_WINDOW_ID);
DBMS_OUTPUT.PUT_LINE(' added: ' || CW.NAME);
END LOOP;
END;
DBMS_OUTPUT.PUT_LINE('Adding to Base Menu Tree');
DECLARE
CURSOR Cur_Tree IS
SELECT *
FROM AD_ClientInfo;
CURSOR Cur_Menu (Client NUMBER, Tree NUMBER) IS
SELECT *
FROM AD_Menu
WHERE AD_Menu_ID NOT IN
(SELECT Node_ID FROM AD_TreeNodeMM WHERE AD_Tree_ID=Tree)
AND AD_Client_ID=Client;
BEGIN
FOR CT IN Cur_Tree LOOP
DBMS_OUTPUT.PUT_LINE(' For Tree ' || CT.AD_Tree_Menu_ID);
--
FOR CM IN Cur_Menu (CT.AD_Client_ID, CT.AD_Tree_Menu_ID) LOOP
INSERT INTO AD_TreeNodeMM
(AD_Client_ID, AD_Org_ID,
IsActive, Created, CreatedBy, Updated, UpdatedBy,
AD_Tree_ID, Node_ID, Parent_ID, SeqNo)
VALUES
(CM.AD_Client_ID, CM.AD_Org_ID,
CM.IsActive, CM.Created, CM.CreatedBy, CM.Updated, CM.UpdatedBy,
CT.AD_Tree_Menu_ID, CM.AD_Menu_ID, 0, 999);
DBMS_OUTPUT.PUT_LINE(' added: ' || CM.NAME);
END LOOP; -- Menu Loop
END LOOP; -- Tree Loop
END; -- Adding to Tree
-- Menu Trl
DBMS_OUTPUT.PUT_LINE('Adding missing Menu Translations');
INSERT INTO AD_Menu_Trl (AD_Menu_ID, AD_Language, AD_Client_ID, AD_Org_ID,
IsActive, Created, CreatedBy, Updated, UpdatedBy,
Name, Description, IsTranslated)
SELECT m.AD_Menu_ID, l.AD_Language, m.AD_Client_ID, m.AD_Org_ID,
m.IsActive, m.Created, m.CreatedBy, m.Updated, m.UpdatedBy,
m.Name, m.Description, 'N'
FROM AD_Menu m, AD_Language l
WHERE l.IsActive = 'Y' AND l.IsSystemLanguage = 'Y'
AND AD_Menu_ID || AD_Language NOT IN
(SELECT AD_Menu_ID || AD_Language FROM AD_Menu_Trl);
DBMS_OUTPUT.PUT_LINE(' rows added: ' || SQL%ROWCOUNT);
-- Sync Names - Window
DBMS_OUTPUT.PUT_LINE('Synchronizing Names with Window Names');
UPDATE AD_Menu m
SET Name = (SELECT Name FROM AD_Window w WHERE m.AD_Window_ID=w.AD_Window_ID),
Description = (SELECT Description FROM AD_Window w WHERE m.AD_Window_ID=w.AD_Window_ID)
WHERE AD_Window_ID IS NOT NULL
AND Action = 'W';
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
UPDATE AD_Menu_Trl mt
SET Name = (SELECT wt.Name FROM AD_Window_Trl wt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
AND mt.AD_Language=wt.AD_Language),
Description = (SELECT wt.Description FROM AD_Window_Trl wt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
AND mt.AD_Language=wt.AD_Language),
IsTranslated = (SELECT wt.IsTranslated FROM AD_Window_Trl wt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
AND mt.AD_Language=wt.AD_Language)
WHERE EXISTS (SELECT * FROM AD_Window_Trl wt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Window_ID=wt.AD_Window_ID
AND mt.AD_Language=wt.AD_Language
AND m.AD_Window_ID IS NOT NULL
AND m.Action = 'W');
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
-- Sync Names - Process
DBMS_OUTPUT.PUT_LINE('Synchronizing Names with Process Names');
UPDATE AD_Menu m
SET Name = (SELECT p.Name FROM AD_Process p WHERE m.AD_Process_ID=p.AD_Process_ID),
Description = (SELECT p.Description FROM AD_Process p WHERE m.AD_Process_ID=p.AD_Process_ID)
WHERE m.AD_Process_ID IS NOT NULL
AND m.Action IN ('R', 'P');
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
UPDATE AD_Menu_Trl mt
SET Name = (SELECT pt.Name FROM AD_Process_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
AND mt.AD_Language=pt.AD_Language),
Description = (SELECT pt.Description FROM AD_Process_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
AND mt.AD_Language=pt.AD_Language),
IsTranslated = (SELECT pt.IsTranslated FROM AD_Process_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
AND mt.AD_Language=pt.AD_Language)
WHERE EXISTS (SELECT * FROM AD_Process_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Process_ID=pt.AD_Process_ID
AND mt.AD_Language=pt.AD_Language
AND m.AD_Process_ID IS NOT NULL
AND Action IN ('R', 'P'));
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
-- Sync Names = Form
DBMS_OUTPUT.PUT_LINE('Synchronizing Names with Form Names');
UPDATE AD_Menu m
SET Name = (SELECT Name FROM AD_Form f WHERE m.AD_Form_ID=f.AD_Form_ID),
Description = (SELECT Description FROM AD_Form f WHERE m.AD_Form_ID=f.AD_Form_ID)
WHERE AD_Form_ID IS NOT NULL
AND Action = 'X';
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
UPDATE AD_Menu_Trl mt
SET Name = (SELECT ft.Name FROM AD_Form_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
AND mt.AD_Language=ft.AD_Language),
Description = (SELECT ft.Description FROM AD_Form_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
AND mt.AD_Language=ft.AD_Language),
IsTranslated = (SELECT ft.IsTranslated FROM AD_Form_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
AND mt.AD_Language=ft.AD_Language)
WHERE EXISTS (SELECT * FROM AD_Form_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Form_ID=ft.AD_Form_ID
AND mt.AD_Language=ft.AD_Language
AND m.AD_Form_ID IS NOT NULL
AND Action = 'X');
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
-- Sync Names - Workflow
DBMS_OUTPUT.PUT_LINE('Synchronizing Names with Workflow Names');
UPDATE AD_Menu m
SET Name = (SELECT p.Name FROM AD_Workflow p WHERE m.AD_Workflow_ID=p.AD_Workflow_ID),
Description = (SELECT p.Description FROM AD_Workflow p WHERE m.AD_Workflow_ID=p.AD_Workflow_ID)
WHERE m.AD_Workflow_ID IS NOT NULL
AND m.Action = 'F';
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
UPDATE AD_Menu_Trl mt
SET Name = (SELECT pt.Name FROM AD_Workflow_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
AND mt.AD_Language=pt.AD_Language),
Description = (SELECT pt.Description FROM AD_Workflow_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
AND mt.AD_Language=pt.AD_Language),
IsTranslated = (SELECT pt.IsTranslated FROM AD_Workflow_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
AND mt.AD_Language=pt.AD_Language)
WHERE EXISTS (SELECT * FROM AD_Workflow_Trl pt, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Workflow_ID=pt.AD_Workflow_ID
AND mt.AD_Language=pt.AD_Language
AND m.AD_Workflow_ID IS NOT NULL
AND Action = 'F');
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
-- Sync Names = Task
DBMS_OUTPUT.PUT_LINE('Synchronizing Names with Task Names');
UPDATE AD_Menu m
SET Name = (SELECT Name FROM AD_Task f WHERE m.AD_Task_ID=f.AD_Task_ID),
Description = (SELECT Description FROM AD_Task f WHERE m.AD_Task_ID=f.AD_Task_ID)
WHERE AD_Task_ID IS NOT NULL
AND Action = 'T';
DBMS_OUTPUT.PUT_LINE(' rows updated: ' || SQL%ROWCOUNT);
UPDATE AD_Menu_Trl mt
SET Name = (SELECT ft.Name FROM AD_Task_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
AND mt.AD_Language=ft.AD_Language),
Description = (SELECT ft.Description FROM AD_Task_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
AND mt.AD_Language=ft.AD_Language),
IsTranslated = (SELECT ft.IsTranslated FROM AD_Task_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
AND mt.AD_Language=ft.AD_Language)
WHERE EXISTS (SELECT * FROM AD_Task_Trl ft, AD_Menu m
WHERE mt.AD_Menu_ID=m.AD_Menu_ID AND m.AD_Task_ID=ft.AD_Task_ID
AND mt.AD_Language=ft.AD_Language
AND m.AD_Task_ID IS NOT NULL
AND Action = 'T');
DBMS_OUTPUT.PUT_LINE(' trl rows updated: ' || SQL%ROWCOUNT);
--
COMMIT;
END;
/