IDEMPIERE-454 Easy import / v1 -> Exporter - export data from 1 tab / Importer - allow insert in 1 tab
This commit is contained in:
parent
95622fc317
commit
066f24162e
|
@ -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
|
||||||
|
;
|
||||||
|
|
|
@ -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
|
||||||
|
;
|
||||||
|
|
|
@ -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.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.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.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.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-point id="org.compiere.model.Callout" name="Callout" schema="schema/org.compiere.model.Callout.exsd"/>
|
||||||
<extension
|
<extension
|
||||||
|
@ -51,6 +52,15 @@
|
||||||
priority="0">
|
priority="0">
|
||||||
</exporter>
|
</exporter>
|
||||||
</extension>
|
</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
|
<extension
|
||||||
id="org.adempiere.base.ModelGeneratorApplication"
|
id="org.adempiere.base.ModelGeneratorApplication"
|
||||||
name="Model Generator"
|
name="Model Generator"
|
||||||
|
|
|
@ -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>
|
||||||
|
<pre>
|
||||||
|
<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>
|
||||||
|
</pre>
|
||||||
|
</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>
|
|
@ -48,4 +48,9 @@ public interface IGridTabExporter {
|
||||||
* @return mime type
|
* @return mime type
|
||||||
*/
|
*/
|
||||||
public String getContentType();
|
public String getContentType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return suggested file name
|
||||||
|
*/
|
||||||
|
public String getSuggestedFileName(GridTab gridTab);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
|
@ -17,6 +17,7 @@ package org.adempiere.impexp;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -25,6 +26,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.adempiere.base.IGridTabExporter;
|
import org.adempiere.base.IGridTabExporter;
|
||||||
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.adempiere.model.MTabCustomization;
|
import org.adempiere.model.MTabCustomization;
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
import org.compiere.model.GridTab;
|
import org.compiere.model.GridTab;
|
||||||
|
@ -77,7 +79,9 @@ public class GridTabCSVExporter implements IGridTabExporter
|
||||||
} else if (DisplayType.Time == column.getAD_Reference_ID()) {
|
} else if (DisplayType.Time == column.getAD_Reference_ID()) {
|
||||||
procArray.add(new Optional(new FmtDate("DisplayType.DEFAULT_TIME_FORMAT")));
|
procArray.add(new Optional(new FmtDate("DisplayType.DEFAULT_TIME_FORMAT")));
|
||||||
} else if (DisplayType.Integer == column.getAD_Reference_ID() || DisplayType.isNumeric(column.getAD_Reference_ID())) {
|
} 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()) {
|
} else if (DisplayType.YesNo == column.getAD_Reference_ID()) {
|
||||||
procArray.add(new Optional(new FmtBool("Y", "N")));
|
procArray.add(new Optional(new FmtBool("Y", "N")));
|
||||||
} else { // lookups and text
|
} else { // lookups and text
|
||||||
|
@ -110,7 +114,7 @@ public class GridTabCSVExporter implements IGridTabExporter
|
||||||
mapWriter.write(row, header, processors);
|
mapWriter.write(row, header, processors);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
throw new AdempiereException(e);
|
||||||
} finally {
|
} finally {
|
||||||
if (mapWriter != null) {
|
if (mapWriter != null) {
|
||||||
try {
|
try {
|
||||||
|
@ -125,7 +129,7 @@ public class GridTabCSVExporter implements IGridTabExporter
|
||||||
|
|
||||||
private Object resolveValue(GridTab gridTab, MTable table, MColumn column, int i, String headName) {
|
private Object resolveValue(GridTab gridTab, MTable table, MColumn column, int i, String headName) {
|
||||||
Object value = null;
|
Object value = null;
|
||||||
if (headName.contains("[") && headName.endsWith("]")) {
|
if (headName.indexOf("[") >= 0 && headName.endsWith("]")) {
|
||||||
String foreignTable = column.getReferenceTableName();
|
String foreignTable = column.getReferenceTableName();
|
||||||
Object idO = gridTab.getValue(i, column.getColumnName());
|
Object idO = gridTab.getValue(i, column.getColumnName());
|
||||||
if (idO != null) {
|
if (idO != null) {
|
||||||
|
@ -157,12 +161,14 @@ public class GridTabCSVExporter implements IGridTabExporter
|
||||||
String foreignTable = column.getReferenceTableName();
|
String foreignTable = column.getReferenceTableName();
|
||||||
if ( ! ("AD_Language".equals(foreignTable) || "AD_EntityType".equals(foreignTable))) {
|
if ( ! ("AD_Language".equals(foreignTable) || "AD_EntityType".equals(foreignTable))) {
|
||||||
MTable fTable = MTable.get(Env.getCtx(), 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
|
// 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))
|
if (! ("AD_Org".equals(foreignTable) || "AD_User".equals(foreignTable) || "AD_Ref_List".equals(foreignTable))
|
||||||
&& fTable.getColumn("Value") != null) {
|
&& fTable.getColumn("Value") != null) {
|
||||||
name.append("[Value]"); // fully qualified
|
name.append("[Value]"); // fully qualified
|
||||||
} else if (fTable.getColumn("Name") != null) {
|
} else if (fTable.getColumn("Name") != null) {
|
||||||
name.append("[Name]");
|
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[] customComponent = custom.split(";");
|
||||||
String[] fieldIds = customComponent[0].split("[,]");
|
String[] fieldIds = customComponent[0].split("[,]");
|
||||||
List<GridField> fieldList = new ArrayList<GridField>();
|
List<GridField> fieldList = new ArrayList<GridField>();
|
||||||
for(String fieldIdStr : fieldIds)
|
for (String fieldIdStr : fieldIds)
|
||||||
{
|
{
|
||||||
fieldIdStr = fieldIdStr.trim();
|
fieldIdStr = fieldIdStr.trim();
|
||||||
if (fieldIdStr.length() == 0) continue;
|
if (fieldIdStr.length() == 0) continue;
|
||||||
int AD_Field_ID = Integer.parseInt(fieldIdStr);
|
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.getAD_Field_ID() == AD_Field_ID)
|
||||||
{
|
{
|
||||||
if(gridField.isDisplayedGrid())
|
if (!gridField.isReadOnly() && gridField.isDisplayedGrid())
|
||||||
fieldList.add(gridField);
|
fieldList.add(gridField);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -219,9 +225,11 @@ public class GridTabCSVExporter implements IGridTabExporter
|
||||||
{
|
{
|
||||||
ArrayList<GridField> gridFieldList = new ArrayList<GridField>();
|
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);
|
gridFieldList.add(field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,19 +246,9 @@ public class GridTabCSVExporter implements IGridTabExporter
|
||||||
return gridFields;
|
return gridFields;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isColumnPrinted(GridTab tab, int col)
|
@Override
|
||||||
{
|
public String getSuggestedFileName(GridTab gridTab) {
|
||||||
GridField field = tab.getField(col);
|
return "Export_" + gridTab.getTableName() + "." + getFileExtension();
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -177,4 +177,9 @@ public class GridTabExcelExporter extends AbstractExcelExporter implements IGrid
|
||||||
public String getContentType() {
|
public String getContentType() {
|
||||||
return "application/vnd.ms-excel";
|
return "application/vnd.ms-excel";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuggestedFileName(GridTab gridTab) {
|
||||||
|
return gridTab.getName() + "." + getFileExtension();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
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);
|
MTable table = MTable.get (m_ctx, m_AD_Table_ID);
|
||||||
PO po = null;
|
PO po = null;
|
||||||
|
if (! m_importing) // Just use trx when importing
|
||||||
|
m_trxName = null;
|
||||||
if (Record_ID != -1)
|
if (Record_ID != -1)
|
||||||
po = table.getPO(Record_ID, null);
|
po = table.getPO(Record_ID, m_trxName);
|
||||||
else // Multi - Key
|
else // Multi - Key
|
||||||
po = table.getPO(getWhereClause(rowData), null);
|
po = table.getPO(getWhereClause(rowData), m_trxName);
|
||||||
// No Persistent Object
|
// No Persistent Object
|
||||||
if (po == null)
|
if (po == null)
|
||||||
throw new ClassNotFoundException ("No Persistent Object");
|
throw new ClassNotFoundException ("No Persistent Object");
|
||||||
|
@ -2374,6 +2376,10 @@ public class GridTable extends AbstractTableModel
|
||||||
/** LOB Info */
|
/** LOB Info */
|
||||||
private ArrayList<PO_LOB> m_lobInfo = null;
|
private ArrayList<PO_LOB> m_lobInfo = null;
|
||||||
|
|
||||||
|
// IDEMPIERE-454 Easy import
|
||||||
|
private boolean m_importing = false;
|
||||||
|
private String m_trxName = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset LOB info
|
* Reset LOB info
|
||||||
*/
|
*/
|
||||||
|
@ -3707,10 +3713,19 @@ public class GridTable extends AbstractTableModel
|
||||||
PO po = null;
|
PO po = null;
|
||||||
int Record_ID = getKeyID(row);
|
int Record_ID = getKeyID(row);
|
||||||
if (Record_ID != -1)
|
if (Record_ID != -1)
|
||||||
po = table.getPO(Record_ID, null);
|
po = table.getPO(Record_ID, m_trxName);
|
||||||
else // Multi - Key
|
else // Multi - Key
|
||||||
po = table.getPO(getWhereClause(getDataAtRow(row)), null);
|
po = table.getPO(getWhereClause(getDataAtRow(row)), m_trxName);
|
||||||
return po;
|
return po;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setImportingMode(boolean importing, String trxName) {
|
||||||
|
m_importing = importing;
|
||||||
|
m_trxName = trxName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isImporting() {
|
||||||
|
return m_importing;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -145,4 +145,9 @@ public class GridTab2PackExporter implements IGridTabExporter {
|
||||||
public String getContentType() {
|
public String getContentType() {
|
||||||
return "application/zip";
|
return "application/zip";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSuggestedFileName(GridTab gridTab) {
|
||||||
|
return gridTab.getName() + "." + getFileExtension();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
private static final String BTNPREFIX = "Btn";
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
|
||||||
|
|
||||||
private ToolBarButton btnCustomize;
|
private ToolBarButton btnCustomize;
|
||||||
|
|
||||||
private ToolBarButton btnExport;
|
private ToolBarButton btnExport, btnFileImport;
|
||||||
|
|
||||||
private ToolBarButton btnProcess;
|
private ToolBarButton btnProcess;
|
||||||
|
|
||||||
|
@ -186,6 +186,7 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
|
||||||
{
|
{
|
||||||
btnExport = createButton("Export", "Export", "Export");
|
btnExport = createButton("Export", "Export", "Export");
|
||||||
}
|
}
|
||||||
|
btnFileImport = createButton("FileImport", "FileImport", "FileImport");
|
||||||
|
|
||||||
configureKeyMap();
|
configureKeyMap();
|
||||||
|
|
||||||
|
@ -548,6 +549,15 @@ public class ADWindowToolbar extends FToolbar implements EventListener<Event>
|
||||||
btnExport.setDisabled(!b);
|
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;
|
private boolean ToolBarMenuRestictionLoaded = false;
|
||||||
public void updateToolBarAndMenuWithRestriction(int AD_Window_ID) {
|
public void updateToolBarAndMenuWithRestriction(int AD_Window_ID) {
|
||||||
if (ToolBarMenuRestictionLoaded)
|
if (ToolBarMenuRestictionLoaded)
|
||||||
|
|
|
@ -58,6 +58,7 @@ import org.adempiere.webui.panel.InfoPanel;
|
||||||
import org.adempiere.webui.panel.WAttachment;
|
import org.adempiere.webui.panel.WAttachment;
|
||||||
import org.adempiere.webui.panel.WDocActionPanel;
|
import org.adempiere.webui.panel.WDocActionPanel;
|
||||||
import org.adempiere.webui.panel.action.ExportAction;
|
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.panel.action.ReportAction;
|
||||||
import org.adempiere.webui.part.AbstractUIPart;
|
import org.adempiere.webui.part.AbstractUIPart;
|
||||||
import org.adempiere.webui.session.SessionManager;
|
import org.adempiere.webui.session.SessionManager;
|
||||||
|
@ -1202,12 +1203,14 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
||||||
// Confirm Warning
|
// Confirm Warning
|
||||||
else if (e.isWarning() && !e.isConfirmed())
|
else if (e.isWarning() && !e.isConfirmed())
|
||||||
{
|
{
|
||||||
FDialog.warn(curWindowNo, null, e.getAD_Message(), e.getInfo());
|
if (! adTabbox.getSelectedGridTab().getTableModel().isImporting()) {
|
||||||
e.setConfirmed(true); // show just once - if MTable.setCurrentRow is involved the status event is re-issued
|
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 changed = e.isChanged() || e.isInserting();
|
||||||
boolean readOnly = tabPanel.getGridTab().isReadOnly();
|
boolean readOnly = adTabbox.getSelectedGridTab().isReadOnly();
|
||||||
boolean insertRecord = !readOnly;
|
boolean insertRecord = !readOnly;
|
||||||
if (!detailTab)
|
if (!detailTab)
|
||||||
{
|
{
|
||||||
|
@ -1337,10 +1340,10 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
||||||
toolbar.enablePrint(adTabbox.getSelectedGridTab().isPrinted());
|
toolbar.enablePrint(adTabbox.getSelectedGridTab().isPrinted());
|
||||||
toolbar.enableReport(true);
|
toolbar.enableReport(true);
|
||||||
toolbar.enableExport(!adTabbox.getSelectedGridTab().isSortTab());
|
toolbar.enableExport(!adTabbox.getSelectedGridTab().isSortTab());
|
||||||
|
toolbar.enableFileImport(!changed && !adTabbox.getSelectedGridTab().isSortTab() && adTabbox.getSelectedGridTab().isInsertRecord());
|
||||||
|
|
||||||
//Deepak-Enabling customize button IDEMPIERE-364
|
//Deepak-Enabling customize button IDEMPIERE-364
|
||||||
if(!(adTabbox.getSelectedTabpanel() instanceof ADSortTab))
|
toolbar.enableCustomize(((ADTabpanel)adTabbox.getSelectedTabpanel()).isGridView() && !adTabbox.getSelectedGridTab().isSortTab());
|
||||||
toolbar.enableCustomize(((ADTabpanel)adTabbox.getSelectedTabpanel()).isGridView());
|
|
||||||
toolbar.updateToolBarAndMenuWithRestriction(gridWindow.getAD_Window_ID());
|
toolbar.updateToolBarAndMenuWithRestriction(gridWindow.getAD_Window_ID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2155,6 +2158,12 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
||||||
action.export();
|
action.export();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFileImport() {
|
||||||
|
FileImportAction action = new FileImportAction(this);
|
||||||
|
action.fileImport();
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* Start Button Process
|
* Start Button Process
|
||||||
* @param vButton button
|
* @param vButton button
|
||||||
|
|
|
@ -165,6 +165,11 @@ public interface ToolbarListener
|
||||||
*/
|
*/
|
||||||
public void onExport();
|
public void onExport();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File import data
|
||||||
|
*/
|
||||||
|
public void onFileImport();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Customize grid view.
|
* Customize grid view.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -115,7 +115,7 @@ public class ExportAction implements EventListener<Event>
|
||||||
Hbox hb = new Hbox();
|
Hbox hb = new Hbox();
|
||||||
Div div = new Div();
|
Div div = new Div();
|
||||||
div.setAlign("right");
|
div.setAlign("right");
|
||||||
div.appendChild(new Label("Files of Type: "));
|
div.appendChild(new Label(Msg.getMsg(Env.getCtx(), "FilesOfType")));
|
||||||
hb.appendChild(div);
|
hb.appendChild(div);
|
||||||
hb.appendChild(cboType);
|
hb.appendChild(cboType);
|
||||||
cboType.setWidth("100%");
|
cboType.setWidth("100%");
|
||||||
|
@ -195,7 +195,7 @@ public class ExportAction implements EventListener<Event>
|
||||||
winExportFile.onClose();
|
winExportFile.onClose();
|
||||||
winExportFile = null;
|
winExportFile = null;
|
||||||
AMedia media = 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);
|
Filedownload.save(media, panel.getActiveGridTab().getName() + "." + ext);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new AdempiereException(e);
|
throw new AdempiereException(e);
|
||||||
|
|
|
@ -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 |
Loading…
Reference in New Issue