IDEMPIERE-454 Easy import / v1 -> Exporter - export data from 1 tab / Importer - allow insert in 1 tab

This commit is contained in:
Carlos Ruiz 2012-10-26 00:03:39 -05:00
parent 95622fc317
commit 066f24162e
18 changed files with 1196 additions and 38 deletions

View File

@ -0,0 +1,93 @@
-- Oct 7, 2012 7:15:57 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_ToolBarButton (Name,ComponentName,Classname,IsCustomization,KeyStroke_KeyCode,KeyStroke_Modifiers,AD_Client_ID,AD_Org_ID,Created,CreatedBy,AD_ToolBarButton_ID,Updated,UpdatedBy,IsActive,AD_ToolBarButton_UU) VALUES ('zk Window - File Import','FileImport','org.idempiere.ui.window','N',0,0,0,0,TO_DATE('2012-10-07 19:15:57','YYYY-MM-DD HH24:MI:SS'),100,1000007,TO_DATE('2012-10-07 19:15:57','YYYY-MM-DD HH24:MI:SS'),100,'Y','afdd17a6-5fd1-411e-8596-5310aa68785f')
;
-- Oct 25, 2012 11:42:24 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','Field {0} not found',200082,'D','a41866df-ebaf-4ea4-a5be-694b21d076c6','FieldNotFound','Y',TO_DATE('2012-10-25 23:42:22','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:42:22','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:42:24 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200082 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:43:32 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} not a window field',200083,'D','ff2e000e-330e-40d7-8da2-37c558c02fae','NotAWindowField','Y',TO_DATE('2012-10-25 23:43:31','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:43:31','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:43:32 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200083 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:45:01 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} is readonly',200084,'D','914303a5-b1b7-46db-9d3d-953258f1815c','FieldIsReadOnly','Y',TO_DATE('2012-10-25 23:45:00','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:45:00','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:45:01 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200084 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:45:50 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} is not displayed',200085,'D','6406807b-ead4-4bbe-9221-8d3936e77f22','FieldNotDisplayed','Y',TO_DATE('2012-10-25 23:45:49','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:45:49','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:45:50 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200085 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:46:55 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} not resolved = ({1})',200086,'D','bbaa12b8-df37-4a2a-812f-144bbfdef1a9','ForeignNotResolved','Y',TO_DATE('2012-10-25 23:46:53','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:46:53','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:46:55 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200086 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:48:44 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','ERROR: {0} parent cannot be changed',200087,'D','a47623df-6f91-42ad-9172-2459a680c3cf','ParentCannotChange','Y',TO_DATE('2012-10-25 23:48:43','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:48:43','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:48:44 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200087 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:49:42 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','ERROR: {0} not editable',200088,'D','78a73537-7dee-44cc-b66d-76cfba2fb199','FieldNotEditable','Y',TO_DATE('2012-10-25 23:49:40','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:49:40','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:49:42 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200088 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:50:46 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','Successfully saved [{0}]',200089,'D','9d255a1a-e4ea-402b-98ee-ad168603b4c5','SuccessfullySaved','Y',TO_DATE('2012-10-25 23:50:45','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_DATE('2012-10-25 23:50:45','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:50:46 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200089 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:50:57 PM COT
-- IDEMPIERE-454 Easy import
UPDATE AD_Message SET MsgType='I',Updated=TO_DATE('2012-10-25 23:50:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200089
;
SELECT register_migration_script('928_IDEMPIERE-454.sql') FROM dual
;

View File

@ -0,0 +1,93 @@
-- Oct 7, 2012 7:15:57 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_ToolBarButton (Name,ComponentName,Classname,IsCustomization,KeyStroke_KeyCode,KeyStroke_Modifiers,AD_Client_ID,AD_Org_ID,Created,CreatedBy,AD_ToolBarButton_ID,Updated,UpdatedBy,IsActive,AD_ToolBarButton_UU) VALUES ('zk Window - File Import','FileImport','org.idempiere.ui.window','N',0,0,0,0,TO_TIMESTAMP('2012-10-07 19:15:57','YYYY-MM-DD HH24:MI:SS'),100,1000007,TO_TIMESTAMP('2012-10-07 19:15:57','YYYY-MM-DD HH24:MI:SS'),100,'Y','afdd17a6-5fd1-411e-8596-5310aa68785f')
;
-- Oct 25, 2012 11:42:24 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','Field {0} not found',200082,'D','a41866df-ebaf-4ea4-a5be-694b21d076c6','FieldNotFound','Y',TO_TIMESTAMP('2012-10-25 23:42:22','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:42:22','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:42:24 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200082 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:43:32 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} not a window field',200083,'D','ff2e000e-330e-40d7-8da2-37c558c02fae','NotAWindowField','Y',TO_TIMESTAMP('2012-10-25 23:43:31','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:43:31','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:43:32 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200083 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:45:01 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} is readonly',200084,'D','914303a5-b1b7-46db-9d3d-953258f1815c','FieldIsReadOnly','Y',TO_TIMESTAMP('2012-10-25 23:45:00','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:45:00','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:45:01 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200084 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:45:50 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} is not displayed',200085,'D','6406807b-ead4-4bbe-9221-8d3936e77f22','FieldNotDisplayed','Y',TO_TIMESTAMP('2012-10-25 23:45:49','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:45:49','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:45:50 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200085 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:46:55 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','{0} not resolved = ({1})',200086,'D','bbaa12b8-df37-4a2a-812f-144bbfdef1a9','ForeignNotResolved','Y',TO_TIMESTAMP('2012-10-25 23:46:53','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:46:53','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:46:55 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200086 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:48:44 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','ERROR: {0} parent cannot be changed',200087,'D','a47623df-6f91-42ad-9172-2459a680c3cf','ParentCannotChange','Y',TO_TIMESTAMP('2012-10-25 23:48:43','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:48:43','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:48:44 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200087 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:49:42 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','ERROR: {0} not editable',200088,'D','78a73537-7dee-44cc-b66d-76cfba2fb199','FieldNotEditable','Y',TO_TIMESTAMP('2012-10-25 23:49:40','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:49:40','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:49:42 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200088 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:50:46 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Client_ID,AD_Org_ID,Created) VALUES ('E','Successfully saved [{0}]',200089,'D','9d255a1a-e4ea-402b-98ee-ad168603b4c5','SuccessfullySaved','Y',TO_TIMESTAMP('2012-10-25 23:50:45','YYYY-MM-DD HH24:MI:SS'),100,100,0,0,TO_TIMESTAMP('2012-10-25 23:50:45','YYYY-MM-DD HH24:MI:SS'))
;
-- Oct 25, 2012 11:50:46 PM COT
-- IDEMPIERE-454 Easy import
INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Message_Trl_UU ) SELECT l.AD_Language,t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Message t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Message_ID=200089 AND NOT EXISTS (SELECT * FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID)
;
-- Oct 25, 2012 11:50:57 PM COT
-- IDEMPIERE-454 Easy import
UPDATE AD_Message SET MsgType='I',Updated=TO_TIMESTAMP('2012-10-25 23:50:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=200089
;
SELECT register_migration_script('928_IDEMPIERE-454.sql') FROM dual
;

View File

@ -12,6 +12,7 @@
<extension-point id="org.adempiere.base.IModelFactory" name="Model Factory" schema="schema/org.adempiere.base.IModelFactory.exsd"/>
<extension-point id="org.adempiere.base.IDocFactory" name="Financial Document Factory" schema="schema/org.adempiere.base.IDocFactory.exsd"/>
<extension-point id="org.adempiere.base.IGridTabExporter" name="Grid data export extension" schema="schema/org.adempiere.base.IGridTabExporter.exsd"/>
<extension-point id="org.adempiere.base.IGridTabImporter" name="Grid data import extension" schema="schema/org.adempiere.base.IGridTabImporter.exsd"/>
<extension-point id="org.compiere.model.PaymentProcessor" name="Payment Processor" schema="schema/org.compiere.model.PaymentProcessor.exsd"/>
<extension-point id="org.compiere.model.Callout" name="Callout" schema="schema/org.compiere.model.Callout.exsd"/>
<extension
@ -51,6 +52,15 @@
priority="0">
</exporter>
</extension>
<extension
id="org.adempiere.impexp.GridTabCSVImporter"
name="Grid data CSV importer"
point="org.adempiere.base.IGridTabImporter">
<importer
class="org.adempiere.impexp.GridTabCSVImporter"
priority="0">
</importer>
</extension>
<extension
id="org.adempiere.base.ModelGeneratorApplication"
name="Model Generator"

View File

@ -0,0 +1,141 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
<schema targetNamespace="org.adempiere.base" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
<appinfo>
<meta.schema plugin="org.adempiere.base" id="org.adempiere.base.IGridTabImporter" name="Grid data import extension"/>
</appinfo>
<documentation>
Extension point to provide import service for data from that is generated from the AD_Window definition. The client in use ( swing or zk ) is responsible to present all available import extension to user to pick the one to use.
</documentation>
</annotation>
<element name="extension">
<annotation>
<appinfo>
<meta.element />
</appinfo>
</annotation>
<complexType>
<choice>
<element ref="importer"/>
</choice>
<attribute name="point" type="string" use="required">
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attribute name="id" type="string">
<annotation>
<documentation>
</documentation>
</annotation>
</attribute>
<attribute name="name" type="string">
<annotation>
<documentation>
</documentation>
<appinfo>
<meta.attribute translatable="true"/>
</appinfo>
</annotation>
</attribute>
</complexType>
</element>
<element name="importer">
<complexType>
<attribute name="priority" type="string" use="required">
<annotation>
<documentation>
numeric priority value, higher value is of higher priority.
</documentation>
</annotation>
</attribute>
<attribute name="class" type="string" use="required">
<annotation>
<documentation>
Implementation class name for the org.adempiere.base.IGridTabImporter interface
</documentation>
<appinfo>
<meta.attribute kind="java" basedOn=":org.adempiere.base.IGridTabImporter"/>
</appinfo>
</annotation>
</attribute>
</complexType>
</element>
<annotation>
<appinfo>
<meta.section type="since"/>
</appinfo>
<documentation>
1.0.0
</documentation>
</annotation>
<annotation>
<appinfo>
<meta.section type="examples"/>
</appinfo>
<documentation>
&lt;pre&gt;
&lt;extension
id=&quot;org.adempiere.impexp.GridTabCSVImporter&quot;
name=&quot;Grid data CSV importer&quot;
point=&quot;org.adempiere.base.IGridTabImporter&quot;&gt;
&lt;importer
class=&quot;org.adempiere.impexp.GridTabCSVImporter&quot;
priority=&quot;0&quot;&gt;
&lt;/importer&gt;
&lt;/extension&gt;
&lt;/pre&gt;
</documentation>
</annotation>
<annotation>
<appinfo>
<meta.section type="apiinfo"/>
</appinfo>
<documentation>
The class attribute must represent an implementor of org.adempiere.base.IGridTabImporter
</documentation>
</annotation>
<annotation>
<appinfo>
<meta.section type="implementation"/>
</appinfo>
<documentation>
CSV import in org.adempiere.base
</documentation>
</annotation>
<annotation>
<appinfo>
<meta.section type="copyright"/>
</appinfo>
<documentation>
This file is part of iDempiere ERP http://www.idempiere.org.
Copyright (C) Carlos Ruiz
Copyright (C) Trek Global
This program is free software; you can redistribute it and/or modify it
under the terms version 2 of the GNU General Public License as published
by the Free Software Foundation. This program is distributed in the hope
that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
</documentation>
</annotation>
</schema>

View File

@ -48,4 +48,9 @@ public interface IGridTabExporter {
* @return mime type
*/
public String getContentType();
/**
* @return suggested file name
*/
public String getSuggestedFileName(GridTab gridTab);
}

View File

@ -0,0 +1,59 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012 Trek Global *
* Copyright (C) 2012 Carlos Ruiz *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.adempiere.base;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.List;
import org.compiere.model.GridTab;
/**
*
* @author Carlos Ruiz
*
*/
public interface IGridTabImporter {
/**
* export gridTab data to file
* @param gridTab
* @param childs
* @param filestream
* @param charset
*/
public File fileImport(GridTab gridTab, List<GridTab> childs, InputStream filestream, Charset charset);
/**
* @return file extension
*/
public String getFileExtension();
/**
* @return description for file extension
*/
public String getFileExtensionLabel();
/**
* @return mime type
*/
public String getContentType();
/**
* @return suggested file name
*/
public String getSuggestedFileName(GridTab gridTab);
}

View File

@ -17,6 +17,7 @@ package org.adempiere.impexp;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@ -25,6 +26,7 @@ import java.util.List;
import java.util.Map;
import org.adempiere.base.IGridTabExporter;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.model.MTabCustomization;
import org.compiere.model.GridField;
import org.compiere.model.GridTab;
@ -77,7 +79,9 @@ public class GridTabCSVExporter implements IGridTabExporter
} else if (DisplayType.Time == column.getAD_Reference_ID()) {
procArray.add(new Optional(new FmtDate("DisplayType.DEFAULT_TIME_FORMAT")));
} else if (DisplayType.Integer == column.getAD_Reference_ID() || DisplayType.isNumeric(column.getAD_Reference_ID())) {
procArray.add(new Optional(new FmtNumber(DisplayType.getNumberFormat(column.getAD_Reference_ID()))));
DecimalFormat nf = DisplayType.getNumberFormat(column.getAD_Reference_ID());
nf.setGroupingUsed(false);
procArray.add(new Optional(new FmtNumber(nf)));
} else if (DisplayType.YesNo == column.getAD_Reference_ID()) {
procArray.add(new Optional(new FmtBool("Y", "N")));
} else { // lookups and text
@ -110,7 +114,7 @@ public class GridTabCSVExporter implements IGridTabExporter
mapWriter.write(row, header, processors);
}
} catch (IOException e) {
e.printStackTrace();
throw new AdempiereException(e);
} finally {
if (mapWriter != null) {
try {
@ -125,7 +129,7 @@ public class GridTabCSVExporter implements IGridTabExporter
private Object resolveValue(GridTab gridTab, MTable table, MColumn column, int i, String headName) {
Object value = null;
if (headName.contains("[") && headName.endsWith("]")) {
if (headName.indexOf("[") >= 0 && headName.endsWith("]")) {
String foreignTable = column.getReferenceTableName();
Object idO = gridTab.getValue(i, column.getColumnName());
if (idO != null) {
@ -157,12 +161,14 @@ public class GridTabCSVExporter implements IGridTabExporter
String foreignTable = column.getReferenceTableName();
if ( ! ("AD_Language".equals(foreignTable) || "AD_EntityType".equals(foreignTable))) {
MTable fTable = MTable.get(Env.getCtx(), foreignTable);
// Hardcoded / do not check for Value on AD_Org and AD_User, must use name for these two tables
if (! ("AD_Org".equals(foreignTable) || "AD_User".equals(foreignTable))
// Hardcoded / do not check for Value on AD_Org, AD_User and AD_Ref_List, must use name for these two tables
if (! ("AD_Org".equals(foreignTable) || "AD_User".equals(foreignTable) || "AD_Ref_List".equals(foreignTable))
&& fTable.getColumn("Value") != null) {
name.append("[Value]"); // fully qualified
} else if (fTable.getColumn("Name") != null) {
name.append("[Name]");
} else if (fTable.getColumn("DocumentNo") != null) {
name.append("[DocumentNo]");
}
}
}
@ -197,16 +203,16 @@ public class GridTabCSVExporter implements IGridTabExporter
String[] customComponent = custom.split(";");
String[] fieldIds = customComponent[0].split("[,]");
List<GridField> fieldList = new ArrayList<GridField>();
for(String fieldIdStr : fieldIds)
for (String fieldIdStr : fieldIds)
{
fieldIdStr = fieldIdStr.trim();
if (fieldIdStr.length() == 0) continue;
int AD_Field_ID = Integer.parseInt(fieldIdStr);
for(GridField gridField : tmpFields)
for (GridField gridField : tmpFields)
{
if (gridField.getAD_Field_ID() == AD_Field_ID)
{
if(gridField.isDisplayedGrid())
if (!gridField.isReadOnly() && gridField.isDisplayedGrid())
fieldList.add(gridField);
break;
@ -219,9 +225,11 @@ public class GridTabCSVExporter implements IGridTabExporter
{
ArrayList<GridField> gridFieldList = new ArrayList<GridField>();
for(GridField field:tmpFields)
for (GridField field:tmpFields)
{
if(field.isDisplayedGrid())
if ("AD_Client_ID".equals(field.getColumnName()))
continue;
if (field.isParentValue() || (!field.isReadOnly() && field.isDisplayedGrid()))
gridFieldList.add(field);
}
@ -238,19 +246,9 @@ public class GridTabCSVExporter implements IGridTabExporter
return gridFields;
}
public boolean isColumnPrinted(GridTab tab, int col)
{
GridField field = tab.getField(col);
// field not displayed
if (!field.isDisplayed())
return false;
// field encrypted
if (field.isEncrypted())
return false;
// button without a reference value
if (field.getDisplayType() == DisplayType.Button && field.getAD_Reference_Value_ID() == 0)
return false;
return true;
@Override
public String getSuggestedFileName(GridTab gridTab) {
return "Export_" + gridTab.getTableName() + "." + getFileExtension();
}
}

View File

@ -0,0 +1,433 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012 Carlos Ruiz *
* Copyright (C) 2012 Trek Global *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.adempiere.impexp;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.sql.Timestamp;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import org.adempiere.base.IGridTabImporter;
import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.GridField;
import org.compiere.model.GridTab;
import org.compiere.model.MColumn;
import org.compiere.model.MTable;
import org.compiere.tools.FileUtil;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Language;
import org.compiere.util.Msg;
import org.compiere.util.Trx;
import org.compiere.util.ValueNamePair;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.ParseBigDecimal;
import org.supercsv.cellprocessor.ParseBool;
import org.supercsv.cellprocessor.ParseDate;
import org.supercsv.cellprocessor.ParseInt;
import org.supercsv.cellprocessor.constraint.StrMinMax;
import org.supercsv.cellprocessor.constraint.StrNotNullOrEmpty;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.exception.SuperCsvCellProcessorException;
import org.supercsv.io.CsvMapReader;
import org.supercsv.io.ICsvMapReader;
import org.supercsv.prefs.CsvPreference;
/**
* CSV Importer for GridTab
* @author Carlos Ruiz
*/
public class GridTabCSVImporter implements IGridTabImporter
{
private static final String ERROR_HEADER = "_ERROR_";
private static final String LOG_HEADER = "_LOG_";
/** Logger */
private static CLogger log = CLogger.getCLogger(GridTabCSVImporter.class);
boolean m_isError = false;
public File fileImport(GridTab gridTab, List<GridTab> childs, InputStream filestream, Charset charset) {
ICsvMapReader mapReader = null;
File errFile = null;
File logFile = null;
FileWriter errFileW = null;
FileWriter logFileW = null;
CsvPreference csvpref = CsvPreference.STANDARD_PREFERENCE;
String delimiter = String.valueOf((char) csvpref.getDelimiterChar());
String quoteChar = String.valueOf((char) csvpref.getQuoteChar());
try {
String errFileName = FileUtil.getTempMailName("Import_" + gridTab.getTableName(), "_err.csv");
errFile = new File(errFileName);
errFileW = new FileWriter(errFile, false);
mapReader = new CsvMapReader(new InputStreamReader(filestream), csvpref);
String[] header = mapReader.getHeader(true);
List<CellProcessor> readProcArray = new ArrayList<CellProcessor>();
for (int idx = 0; idx < header.length; idx++) {
String headName = header[idx];
if (headName.equals(ERROR_HEADER) || headName.equals(LOG_HEADER)) {
header[idx] = null;
readProcArray.add(null);
continue;
}
String columnName = headName;
boolean isForeign = headName.indexOf("[") > 0 && headName.endsWith("]");
if (isForeign) {
int end = headName.indexOf("[");
columnName = headName.substring(0, end);
}
GridField field = gridTab.getField(columnName);
if (field == null) {
throw new AdempiereException(Msg.getMsg(Env.getCtx(), "FieldNotFound", new Object[] {columnName}));
}
MColumn column = MColumn.get(Env.getCtx(), field.getAD_Column_ID());
// TODO: List columns can use RequireSubStr constraint
if (column.isMandatory()) {
if (DisplayType.Date == column.getAD_Reference_ID()) {
readProcArray.add(new ParseDate(DisplayType.DEFAULT_DATE_FORMAT));
} else if (DisplayType.DateTime == column.getAD_Reference_ID()) {
readProcArray.add(new ParseDate(DisplayType.DEFAULT_TIMESTAMP_FORMAT));
} else if (DisplayType.Time == column.getAD_Reference_ID()) {
readProcArray.add(new ParseDate("DisplayType.DEFAULT_TIME_FORMAT"));
} else if (DisplayType.Integer == column.getAD_Reference_ID()) {
readProcArray.add(new ParseInt());
} else if (DisplayType.isNumeric(column.getAD_Reference_ID())) {
readProcArray.add(new ParseBigDecimal(new DecimalFormatSymbols(Language.getLoginLanguage().getLocale())));
} else if (DisplayType.YesNo == column.getAD_Reference_ID()) {
readProcArray.add(new ParseBool("y", "n"));
} else if (DisplayType.isText(column.getAD_Reference_ID())) {
readProcArray.add(new StrMinMax(1, column.getFieldLength()));
} else { // mandatory lookups
readProcArray.add(new StrNotNullOrEmpty());
}
} else {
if (DisplayType.Date == column.getAD_Reference_ID()) {
readProcArray.add(new Optional(new ParseDate(DisplayType.DEFAULT_DATE_FORMAT)));
} else if (DisplayType.DateTime == column.getAD_Reference_ID()) {
readProcArray.add(new Optional(new ParseDate(DisplayType.DEFAULT_TIMESTAMP_FORMAT)));
} else if (DisplayType.Time == column.getAD_Reference_ID()) {
readProcArray.add(new Optional(new ParseDate("DisplayType.DEFAULT_TIME_FORMAT")));
} else if (DisplayType.Integer == column.getAD_Reference_ID()) {
readProcArray.add(new Optional(new ParseInt()));
} else if (DisplayType.isNumeric(column.getAD_Reference_ID())) {
readProcArray.add(new Optional(new ParseBigDecimal(new DecimalFormatSymbols(Language.getLoginLanguage().getLocale()))));
} else if (DisplayType.YesNo == column.getAD_Reference_ID()) {
readProcArray.add(new Optional(new ParseBool("y", "n")));
} else if (DisplayType.isText(column.getAD_Reference_ID())) {
readProcArray.add(new Optional(new StrMinMax(1, column.getFieldLength())));
} else { // optional lookups and text
readProcArray.add(null);
}
}
}
CellProcessor[] processors = readProcArray.toArray(new CellProcessor[readProcArray.size()]);
m_isError = false;
// write the header
String rawHeader = mapReader.getUntokenizedRow();
errFileW.write(rawHeader + delimiter + ERROR_HEADER + "\n");
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
List<String> rawData = new ArrayList<String>();
// pre-process to check for errors
while (true) {
Map<String, Object> map = null;
boolean isLineError = false;
StringBuilder errMsg = new StringBuilder();
try {
map = mapReader.read(header, processors);
} catch (SuperCsvCellProcessorException e) {
int idx = e.getCsvContext().getColumnNumber() - 1;
errMsg.append(header[idx]).append(": ").append(e.getMessage());
isLineError = true;
}
String rawLine = mapReader.getUntokenizedRow();
if (! isLineError) {
if (map == null)
break;
for (Entry<String, Object> set : map.entrySet()) {
StringBuilder lineError = new StringBuilder();
String headName = set.getKey();
Object value = set.getValue();
log.fine("Setting " + headName + " to " + value);
String columnName = headName;
boolean isForeign = headName.indexOf("[") > 0 && headName.endsWith("]");
String foreignColumn = null;
if (isForeign) {
int end = headName.indexOf("[");
columnName = headName.substring(0, end);
int startf = headName.indexOf("[")+1;
int endf = headName.length()-1;
foreignColumn = headName.substring(startf, endf);
}
GridField field = gridTab.getField(columnName);
if (field == null) {
lineError.append(Msg.getMsg(Env.getCtx(), "NotAWindowField", new Object[] {headName}));
isLineError = true;
}
if (!isLineError && field.isReadOnly() && !field.isParentValue()) {
lineError.append(Msg.getMsg(Env.getCtx(), "FieldIsReadOnly", new Object[] {headName}));
isLineError = true;
}
if (!isLineError && ! ( field.isDisplayed() || field.isDisplayedGrid() )) {
lineError.append(Msg.getMsg(Env.getCtx(), "FieldNotDisplayed", new Object[] {headName}));
isLineError = true;
}
if (!isLineError) {
MColumn column = MColumn.get(Env.getCtx(), field.getAD_Column_ID());
if (isForeign) {
String foreignTable = column.getReferenceTableName();
String idS = null;
int id = -1;
if ("AD_Ref_List".equals(foreignTable)) {
idS = resolveForeignList(column, foreignColumn, value);
} else {
id = resolveForeign(foreignTable, foreignColumn, value);
}
if (idS == null && id < 0) {
lineError.append(Msg.getMsg(Env.getCtx(), "ForeignNotResolved", new Object[] {headName, value.toString()}));
isLineError = true;
}
} else {
// no validation here
// TODO: we could validate length of string or min/max
}
}
if (isLineError && lineError.length() > 0) {
if (errMsg.length() > 0)
errMsg.append(" / ");
errMsg.append(lineError);
}
}
}
if (isLineError && ! m_isError)
m_isError = true;
if (!m_isError) {
data.add(map);
rawData.add(rawLine);
}
// write
rawLine = rawLine + delimiter + quoteChar + errMsg.toString().replaceAll(quoteChar, "") + quoteChar + "\n";
errFileW.write(rawLine);
}
if (!m_isError) {
String logFileName = FileUtil.getTempMailName("Import_" + gridTab.getTableName(), "_log.csv");
logFile = new File(logFileName);
logFileW = new FileWriter(logFile, false);
// write the header
logFileW.write(rawHeader + delimiter + LOG_HEADER + "\n");
// no errors found - then process
for (int idx = 0; idx < data.size(); idx++) {
String rawLine = rawData.get(idx);
String trxName = null;
String logMsg = null;
Trx trx = null;
boolean error = false;
try {
trxName = "Import_" + gridTab.getTableName() + "_" + UUID.randomUUID();
trx = Trx.get(trxName, true);
Map<String, Object> map = data.get(idx);
gridTab.getTableModel().setImportingMode(true, trxName);
gridTab.dataNew(false);
for (String headName : header) {
if (headName == null)
continue;
Object value = map.get(headName);
String columnName = headName;
boolean isForeign = headName.indexOf("[") > 0 && headName.endsWith("]");
String foreignColumn = null;
if (isForeign) {
int end = headName.indexOf("[");
columnName = headName.substring(0, end);
int startf = headName.indexOf("[")+1;
int endf = headName.length()-1;
foreignColumn = headName.substring(startf, endf);
}
GridField field = gridTab.getField(columnName);
if (field.isParentValue())
continue;
MColumn column = MColumn.get(Env.getCtx(), field.getAD_Column_ID());
Object setValue = null;
if (isForeign) {
String foreignTable = column.getReferenceTableName();
if ("AD_Ref_List".equals(foreignTable)) {
String idS = resolveForeignList(column, foreignColumn, value);
setValue = idS;
} else {
int id = resolveForeign(foreignTable, foreignColumn, value);
setValue = id;
if (field.isParentValue()) {
int actualId = (Integer) field.getValue();
if (actualId != id) {
logMsg = Msg.getMsg(Env.getCtx(), "ParentCannotChange", new Object[] {headName});
error = true;
break;
}
}
}
} else {
if (value != null) {
if (value != null && value instanceof java.util.Date)
value = new Timestamp(((java.util.Date)value).getTime());
setValue = value;
}
}
if (value != null) {
if (field.isEditable(true)) {
gridTab.setValue(columnName, setValue);
} else {
logMsg = Msg.getMsg(Env.getCtx(), "FieldNotEditable", new Object[] {headName});
error = true;
break;
}
}
}
if (! error) {
if (gridTab.dataSave(false)) {
logMsg = Msg.getMsg(Env.getCtx(), "SuccessfullySaved", new Object[] {gridTab.getTableModel().getKeyID(gridTab.getCurrentRow())});
} else {
error = true;
ValueNamePair ppE = CLogger.retrieveWarning();
String info = null;
if (ppE != null)
info = ppE.getName();
if (info == null)
info = "";
logMsg = Msg.getMsg(Env.getCtx(), "Error") + " " + Msg.getMsg(Env.getCtx(), "SaveError") + " (" + info + ")";
gridTab.dataIgnore();
}
} else {
gridTab.dataIgnore();
}
} catch (Exception e) {
logMsg = Msg.getMsg(Env.getCtx(), "Error") + " " + e.getLocalizedMessage();
error = true;
} finally {
if (trx != null) {
if (error) {
trx.rollback();
} else {
trx.commit();
}
trx.close();
trx = null;
}
gridTab.getTableModel().setImportingMode(false, null);
}
// write
logMsg = logMsg.replaceAll(delimiter, "");
rawLine = rawLine + delimiter + quoteChar + logMsg + quoteChar + "\n";
logFileW.write(rawLine);
}
}
} catch (IOException e) {
throw new AdempiereException(e);
}
finally {
try {
if (mapReader != null)
mapReader.close();
if (errFileW != null) {
errFileW.flush();
errFileW.close();
}
if (logFileW != null) {
logFileW.flush();
logFileW.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
if (logFile != null)
return logFile;
else
return errFile;
}
private String resolveForeignList(MColumn column, String foreignColumn, Object value) {
String idS = null;
StringBuilder select = new StringBuilder("SELECT Value FROM AD_Ref_List WHERE ")
.append(foreignColumn).append("=? AND AD_Reference_ID=? AND IsActive='Y'");
idS = DB.getSQLValueStringEx(null, select.toString(), value, column.getAD_Reference_Value_ID());
return idS;
}
private int resolveForeign(String foreignTable, String foreignColumn, Object value) {
int id = -1;
StringBuilder select = new StringBuilder("SELECT ")
.append(foreignTable).append("_ID FROM ")
.append(foreignTable).append(" WHERE ")
.append(foreignColumn).append("=? AND IsActive='Y' AND AD_Client_ID=?");
id = DB.getSQLValueEx(null, select.toString(), value, Env.getAD_Client_ID(Env.getCtx()));
if (id == -1 && !"AD_Client".equals(foreignTable)) {
MTable ft = MTable.get(Env.getCtx(), foreignTable);
String accessLevel = ft.getAccessLevel();
if ( MTable.ACCESSLEVEL_All.equals(accessLevel)
|| MTable.ACCESSLEVEL_SystemOnly.equals(accessLevel)
|| MTable.ACCESSLEVEL_SystemPlusClient.equals(accessLevel)) {
// try System client if the table has System access
id = DB.getSQLValueEx(null, select.toString(), value, 0);
}
}
return id;
}
@Override
public String getFileExtension() {
return "csv";
}
@Override
public String getFileExtensionLabel() {
return Msg.getMsg(Env.getCtx(), "FileCSV");
}
@Override
public String getContentType() {
return "application/csv";
}
@Override
public String getSuggestedFileName(GridTab gridTab) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String dt = sdf.format(cal.getTime());
String localFile = "Import_" + gridTab.getTableName() + "_" + dt
+ (m_isError ? "_err" : "_log")
+ "." + getFileExtension();
return localFile;
}
}

View File

@ -177,4 +177,9 @@ public class GridTabExcelExporter extends AbstractExcelExporter implements IGrid
public String getContentType() {
return "application/vnd.ms-excel";
}
@Override
public String getSuggestedFileName(GridTab gridTab) {
return gridTab.getName() + "." + getFileExtension();
}
}

View File

@ -94,7 +94,7 @@ public class GridTable extends AbstractTableModel
/**
*
*/
private static final long serialVersionUID = 4648364477309024202L;
private static final long serialVersionUID = 2328810326636468776L;
public static final String DATA_REFRESH_MESSAGE = "Refreshed";
@ -2040,10 +2040,12 @@ public class GridTable extends AbstractTableModel
//
MTable table = MTable.get (m_ctx, m_AD_Table_ID);
PO po = null;
if (! m_importing) // Just use trx when importing
m_trxName = null;
if (Record_ID != -1)
po = table.getPO(Record_ID, null);
po = table.getPO(Record_ID, m_trxName);
else // Multi - Key
po = table.getPO(getWhereClause(rowData), null);
po = table.getPO(getWhereClause(rowData), m_trxName);
// No Persistent Object
if (po == null)
throw new ClassNotFoundException ("No Persistent Object");
@ -2374,6 +2376,10 @@ public class GridTable extends AbstractTableModel
/** LOB Info */
private ArrayList<PO_LOB> m_lobInfo = null;
// IDEMPIERE-454 Easy import
private boolean m_importing = false;
private String m_trxName = null;
/**
* Reset LOB info
*/
@ -3707,10 +3713,19 @@ public class GridTable extends AbstractTableModel
PO po = null;
int Record_ID = getKeyID(row);
if (Record_ID != -1)
po = table.getPO(Record_ID, null);
po = table.getPO(Record_ID, m_trxName);
else // Multi - Key
po = table.getPO(getWhereClause(getDataAtRow(row)), null);
po = table.getPO(getWhereClause(getDataAtRow(row)), m_trxName);
return po;
}
public void setImportingMode(boolean importing, String trxName) {
m_importing = importing;
m_trxName = trxName;
}
public boolean isImporting() {
return m_importing;
}
}

View File

@ -145,4 +145,9 @@ public class GridTab2PackExporter implements IGridTabExporter {
public String getContentType() {
return "application/zip";
}
@Override
public String getSuggestedFileName(GridTab gridTab) {
return gridTab.getName() + "." + getFileExtension();
}
}

View File

@ -59,7 +59,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
/**
*
*/
private static final long serialVersionUID = 904447827065380369L;
private static final long serialVersionUID = 3390505814516682801L;
private static final String BTNPREFIX = "Btn";
@ -85,7 +85,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
private ToolBarButton btnCustomize;
private ToolBarButton btnExport;
private ToolBarButton btnExport, btnFileImport;
private ToolBarButton btnProcess;
@ -186,6 +186,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
{
btnExport = createButton("Export", "Export", "Export");
}
btnFileImport = createButton("FileImport", "FileImport", "FileImport");
configureKeyMap();
@ -548,6 +549,15 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
btnExport.setDisabled(!b);
}
/**
* Enable/disable file import button
* @param b
*/
public void enableFileImport(boolean b) {
if (btnFileImport != null)
btnFileImport.setDisabled(!b);
}
private boolean ToolBarMenuRestictionLoaded = false;
public void updateToolBarAndMenuWithRestriction(int AD_Window_ID) {
if (ToolBarMenuRestictionLoaded)

View File

@ -58,6 +58,7 @@ import org.adempiere.webui.panel.InfoPanel;
import org.adempiere.webui.panel.WAttachment;
import org.adempiere.webui.panel.WDocActionPanel;
import org.adempiere.webui.panel.action.ExportAction;
import org.adempiere.webui.panel.action.FileImportAction;
import org.adempiere.webui.panel.action.ReportAction;
import org.adempiere.webui.part.AbstractUIPart;
import org.adempiere.webui.session.SessionManager;
@ -1202,12 +1203,14 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
// Confirm Warning
else if (e.isWarning() && !e.isConfirmed())
{
FDialog.warn(curWindowNo, null, e.getAD_Message(), e.getInfo());
e.setConfirmed(true); // show just once - if MTable.setCurrentRow is involved the status event is re-issued
if (! adTabbox.getSelectedGridTab().getTableModel().isImporting()) {
FDialog.warn(curWindowNo, null, e.getAD_Message(), e.getInfo());
e.setConfirmed(true); // show just once - if MTable.setCurrentRow is involved the status event is re-issued
}
}
boolean changed = e.isChanged() || e.isInserting();
boolean readOnly = tabPanel.getGridTab().isReadOnly();
boolean readOnly = adTabbox.getSelectedGridTab().isReadOnly();
boolean insertRecord = !readOnly;
if (!detailTab)
{
@ -1337,10 +1340,10 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
toolbar.enablePrint(adTabbox.getSelectedGridTab().isPrinted());
toolbar.enableReport(true);
toolbar.enableExport(!adTabbox.getSelectedGridTab().isSortTab());
toolbar.enableFileImport(!changed && !adTabbox.getSelectedGridTab().isSortTab() && adTabbox.getSelectedGridTab().isInsertRecord());
//Deepak-Enabling customize button IDEMPIERE-364
if(!(adTabbox.getSelectedTabpanel() instanceof ADSortTab))
toolbar.enableCustomize(((ADTabpanel)adTabbox.getSelectedTabpanel()).isGridView());
toolbar.enableCustomize(((ADTabpanel)adTabbox.getSelectedTabpanel()).isGridView() && !adTabbox.getSelectedGridTab().isSortTab());
toolbar.updateToolBarAndMenuWithRestriction(gridWindow.getAD_Window_ID());
}
@ -2155,6 +2158,12 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
action.export();
}
@Override
public void onFileImport() {
FileImportAction action = new FileImportAction(this);
action.fileImport();
}
/**************************************************************************
* Start Button Process
* @param vButton button

View File

@ -165,6 +165,11 @@ public interface ToolbarListener
*/
public void onExport();
/**
* File import data
*/
public void onFileImport();
/**
* Customize grid view.
*/

View File

@ -115,7 +115,7 @@ public class ExportAction implements EventListener<Event>
Hbox hb = new Hbox();
Div div = new Div();
div.setAlign("right");
div.appendChild(new Label("Files of Type: "));
div.appendChild(new Label(Msg.getMsg(Env.getCtx(), "FilesOfType")));
hb.appendChild(div);
hb.appendChild(cboType);
cboType.setWidth("100%");
@ -195,7 +195,7 @@ public class ExportAction implements EventListener<Event>
winExportFile.onClose();
winExportFile = null;
AMedia media = null;
media = new AMedia(panel.getActiveGridTab().getName() + "." + ext, null, exporter.getContentType(), file, true);
media = new AMedia(exporter.getSuggestedFileName(panel.getActiveGridTab()), null, exporter.getContentType(), file, true);
Filedownload.save(media, panel.getActiveGridTab().getName() + "." + ext);
} catch (Exception e) {
throw new AdempiereException(e);

View File

@ -0,0 +1,277 @@
/******************************************************************************
* Product: iDempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012 Trek Global *
* Copyright (C) 2012 Carlos Ruiz *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.adempiere.webui.panel.action;
import java.io.File;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.adempiere.base.IGridTabImporter;
import org.adempiere.base.Service;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.webui.adwindow.AbstractADWindowContent;
import org.adempiere.webui.adwindow.IADTabbox;
import org.adempiere.webui.adwindow.IADTabpanel;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.ConfirmPanel;
import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.ListItem;
import org.adempiere.webui.component.Listbox;
import org.adempiere.webui.component.Window;
import org.adempiere.webui.util.ReaderInputStream;
import org.adempiere.webui.window.FDialog;
import org.compiere.model.GridTab;
import org.compiere.util.Env;
import org.compiere.util.Ini;
import org.compiere.util.Msg;
import org.zkoss.util.media.AMedia;
import org.zkoss.util.media.Media;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.UploadEvent;
import org.zkoss.zul.Div;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Vbox;
/**
*
* @author Carlos Ruiz
*
*/
public class FileImportAction implements EventListener<Event>
{
private AbstractADWindowContent panel;
private Map<String, IGridTabImporter> importerMap = null;
private Map<String, String> extensionMap = null;
private Window winImportFile = null;
private ConfirmPanel confirmPanel = new ConfirmPanel(true);
private Listbox cboType = new Listbox();
private Button bFile = new Button();
private Listbox fCharset = new Listbox();
private InputStream m_file_istream = null;
/**
* @param panel
*/
public FileImportAction(AbstractADWindowContent panel)
{
this.panel = panel;
}
/**
* execute import action
*/
public void fileImport()
{
// charset
Charset[] charsets = Ini.getAvailableCharsets();
for (int i = 0; i < charsets.length; i++)
fCharset.appendItem(charsets[i].displayName(), charsets[i]);
Charset charset = Ini.getCharset();
for (int i = 0; i < fCharset.getItemCount(); i++)
{
ListItem listitem = fCharset.getItemAtIndex(i);
Charset compare = (Charset)listitem.getValue();
if (charset == compare)
{
fCharset.setSelectedIndex(i);
break;
}
}
// TODO: change the streamreader when changing the charset
// fCharset.addEventListener(Events.ON_SELECT, this);
importerMap = new HashMap<String, IGridTabImporter>();
extensionMap = new HashMap<String, String>();
List<IGridTabImporter> importerList = Service.list(IGridTabImporter.class);
for(IGridTabImporter importer : importerList)
{
String extension = importer.getFileExtension();
if (!extensionMap.containsKey(extension))
{
extensionMap.put(extension, importer.getFileExtensionLabel());
importerMap.put(extension, importer);
}
}
if (winImportFile == null)
{
winImportFile = new Window();
winImportFile.setTitle(Msg.getMsg(Env.getCtx(), "FileImport") + ": " + panel.getActiveGridTab().getName());
winImportFile.setWidth("450px");
winImportFile.setClosable(true);
winImportFile.setBorder("normal");
winImportFile.setStyle("position:absolute");
cboType.setMold("select");
cboType.getItems().clear();
for(Map.Entry<String, String> entry : extensionMap.entrySet())
{
cboType.appendItem(entry.getKey() + " - " + entry.getValue(), entry.getKey());
}
cboType.setSelectedIndex(0);
Vbox vb = new Vbox();
vb.setWidth("100%");
winImportFile.appendChild(vb);
Hbox hb = new Hbox();
Div div = new Div();
div.setAlign("right");
div.appendChild(new Label(Msg.getMsg(Env.getCtx(), "FilesOfType")));
hb.appendChild(div);
hb.appendChild(cboType);
cboType.setWidth("100%");
vb.appendChild(hb);
hb = new Hbox();
bFile.setLabel(Msg.getMsg(Env.getCtx(), "FileImportFile"));
bFile.setTooltiptext(Msg.getMsg(Env.getCtx(), "FileImportFileInfo"));
bFile.setUpload("true");
bFile.addEventListener(Events.ON_UPLOAD, this);
hb.appendChild(bFile);
vb.appendChild(hb);
hb = new Hbox();
fCharset.setMold("select");
fCharset.setRows(0);
fCharset.setTooltiptext(Msg.getMsg(Env.getCtx(), "Charset", false));
hb.appendChild(fCharset);
vb.appendChild(hb);
vb.appendChild(confirmPanel);
confirmPanel.addActionListener(this);
}
winImportFile.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
AEnv.showWindow(winImportFile);
}
@Override
public void onEvent(Event event) throws Exception {
if (event instanceof UploadEvent)
{
UploadEvent ue = (UploadEvent) event;
processUploadMedia(ue.getMedia());
} else if (event.getTarget().getId().equals(ConfirmPanel.A_CANCEL)) {
winImportFile.onClose();
}
else if (event.getTarget().getId().equals(ConfirmPanel.A_OK)) {
// TODO: Verify that file and charset are mandatory
importFile();
}
}
private void processUploadMedia(Media media) {
if (media == null)
return;
if (media.isBinary()) {
m_file_istream = media.getStreamData();
}
else {
ListItem listitem = fCharset.getSelectedItem();
if (listitem == null) {
m_file_istream = new ReaderInputStream(media.getReaderData());
} else {
Charset charset = (Charset)listitem.getValue();
m_file_istream = new ReaderInputStream(media.getReaderData(), charset.name());
}
}
bFile.setLabel(media.getName());
}
private void importFile() {
try {
ListItem li = cboType.getSelectedItem();
if(li == null || li.getValue() == null)
{
FDialog.error(0, winImportFile, "FileInvalidExtension");
return;
}
String ext = li.getValue().toString();
IGridTabImporter importer = importerMap.get(ext);
if (importer == null)
{
FDialog.error(0, winImportFile, "FileInvalidExtension");
return;
}
IADTabbox adTab = panel.getADTab();
int selected = adTab.getSelectedIndex();
int tabLevel = panel.getActiveGridTab().getTabLevel();
Set<String> tables = new HashSet<String>();
List<GridTab> childs = new ArrayList<GridTab>();
List<GridTab> includedList = panel.getActiveGridTab().getIncludedTabs();
for(GridTab included : includedList)
{
String tableName = included.getTableName();
if (tables.contains(tableName))
continue;
tables.add(tableName);
childs.add(included);
}
for(int i = selected+1; i < adTab.getTabCount(); i++)
{
IADTabpanel adTabPanel = adTab.getADTabpanel(i);
if (adTabPanel.getGridTab().isSortTab())
continue;
if (adTabPanel.getGridTab().getTabLevel() <= tabLevel)
break;
String tableName = adTabPanel.getGridTab().getTableName();
if (tables.contains(tableName))
continue;
tables.add(tableName);
childs.add(adTabPanel.getGridTab());
}
ListItem listitem = fCharset.getSelectedItem();
Charset charset = null;
if (listitem == null)
return;
charset = (Charset)listitem.getValue();
File outFile = importer.fileImport(panel.getActiveGridTab(), childs, m_file_istream, charset);
winImportFile.onClose();
winImportFile = null;
AMedia media = null;
media = new AMedia(importer.getSuggestedFileName(panel.getActiveGridTab()), null, importer.getContentType(), outFile, true);
Filedownload.save(media, panel.getActiveGridTab().getName() + "." + ext);
} catch (Exception e) {
throw new AdempiereException(e);
} finally {
if (winImportFile != null)
winImportFile.onClose();
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB