IDEMPIERE-378 Implement Reverse Accrual
This commit is contained in:
parent
4993ffe5bf
commit
6bdc0b187e
|
@ -0,0 +1,135 @@
|
||||||
|
-- Nov 12, 2012 6:10:19 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference (AD_Reference_UU,Name,EntityType,IsOrderByValue,AD_Reference_ID,ValidationType,AD_Org_ID,Created,UpdatedBy,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('9a238b56-6113-430b-969d-c72f023d059d','M_MatchPO','D','N',200017,'T',0,TO_DATE('2012-11-12 18:10:15','YYYY-MM-DD HH24:MI:SS'),100,0,100,TO_DATE('2012-11-12 18:10:15','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:10:19 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference_Trl (AD_Language,AD_Reference_ID, Help,Name,Description, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Reference_Trl_UU ) SELECT l.AD_Language,t.AD_Reference_ID, t.Help,t.Name,t.Description, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Reference t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Reference_ID=200017 AND NOT EXISTS (SELECT * FROM AD_Reference_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Reference_ID=t.AD_Reference_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:11:40 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Ref_Table (IsValueDisplayed,OrderByClause,AD_Key,AD_Display,Updated,EntityType,AD_Reference_ID,AD_Client_ID,UpdatedBy,AD_Table_ID,AD_Org_ID,AD_Ref_Table_UU,CreatedBy,Created,IsActive) VALUES ('N','M_MatchPO.DocumentNo',6513,13087,TO_DATE('2012-11-12 18:11:40','YYYY-MM-DD HH24:MI:SS'),'D',200017,0,100,473,0,'f2683800-01e3-47fd-85ea-2a1bb1a8ab48',100,TO_DATE('2012-11-12 18:11:40','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:12:28 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column (IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,Created,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,IsActive,CreatedBy,Updated,AD_Org_ID,UpdatedBy,AD_Client_ID,AD_Column_ID,IsToolbarButton,SeqNoSelection) VALUES ('N','N',1,473,'D',200017,'N','N','N',0,'N',10,'N',18,'N',53457,TO_DATE('2012-11-12 18:12:26','YYYY-MM-DD HH24:MI:SS'),'N','Y','104c1cef-5cc1-436d-aa8a-548e66b2469f','Y','N','Reversal_ID','ID of document reversal','Reversal ID','N','Y',100,TO_DATE('2012-11-12 18:12:26','YYYY-MM-DD HH24:MI:SS'),0,100,0,200880,'N',0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:12:28 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200880 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:12:36 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
ALTER TABLE M_MatchPO ADD Reversal_ID NUMBER(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:14:15 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference (AD_Reference_UU,Name,EntityType,IsOrderByValue,AD_Reference_ID,ValidationType,AD_Org_ID,Created,UpdatedBy,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('a8cf3824-9f18-4d6b-802e-3412a8954a00','M_MatchInv','D','N',200018,'T',0,TO_DATE('2012-11-12 18:14:13','YYYY-MM-DD HH24:MI:SS'),100,0,100,TO_DATE('2012-11-12 18:14:13','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:14:15 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference_Trl (AD_Language,AD_Reference_ID, Help,Name,Description, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Reference_Trl_UU ) SELECT l.AD_Language,t.AD_Reference_ID, t.Help,t.Name,t.Description, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Reference t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Reference_ID=200018 AND NOT EXISTS (SELECT * FROM AD_Reference_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Reference_ID=t.AD_Reference_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:14:53 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Ref_Table (IsValueDisplayed,OrderByClause,AD_Key,AD_Display,Updated,EntityType,AD_Reference_ID,AD_Client_ID,UpdatedBy,AD_Table_ID,AD_Org_ID,AD_Ref_Table_UU,CreatedBy,Created,IsActive) VALUES ('N','M_MatchInv.DocumentNo',6497,13086,TO_DATE('2012-11-12 18:14:53','YYYY-MM-DD HH24:MI:SS'),'D',200018,0,100,472,0,'24adae8f-5c79-4cae-b407-3ca6fba3c375',100,TO_DATE('2012-11-12 18:14:53','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:16:04 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column (IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,Created,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,IsActive,CreatedBy,Updated,AD_Org_ID,UpdatedBy,AD_Client_ID,AD_Column_ID,IsToolbarButton,SeqNoSelection) VALUES ('N','N',1,472,'D',200018,'N','N','N',0,'N',10,'N',18,'N',53457,TO_DATE('2012-11-12 18:16:03','YYYY-MM-DD HH24:MI:SS'),'N','Y','62823c9e-b2c1-46e2-9157-80a1338d0b71','Y','N','Reversal_ID','ID of document reversal','Reversal ID','Y','Y',100,TO_DATE('2012-11-12 18:16:03','YYYY-MM-DD HH24:MI:SS'),0,100,0,200881,'N',0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:16:04 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200881 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:16:10 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
ALTER TABLE M_MatchInv ADD Reversal_ID NUMBER(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:19:34 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column (IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,Created,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,IsActive,CreatedBy,Updated,AD_Org_ID,UpdatedBy,AD_Client_ID,AD_Column_ID,IsToolbarButton,SeqNoSelection) VALUES ('N','N',1,735,'D',323,'N','N','N',0,'N',10,'N',18,'N',53457,TO_DATE('2012-11-12 18:19:33','YYYY-MM-DD HH24:MI:SS'),'N','Y','f8c0678b-cdcc-41b2-8ccf-b7e5bba6c5a1','Y','N','Reversal_ID','ID of document reversal','Reversal ID','Y','Y',100,TO_DATE('2012-11-12 18:19:33','YYYY-MM-DD HH24:MI:SS'),0,100,0,200882,'N',0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:19:34 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200882 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:19:39 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
ALTER TABLE C_AllocationHdr ADD Reversal_ID NUMBER(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:24:58 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process (CopyFromProcess,AD_Process_ID,IsDirectPrint,IsReport,AD_Process_UU,AccessLevel,IsBetaFunctionality,IsServerProcess,Statistic_Seconds,Statistic_Count,ShowHelp,EntityType,Classname,Name,AD_Client_ID,UpdatedBy,Updated,CreatedBy,Value,AD_Org_ID,Created,IsActive) VALUES ('N',200016,'N','N','c3c3698b-82ca-4686-9d92-0ffc83c10bf6','3','N','N',0,0,'Y','D','org.adempiere.process.MatchPOReverse','Reverse MatchPO',0,100,TO_DATE('2012-11-12 18:24:56','YYYY-MM-DD HH24:MI:SS'),100,'M_MatchPO_Reversal',0,TO_DATE('2012-11-12 18:24:56','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:24:58 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process_Trl (AD_Language,AD_Process_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Process_Trl_UU ) SELECT l.AD_Language,t.AD_Process_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Process t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_ID=200016 AND NOT EXISTS (SELECT * FROM AD_Process_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_ID=t.AD_Process_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:26:45 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process (CopyFromProcess,AD_Process_ID,IsDirectPrint,IsReport,AD_Process_UU,AccessLevel,IsBetaFunctionality,IsServerProcess,Statistic_Seconds,Statistic_Count,ShowHelp,EntityType,Classname,Name,AD_Client_ID,UpdatedBy,Updated,CreatedBy,Value,AD_Org_ID,Created,IsActive) VALUES ('N',200017,'N','N','bbb372e3-138e-4425-9f8c-bfbd1e73a666','3','N','N',0,0,'Y','D','org.adempiere.process.MatchInvReverse','Reverse MatchInv',0,100,TO_DATE('2012-11-12 18:26:44','YYYY-MM-DD HH24:MI:SS'),100,'M_MatchInv_Reversal',0,TO_DATE('2012-11-12 18:26:44','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:26:45 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process_Trl (AD_Language,AD_Process_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Process_Trl_UU ) SELECT l.AD_Language,t.AD_Process_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Process t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_ID=200017 AND NOT EXISTS (SELECT * FROM AD_Process_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_ID=t.AD_Process_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:30:55 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton (Action,AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',408,10,200017,200069,TO_DATE('2012-11-12 18:30:54','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse Invoice Matching',0,'08eda454-bcb1-4c57-83e4-97212206a7bc','ReverseMatchInv',TO_DATE('2012-11-12 18:30:54','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:31:40 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process SET Name='Reverse Invoice Matching',Updated=TO_DATE('2012-11-12 18:31:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200017
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:31:40 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process_Trl SET IsTranslated='N' WHERE AD_Process_ID=200017
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:32:43 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton (Action,AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',409,10,200016,200070,TO_DATE('2012-11-12 18:32:42','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse PO Matching',0,'1ef6e3e8-8997-4242-9715-58d07afe4e08','ReverseMatchPO',TO_DATE('2012-11-12 18:32:42','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:34:00 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process SET Name='Reverse PO Matching',Updated=TO_DATE('2012-11-12 18:34:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200016
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:34:00 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process_Trl SET IsTranslated='N' WHERE AD_Process_ID=200016
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:36:32 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton (Action,AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',690,10,200017,200071,TO_DATE('2012-11-12 18:36:31','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse Invoice Matching',0,'00811a39-21a6-4c51-b5f1-299bd6f595b1','ReverseMatchInv',TO_DATE('2012-11-12 18:36:31','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:37:50 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton (Action,AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',692,10,200016,200072,TO_DATE('2012-11-12 18:37:49','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse PO Matching',0,'99e7e98d-a600-4174-9b55-923b790d03ba','ReverseMatchPO',TO_DATE('2012-11-12 18:37:49','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
-- Nov 12, 2012 6:10:19 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference (AD_Reference_UU,Name,EntityType,IsOrderByValue,AD_Reference_ID,ValidationType,AD_Org_ID,Created,UpdatedBy,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('9a238b56-6113-430b-969d-c72f023d059d','M_MatchPO','D','N',200017,'T',0,TO_TIMESTAMP('2012-11-12 18:10:15','YYYY-MM-DD HH24:MI:SS'),100,0,100,TO_TIMESTAMP('2012-11-12 18:10:15','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:10:19 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference_Trl (AD_Language,AD_Reference_ID, Help,Name,Description, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Reference_Trl_UU ) SELECT l.AD_Language,t.AD_Reference_ID, t.Help,t.Name,t.Description, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Reference t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Reference_ID=200017 AND NOT EXISTS (SELECT * FROM AD_Reference_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Reference_ID=t.AD_Reference_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:11:40 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Ref_Table (IsValueDisplayed,OrderByClause,AD_Key,AD_Display,Updated,EntityType,AD_Reference_ID,AD_Client_ID,UpdatedBy,AD_Table_ID,AD_Org_ID,AD_Ref_Table_UU,CreatedBy,Created,IsActive) VALUES ('N','M_MatchPO.DocumentNo',6513,13087,TO_TIMESTAMP('2012-11-12 18:11:40','YYYY-MM-DD HH24:MI:SS'),'D',200017,0,100,473,0,'f2683800-01e3-47fd-85ea-2a1bb1a8ab48',100,TO_TIMESTAMP('2012-11-12 18:11:40','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:12:28 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column (IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,Created,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,IsActive,CreatedBy,Updated,AD_Org_ID,UpdatedBy,AD_Client_ID,AD_Column_ID,IsToolbarButton,SeqNoSelection) VALUES ('N','N',1,473,'D',200017,'N','N','N',0,'N',10,'N',18,'N',53457,TO_TIMESTAMP('2012-11-12 18:12:26','YYYY-MM-DD HH24:MI:SS'),'N','Y','104c1cef-5cc1-436d-aa8a-548e66b2469f','Y','N','Reversal_ID','ID of document reversal','Reversal ID','N','Y',100,TO_TIMESTAMP('2012-11-12 18:12:26','YYYY-MM-DD HH24:MI:SS'),0,100,0,200880,'N',0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:12:28 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200880 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:12:36 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
ALTER TABLE M_MatchPO ADD COLUMN Reversal_ID NUMERIC(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:14:15 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference (AD_Reference_UU,Name,EntityType,IsOrderByValue,AD_Reference_ID,ValidationType,AD_Org_ID,Created,UpdatedBy,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('a8cf3824-9f18-4d6b-802e-3412a8954a00','M_MatchInv','D','N',200018,'T',0,TO_TIMESTAMP('2012-11-12 18:14:13','YYYY-MM-DD HH24:MI:SS'),100,0,100,TO_TIMESTAMP('2012-11-12 18:14:13','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:14:15 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Reference_Trl (AD_Language,AD_Reference_ID, Help,Name,Description, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Reference_Trl_UU ) SELECT l.AD_Language,t.AD_Reference_ID, t.Help,t.Name,t.Description, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Reference t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Reference_ID=200018 AND NOT EXISTS (SELECT * FROM AD_Reference_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Reference_ID=t.AD_Reference_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:14:53 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Ref_Table (IsValueDisplayed,OrderByClause,AD_Key,AD_Display,Updated,EntityType,AD_Reference_ID,AD_Client_ID,UpdatedBy,AD_Table_ID,AD_Org_ID,AD_Ref_Table_UU,CreatedBy,Created,IsActive) VALUES ('N','M_MatchInv.DocumentNo',6497,13086,TO_TIMESTAMP('2012-11-12 18:14:53','YYYY-MM-DD HH24:MI:SS'),'D',200018,0,100,472,0,'24adae8f-5c79-4cae-b407-3ca6fba3c375',100,TO_TIMESTAMP('2012-11-12 18:14:53','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:16:04 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column (IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,Created,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,IsActive,CreatedBy,Updated,AD_Org_ID,UpdatedBy,AD_Client_ID,AD_Column_ID,IsToolbarButton,SeqNoSelection) VALUES ('N','N',1,472,'D',200018,'N','N','N',0,'N',10,'N',18,'N',53457,TO_TIMESTAMP('2012-11-12 18:16:03','YYYY-MM-DD HH24:MI:SS'),'N','Y','62823c9e-b2c1-46e2-9157-80a1338d0b71','Y','N','Reversal_ID','ID of document reversal','Reversal ID','Y','Y',100,TO_TIMESTAMP('2012-11-12 18:16:03','YYYY-MM-DD HH24:MI:SS'),0,100,0,200881,'N',0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:16:04 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200881 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:16:10 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
ALTER TABLE M_MatchInv ADD COLUMN Reversal_ID NUMERIC(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:19:34 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column (IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,Created,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,IsActive,CreatedBy,Updated,AD_Org_ID,UpdatedBy,AD_Client_ID,AD_Column_ID,IsToolbarButton,SeqNoSelection) VALUES ('N','N',1,735,'D',323,'N','N','N',0,'N',10,'N',18,'N',53457,TO_TIMESTAMP('2012-11-12 18:19:33','YYYY-MM-DD HH24:MI:SS'),'N','Y','f8c0678b-cdcc-41b2-8ccf-b7e5bba6c5a1','Y','N','Reversal_ID','ID of document reversal','Reversal ID','Y','Y',100,TO_TIMESTAMP('2012-11-12 18:19:33','YYYY-MM-DD HH24:MI:SS'),0,100,0,200882,'N',0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:19:34 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200882 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:19:39 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
ALTER TABLE C_AllocationHdr ADD COLUMN Reversal_ID NUMERIC(10) DEFAULT NULL
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:24:58 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process (CopyFromProcess,AD_Process_ID,IsDirectPrint,IsReport,AD_Process_UU,AccessLevel,IsBetaFunctionality,IsServerProcess,Statistic_Seconds,Statistic_Count,ShowHelp,EntityType,Classname,Name,AD_Client_ID,UpdatedBy,Updated,CreatedBy,Value,AD_Org_ID,Created,IsActive) VALUES ('N',200016,'N','N','c3c3698b-82ca-4686-9d92-0ffc83c10bf6','3','N','N',0,0,'Y','D','org.adempiere.process.MatchPOReverse','Reverse MatchPO',0,100,TO_TIMESTAMP('2012-11-12 18:24:56','YYYY-MM-DD HH24:MI:SS'),100,'M_MatchPO_Reversal',0,TO_TIMESTAMP('2012-11-12 18:24:56','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:24:58 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process_Trl (AD_Language,AD_Process_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Process_Trl_UU ) SELECT l.AD_Language,t.AD_Process_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Process t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_ID=200016 AND NOT EXISTS (SELECT * FROM AD_Process_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_ID=t.AD_Process_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:26:45 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process (CopyFromProcess,AD_Process_ID,IsDirectPrint,IsReport,AD_Process_UU,AccessLevel,IsBetaFunctionality,IsServerProcess,Statistic_Seconds,Statistic_Count,ShowHelp,EntityType,Classname,Name,AD_Client_ID,UpdatedBy,Updated,CreatedBy,Value,AD_Org_ID,Created,IsActive) VALUES ('N',200017,'N','N','bbb372e3-138e-4425-9f8c-bfbd1e73a666','3','N','N',0,0,'Y','D','org.adempiere.process.MatchInvReverse','Reverse MatchInv',0,100,TO_TIMESTAMP('2012-11-12 18:26:44','YYYY-MM-DD HH24:MI:SS'),100,'M_MatchInv_Reversal',0,TO_TIMESTAMP('2012-11-12 18:26:44','YYYY-MM-DD HH24:MI:SS'),'Y')
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:26:45 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_Process_Trl (AD_Language,AD_Process_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Process_Trl_UU ) SELECT l.AD_Language,t.AD_Process_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Process t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Process_ID=200017 AND NOT EXISTS (SELECT * FROM AD_Process_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Process_ID=t.AD_Process_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:30:55 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton ("action",AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',408,10,200017,200069,TO_TIMESTAMP('2012-11-12 18:30:54','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse Invoice Matching',0,'08eda454-bcb1-4c57-83e4-97212206a7bc','ReverseMatchInv',TO_TIMESTAMP('2012-11-12 18:30:54','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:31:40 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process SET Name='Reverse Invoice Matching',Updated=TO_TIMESTAMP('2012-11-12 18:31:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200017
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:31:40 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process_Trl SET IsTranslated='N' WHERE AD_Process_ID=200017
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:32:43 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton ("action",AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',409,10,200016,200070,TO_TIMESTAMP('2012-11-12 18:32:42','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse PO Matching',0,'1ef6e3e8-8997-4242-9715-58d07afe4e08','ReverseMatchPO',TO_TIMESTAMP('2012-11-12 18:32:42','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:34:00 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process SET Name='Reverse PO Matching',Updated=TO_TIMESTAMP('2012-11-12 18:34:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Process_ID=200016
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:34:00 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
UPDATE AD_Process_Trl SET IsTranslated='N' WHERE AD_Process_ID=200016
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:36:32 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton ("action",AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',690,10,200017,200071,TO_TIMESTAMP('2012-11-12 18:36:31','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse Invoice Matching',0,'00811a39-21a6-4c51-b5f1-299bd6f595b1','ReverseMatchInv',TO_TIMESTAMP('2012-11-12 18:36:31','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
||||||
|
-- Nov 12, 2012 6:37:50 PM MYT
|
||||||
|
-- IDEMPIERE-378 Implement Reverse Accrual
|
||||||
|
INSERT INTO AD_ToolBarButton ("action",AD_Tab_ID,SeqNo,AD_Process_ID,AD_ToolBarButton_ID,Updated,IsActive,IsCustomization,Name,AD_Client_ID,AD_ToolBarButton_UU,ComponentName,Created,CreatedBy,UpdatedBy,AD_Org_ID) VALUES ('W',692,10,200016,200072,TO_TIMESTAMP('2012-11-12 18:37:49','YYYY-MM-DD HH24:MI:SS'),'Y','N','Reverse PO Matching',0,'99e7e98d-a600-4174-9b55-923b790d03ba','ReverseMatchPO',TO_TIMESTAMP('2012-11-12 18:37:49','YYYY-MM-DD HH24:MI:SS'),100,100,0)
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Copyright (C) 2012 Heng Sin Low *
|
||||||
|
* 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.process;
|
||||||
|
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
|
import org.compiere.model.MMatchInv;
|
||||||
|
import org.compiere.process.SvrProcess;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process to reverse invoice matching
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MatchInvReverse extends SvrProcess {
|
||||||
|
private int p_M_MatchInv_ID = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void prepare() {
|
||||||
|
p_M_MatchInv_ID = getRecord_ID();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return message
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected String doIt() throws Exception {
|
||||||
|
if (log.isLoggable(Level.INFO))
|
||||||
|
log.info ("M_MatchInv_ID=" + p_M_MatchInv_ID);
|
||||||
|
|
||||||
|
MMatchInv inv = new MMatchInv (getCtx(), p_M_MatchInv_ID, get_TrxName());
|
||||||
|
if (inv.get_ID() != p_M_MatchInv_ID)
|
||||||
|
throw new AdempiereException("@NotFound@ @M_MatchInv_ID@ " + p_M_MatchInv_ID);
|
||||||
|
|
||||||
|
if (inv.isPosted())
|
||||||
|
{
|
||||||
|
Timestamp reversalDate = Env.getContextAsDate(getCtx(), "#Date");
|
||||||
|
if (reversalDate == null) {
|
||||||
|
reversalDate = new Timestamp(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
if (!inv.reverse(reversalDate))
|
||||||
|
throw new AdempiereException("Failed to reverse invoice matching");
|
||||||
|
}
|
||||||
|
return "@OK@";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Copyright (C) 2012 Heng Sin Low *
|
||||||
|
* 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.process;
|
||||||
|
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
|
import org.compiere.model.MMatchPO;
|
||||||
|
import org.compiere.process.SvrProcess;
|
||||||
|
import org.compiere.util.Env;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process to reverse PO Matching
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MatchPOReverse extends SvrProcess {
|
||||||
|
private int p_M_MatchPO_ID = 0;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void prepare() {
|
||||||
|
p_M_MatchPO_ID = getRecord_ID();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return message
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected String doIt() throws Exception {
|
||||||
|
if (log.isLoggable(Level.INFO))
|
||||||
|
log.info ("M_MatchPO_ID=" + p_M_MatchPO_ID);
|
||||||
|
|
||||||
|
MMatchPO po = new MMatchPO (getCtx(), p_M_MatchPO_ID, get_TrxName());
|
||||||
|
if (po.get_ID() != p_M_MatchPO_ID)
|
||||||
|
throw new AdempiereException("@NotFound@ @M_MatchPO_ID@ " + p_M_MatchPO_ID);
|
||||||
|
if (po.isPosted())
|
||||||
|
{
|
||||||
|
Timestamp reversalDate = Env.getContextAsDate(getCtx(), "#Date");
|
||||||
|
if (reversalDate == null) {
|
||||||
|
reversalDate = new Timestamp(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
if (!po.reverse(reversalDate))
|
||||||
|
throw new AdempiereException("Failed to reverse matching");
|
||||||
|
}
|
||||||
|
return "@OK@";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -293,6 +293,21 @@ public interface I_C_AllocationHdr
|
||||||
/** Get Process Now */
|
/** Get Process Now */
|
||||||
public boolean isProcessing();
|
public boolean isProcessing();
|
||||||
|
|
||||||
|
/** Column name Reversal_ID */
|
||||||
|
public static final String COLUMNNAME_Reversal_ID = "Reversal_ID";
|
||||||
|
|
||||||
|
/** Set Reversal ID.
|
||||||
|
* ID of document reversal
|
||||||
|
*/
|
||||||
|
public void setReversal_ID (int Reversal_ID);
|
||||||
|
|
||||||
|
/** Get Reversal ID.
|
||||||
|
* ID of document reversal
|
||||||
|
*/
|
||||||
|
public int getReversal_ID();
|
||||||
|
|
||||||
|
public org.compiere.model.I_C_AllocationHdr getReversal() throws RuntimeException;
|
||||||
|
|
||||||
/** Column name Updated */
|
/** Column name Updated */
|
||||||
public static final String COLUMNNAME_Updated = "Updated";
|
public static final String COLUMNNAME_Updated = "Updated";
|
||||||
|
|
||||||
|
|
|
@ -286,6 +286,21 @@ public interface I_M_MatchInv
|
||||||
*/
|
*/
|
||||||
public BigDecimal getQty();
|
public BigDecimal getQty();
|
||||||
|
|
||||||
|
/** Column name Reversal_ID */
|
||||||
|
public static final String COLUMNNAME_Reversal_ID = "Reversal_ID";
|
||||||
|
|
||||||
|
/** Set Reversal ID.
|
||||||
|
* ID of document reversal
|
||||||
|
*/
|
||||||
|
public void setReversal_ID (int Reversal_ID);
|
||||||
|
|
||||||
|
/** Get Reversal ID.
|
||||||
|
* ID of document reversal
|
||||||
|
*/
|
||||||
|
public int getReversal_ID();
|
||||||
|
|
||||||
|
public org.compiere.model.I_M_MatchInv getReversal() throws RuntimeException;
|
||||||
|
|
||||||
/** Column name Updated */
|
/** Column name Updated */
|
||||||
public static final String COLUMNNAME_Updated = "Updated";
|
public static final String COLUMNNAME_Updated = "Updated";
|
||||||
|
|
||||||
|
|
|
@ -327,6 +327,21 @@ public interface I_M_MatchPO
|
||||||
*/
|
*/
|
||||||
public BigDecimal getQty();
|
public BigDecimal getQty();
|
||||||
|
|
||||||
|
/** Column name Reversal_ID */
|
||||||
|
public static final String COLUMNNAME_Reversal_ID = "Reversal_ID";
|
||||||
|
|
||||||
|
/** Set Reversal ID.
|
||||||
|
* ID of document reversal
|
||||||
|
*/
|
||||||
|
public void setReversal_ID (int Reversal_ID);
|
||||||
|
|
||||||
|
/** Get Reversal ID.
|
||||||
|
* ID of document reversal
|
||||||
|
*/
|
||||||
|
public int getReversal_ID();
|
||||||
|
|
||||||
|
public org.compiere.model.I_M_MatchPO getReversal() throws RuntimeException;
|
||||||
|
|
||||||
/** Column name Updated */
|
/** Column name Updated */
|
||||||
public static final String COLUMNNAME_Updated = "Updated";
|
public static final String COLUMNNAME_Updated = "Updated";
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@ import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.adempiere.exceptions.AdempiereException;
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
|
import org.adempiere.exceptions.PeriodClosedException;
|
||||||
import org.compiere.process.DocAction;
|
import org.compiere.process.DocAction;
|
||||||
import org.compiere.process.DocumentEngine;
|
import org.compiere.process.DocumentEngine;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
|
@ -531,7 +532,17 @@ public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
boolean retValue = reverseIt();
|
boolean accrual = false;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
MPeriod.testPeriodOpen(getCtx(), getDateTrx(), MPeriodControl.DOCBASETYPE_PaymentAllocation, getAD_Org_ID());
|
||||||
|
}
|
||||||
|
catch (PeriodClosedException e)
|
||||||
|
{
|
||||||
|
accrual = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean retValue = reverseIt(accrual);
|
||||||
|
|
||||||
// After Void
|
// After Void
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_VOID);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_VOID);
|
||||||
|
@ -578,7 +589,7 @@ public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
boolean retValue = reverseIt();
|
boolean retValue = reverseIt(false);
|
||||||
|
|
||||||
// After reverseCorrect
|
// After reverseCorrect
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
||||||
|
@ -601,7 +612,7 @@ public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
boolean retValue = reverseIt();
|
boolean retValue = reverseIt(true);
|
||||||
|
|
||||||
// After reverseAccrual
|
// After reverseAccrual
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
||||||
|
@ -721,43 +732,104 @@ public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction
|
||||||
return getCreatedBy();
|
return getCreatedBy();
|
||||||
} // getDoc_User_ID
|
} // getDoc_User_ID
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add to Description
|
||||||
|
* @param description text
|
||||||
|
*/
|
||||||
|
public void addDescription (String description)
|
||||||
|
{
|
||||||
|
String desc = getDescription();
|
||||||
|
if (desc == null)
|
||||||
|
setDescription(description);
|
||||||
|
else
|
||||||
|
setDescription(desc + " | " + description);
|
||||||
|
} // addDescription
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* Reverse Allocation.
|
* Reverse Allocation.
|
||||||
* Period needs to be open
|
* Period needs to be open
|
||||||
* @return true if reversed
|
* @return true if reversed
|
||||||
*/
|
*/
|
||||||
private boolean reverseIt()
|
private boolean reverseIt(boolean accrual)
|
||||||
{
|
{
|
||||||
if (!isActive())
|
if (!isActive())
|
||||||
throw new IllegalStateException("Allocation already reversed (not active)");
|
throw new IllegalStateException("Allocation already reversed (not active)");
|
||||||
|
|
||||||
// Can we delete posting
|
Timestamp reversalDate = accrual ? Env.getContextAsDate(getCtx(), "#Date") : getDateAcct();
|
||||||
MPeriod.testPeriodOpen(getCtx(), getDateTrx(), MPeriodControl.DOCBASETYPE_PaymentAllocation, getAD_Org_ID());
|
if (reversalDate == null) {
|
||||||
|
reversalDate = new Timestamp(System.currentTimeMillis());
|
||||||
// Set Inactive
|
}
|
||||||
setIsActive (false);
|
|
||||||
if ( !isPosted() )
|
// Can we delete posting
|
||||||
setPosted(true);
|
MPeriod.testPeriodOpen(getCtx(), reversalDate, MPeriodControl.DOCBASETYPE_PaymentAllocation, getAD_Org_ID());
|
||||||
setDocumentNo(getDocumentNo()+"^");
|
|
||||||
setDocStatus(DOCSTATUS_Reversed); // for direct calls
|
if (accrual)
|
||||||
if (!save() || isActive())
|
{
|
||||||
throw new IllegalStateException("Cannot de-activate allocation");
|
// Deep Copy
|
||||||
|
MAllocationHdr reversal = copyFrom (this, reversalDate, reversalDate, get_TrxName());
|
||||||
// Delete Posting
|
if (reversal == null)
|
||||||
MFactAcct.deleteEx(MAllocationHdr.Table_ID, getC_AllocationHdr_ID(), get_TrxName());
|
{
|
||||||
|
m_processMsg = "Could not create Payment Allocation Reversal";
|
||||||
// Unlink Invoices
|
return false;
|
||||||
getLines(true);
|
}
|
||||||
HashSet<Integer> bps = new HashSet<Integer>();
|
reversal.setReversal_ID(getC_AllocationHdr_ID());
|
||||||
for (int i = 0; i < m_lines.length; i++)
|
|
||||||
{
|
// Reverse Line Amt
|
||||||
MAllocationLine line = m_lines[i];
|
MAllocationLine[] rLines = reversal.getLines(false);
|
||||||
line.setIsActive(false);
|
for (MAllocationLine rLine : rLines) {
|
||||||
line.saveEx();
|
rLine.setAmount(rLine.getAmount().negate());
|
||||||
bps.add(new Integer(line.processIt(true))); // reverse
|
rLine.setDiscountAmt(rLine.getDiscountAmt().negate());
|
||||||
|
rLine.setWriteOffAmt(rLine.getWriteOffAmt().negate());
|
||||||
|
rLine.setOverUnderAmt(rLine.getOverUnderAmt().negate());
|
||||||
|
if (!rLine.save(get_TrxName()))
|
||||||
|
{
|
||||||
|
m_processMsg = "Could not correct Payment Allocation Reversal Line";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reversal.addDescription("{->" + getDocumentNo() + ")");
|
||||||
|
//
|
||||||
|
if (!DocumentEngine.processIt(reversal, DocAction.ACTION_Complete))
|
||||||
|
{
|
||||||
|
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
DocumentEngine.processIt(reversal, DocAction.ACTION_Close);
|
||||||
|
reversal.setProcessing (false);
|
||||||
|
reversal.setDocStatus(DOCSTATUS_Reversed);
|
||||||
|
reversal.setDocAction(DOCACTION_None);
|
||||||
|
reversal.saveEx();
|
||||||
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
addDescription("(" + reversal.getDocumentNo() + "<-)");
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Set Inactive
|
||||||
|
setIsActive (false);
|
||||||
|
if ( !isPosted() )
|
||||||
|
setPosted(true);
|
||||||
|
setDocumentNo(getDocumentNo()+"^");
|
||||||
|
setDocStatus(DOCSTATUS_Reversed); // for direct calls
|
||||||
|
if (!save() || isActive())
|
||||||
|
throw new IllegalStateException("Cannot de-activate allocation");
|
||||||
|
|
||||||
|
// Delete Posting
|
||||||
|
MFactAcct.deleteEx(MAllocationHdr.Table_ID, getC_AllocationHdr_ID(), get_TrxName());
|
||||||
|
|
||||||
|
// Unlink Invoices
|
||||||
|
getLines(true);
|
||||||
|
HashSet<Integer> bps = new HashSet<Integer>();
|
||||||
|
for (int i = 0; i < m_lines.length; i++)
|
||||||
|
{
|
||||||
|
MAllocationLine line = m_lines[i];
|
||||||
|
line.setIsActive(false);
|
||||||
|
line.saveEx();
|
||||||
|
bps.add(new Integer(line.processIt(true))); // reverse
|
||||||
|
}
|
||||||
|
updateBP(bps);
|
||||||
}
|
}
|
||||||
updateBP(bps);
|
|
||||||
return true;
|
return true;
|
||||||
} // reverse
|
} // reverse
|
||||||
|
|
||||||
|
@ -794,5 +866,79 @@ public final class MAllocationHdr extends X_C_AllocationHdr implements DocAction
|
||||||
|| DOCSTATUS_Closed.equals(ds)
|
|| DOCSTATUS_Closed.equals(ds)
|
||||||
|| DOCSTATUS_Reversed.equals(ds);
|
|| DOCSTATUS_Reversed.equals(ds);
|
||||||
} // isComplete
|
} // isComplete
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new Allocation by copying
|
||||||
|
* @param from allocation
|
||||||
|
* @param dateAcct date of the document accounting date
|
||||||
|
* @param dateTrx date of the document transaction.
|
||||||
|
* @param trxName
|
||||||
|
* @return Allocation
|
||||||
|
*/
|
||||||
|
public static MAllocationHdr copyFrom (MAllocationHdr from, Timestamp dateAcct, Timestamp dateTrx,
|
||||||
|
String trxName)
|
||||||
|
{
|
||||||
|
MAllocationHdr to = new MAllocationHdr (from.getCtx(), 0, trxName);
|
||||||
|
PO.copyValues (from, to, from.getAD_Client_ID(), from.getAD_Org_ID());
|
||||||
|
to.set_ValueNoCheck ("DocumentNo", null);
|
||||||
|
//
|
||||||
|
to.setDocStatus (DOCSTATUS_Drafted); // Draft
|
||||||
|
to.setDocAction(DOCACTION_Complete);
|
||||||
|
//
|
||||||
|
to.setDateTrx (dateAcct);
|
||||||
|
to.setDateAcct (dateTrx);
|
||||||
|
to.setIsManual(false);
|
||||||
|
//
|
||||||
|
to.setIsApproved (false);
|
||||||
|
//
|
||||||
|
to.setPosted (false);
|
||||||
|
to.setProcessed (false);
|
||||||
|
|
||||||
|
to.saveEx();
|
||||||
|
|
||||||
|
// Lines
|
||||||
|
if (to.copyLinesFrom(from) == 0)
|
||||||
|
throw new AdempiereException("Could not create Allocation Lines");
|
||||||
|
|
||||||
|
return to;
|
||||||
|
} // copyFrom
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy Lines From other Allocation.
|
||||||
|
* @param otherAllocation allocation
|
||||||
|
* @return number of lines copied
|
||||||
|
*/
|
||||||
|
public int copyLinesFrom (MAllocationHdr otherAllocation)
|
||||||
|
{
|
||||||
|
if (isProcessed() || isPosted() || (otherAllocation == null))
|
||||||
|
return 0;
|
||||||
|
MAllocationLine[] fromLines = otherAllocation.getLines(false);
|
||||||
|
int count = 0;
|
||||||
|
for (MAllocationLine fromLine : fromLines) {
|
||||||
|
MAllocationLine line = new MAllocationLine (getCtx(), 0, get_TrxName());
|
||||||
|
PO.copyValues (fromLine, line, fromLine.getAD_Client_ID(), fromLine.getAD_Org_ID());
|
||||||
|
line.setC_AllocationHdr_ID(getC_AllocationHdr_ID());
|
||||||
|
line.setParent(this);
|
||||||
|
line.set_ValueNoCheck ("C_AllocationLine_ID", I_ZERO); // new
|
||||||
|
|
||||||
|
if (line.getC_Payment_ID() != 0)
|
||||||
|
{
|
||||||
|
MPayment payment = new MPayment(getCtx(), line.getC_Payment_ID(), get_TrxName());
|
||||||
|
if (DOCSTATUS_Reversed.equals(payment.getDocStatus()))
|
||||||
|
{
|
||||||
|
MPayment reversal = (MPayment) payment.getReversal();
|
||||||
|
if (reversal != null)
|
||||||
|
{
|
||||||
|
line.setPaymentInfo(reversal.getC_Payment_ID(), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
line.saveEx();
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
} // copyLinesFrom
|
||||||
|
|
||||||
} // MAllocation
|
} // MAllocation
|
||||||
|
|
|
@ -2040,40 +2040,70 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
MInOut reversal = reverse(false);
|
||||||
|
if (reversal == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// After reverseCorrect
|
||||||
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
||||||
|
if (m_processMsg != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
setProcessed(true);
|
||||||
|
setDocStatus(DOCSTATUS_Reversed); // may come from void
|
||||||
|
setDocAction(DOCACTION_None);
|
||||||
|
return true;
|
||||||
|
} // reverseCorrectionIt
|
||||||
|
|
||||||
|
private MInOut reverse(boolean accrual) {
|
||||||
MDocType dt = MDocType.get(getCtx(), getC_DocType_ID());
|
MDocType dt = MDocType.get(getCtx(), getC_DocType_ID());
|
||||||
if (!MPeriod.isOpen(getCtx(), getDateAcct(), dt.getDocBaseType(), getAD_Org_ID()))
|
Timestamp reversalDate = accrual ? Env.getContextAsDate(getCtx(), "#Date") : getDateAcct();
|
||||||
|
if (reversalDate == null) {
|
||||||
|
reversalDate = new Timestamp(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
Timestamp reversalMovementDate = accrual ? reversalDate : getMovementDate();
|
||||||
|
if (!MPeriod.isOpen(getCtx(), reversalDate, dt.getDocBaseType(), getAD_Org_ID()))
|
||||||
{
|
{
|
||||||
m_processMsg = "@PeriodClosed@";
|
m_processMsg = "@PeriodClosed@";
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reverse/Delete Matching
|
// Reverse/Delete Matching
|
||||||
if (!isSOTrx())
|
if (!isSOTrx())
|
||||||
{
|
{
|
||||||
MMatchInv[] mInv = MMatchInv.getInOut(getCtx(), getM_InOut_ID(), get_TrxName());
|
if (accrual)
|
||||||
for (int i = 0; i < mInv.length; i++)
|
|
||||||
mInv[i].deleteEx(true);
|
|
||||||
MMatchPO[] mPO = MMatchPO.getInOut(getCtx(), getM_InOut_ID(), get_TrxName());
|
|
||||||
for (int i = 0; i < mPO.length; i++)
|
|
||||||
{
|
{
|
||||||
if (mPO[i].getC_InvoiceLine_ID() == 0)
|
if (!reverseMatching(reversalDate))
|
||||||
mPO[i].deleteEx(true);
|
return null;
|
||||||
else
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MMatchInv[] mInv = MMatchInv.getInOut(getCtx(), getM_InOut_ID(), get_TrxName());
|
||||||
|
for (int i = 0; i < mInv.length; i++)
|
||||||
|
mInv[i].deleteEx(true);
|
||||||
|
MMatchPO[] mPO = MMatchPO.getInOut(getCtx(), getM_InOut_ID(), get_TrxName());
|
||||||
|
for (int i = 0; i < mPO.length; i++)
|
||||||
{
|
{
|
||||||
mPO[i].setM_InOutLine_ID(0);
|
if (mPO[i].getC_InvoiceLine_ID() == 0)
|
||||||
mPO[i].saveEx();
|
mPO[i].deleteEx(true);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mPO[i].setM_InOutLine_ID(0);
|
||||||
|
mPO[i].saveEx();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deep Copy
|
// Deep Copy
|
||||||
MInOut reversal = copyFrom (this, getMovementDate(), getDateAcct(),
|
MInOut reversal = copyFrom (this, reversalMovementDate, reversalDate,
|
||||||
getC_DocType_ID(), isSOTrx(), false, get_TrxName(), true);
|
getC_DocType_ID(), isSOTrx(), false, get_TrxName(), true);
|
||||||
if (reversal == null)
|
if (reversal == null)
|
||||||
{
|
{
|
||||||
m_processMsg = "Could not create Ship Reversal";
|
m_processMsg = "Could not create Ship Reversal";
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
reversal.setReversal(true);
|
reversal.setReversal(true);
|
||||||
|
|
||||||
|
@ -2091,7 +2121,7 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
if (!rLine.save(get_TrxName()))
|
if (!rLine.save(get_TrxName()))
|
||||||
{
|
{
|
||||||
m_processMsg = "Could not correct Ship Reversal Line";
|
m_processMsg = "Could not correct Ship Reversal Line";
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
// We need to copy MA
|
// We need to copy MA
|
||||||
if (rLine.getM_AttributeSetInstance_ID() == 0)
|
if (rLine.getM_AttributeSetInstance_ID() == 0)
|
||||||
|
@ -2128,7 +2158,7 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
|| !reversal.getDocStatus().equals(DocAction.STATUS_Completed))
|
|| !reversal.getDocStatus().equals(DocAction.STATUS_Completed))
|
||||||
{
|
{
|
||||||
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
reversal.closeIt();
|
reversal.closeIt();
|
||||||
reversal.setProcessing (false);
|
reversal.setProcessing (false);
|
||||||
|
@ -2146,18 +2176,38 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
//FR1948157
|
//FR1948157
|
||||||
this.setReversal_ID(reversal.getM_InOut_ID());
|
this.setReversal_ID(reversal.getM_InOut_ID());
|
||||||
voidConfirmations();
|
voidConfirmations();
|
||||||
|
return reversal;
|
||||||
|
}
|
||||||
|
|
||||||
// After reverseCorrect
|
private boolean reverseMatching(Timestamp reversalDate) {
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
MMatchInv[] mInv = MMatchInv.getInOut(getCtx(), getM_InOut_ID(), get_TrxName());
|
||||||
if (m_processMsg != null)
|
for (MMatchInv mMatchInv : mInv)
|
||||||
return false;
|
{
|
||||||
|
String description = mMatchInv.getDescription();
|
||||||
m_processMsg = reversal.getDocumentNo();
|
if (description == null || !description.endsWith("<-)"))
|
||||||
setProcessed(true);
|
{
|
||||||
setDocStatus(DOCSTATUS_Reversed); // may come from void
|
if (!mMatchInv.reverse(reversalDate))
|
||||||
setDocAction(DOCACTION_None);
|
{
|
||||||
|
log.log(Level.SEVERE, "Failed to create reversal for match invoice " + mMatchInv.getDocumentNo());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MMatchPO[] mMatchPOList = MMatchPO.getInOut(getCtx(), getM_InOut_ID(), get_TrxName());
|
||||||
|
for (MMatchPO mMatchPO : mMatchPOList)
|
||||||
|
{
|
||||||
|
String description = mMatchPO.getDescription();
|
||||||
|
if (description == null || !description.endsWith("<-)"))
|
||||||
|
{
|
||||||
|
if (!mMatchPO.reverse(reversalDate))
|
||||||
|
{
|
||||||
|
log.log(Level.SEVERE, "Failed to create reversal for match purchase order " + mMatchPO.getDocumentNo());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
} // reverseCorrectionIt
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverse Accrual - none
|
* Reverse Accrual - none
|
||||||
|
@ -2171,12 +2221,20 @@ public class MInOut extends X_M_InOut implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
MInOut reversal = reverse(true);
|
||||||
|
if (reversal == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
// After reverseAccrual
|
// After reverseAccrual
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return false;
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
setProcessed(true);
|
||||||
|
setDocStatus(DOCSTATUS_Reversed); // may come from void
|
||||||
|
setDocAction(DOCACTION_None);
|
||||||
|
return true;
|
||||||
} // reverseAccrualIt
|
} // reverseAccrualIt
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -744,12 +744,33 @@ public class MInventory extends X_M_Inventory implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
MInventory reversal = reverse(false);
|
||||||
|
if (reversal == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// After reverseCorrect
|
||||||
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
||||||
|
if (m_processMsg != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} // reverseCorrectIt
|
||||||
|
|
||||||
|
private MInventory reverse(boolean accrual) {
|
||||||
|
Timestamp reversalDate = accrual ? Env.getContextAsDate(getCtx(), "#Date") : getMovementDate();
|
||||||
|
if (reversalDate == null) {
|
||||||
|
reversalDate = new Timestamp(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
MDocType dt = MDocType.get(getCtx(), getC_DocType_ID());
|
MDocType dt = MDocType.get(getCtx(), getC_DocType_ID());
|
||||||
MPeriod.testPeriodOpen(getCtx(), getMovementDate(), dt.getDocBaseType(), getAD_Org_ID());
|
MPeriod.testPeriodOpen(getCtx(), reversalDate, dt.getDocBaseType(), getAD_Org_ID());
|
||||||
|
|
||||||
// Deep Copy
|
// Deep Copy
|
||||||
MInventory reversal = new MInventory(getCtx(), 0, get_TrxName());
|
MInventory reversal = new MInventory(getCtx(), 0, get_TrxName());
|
||||||
copyValues(this, reversal, getAD_Client_ID(), getAD_Org_ID());
|
copyValues(this, reversal, getAD_Client_ID(), getAD_Org_ID());
|
||||||
|
reversal.setMovementDate(reversalDate);
|
||||||
reversal.setDocStatus(DOCSTATUS_Drafted);
|
reversal.setDocStatus(DOCSTATUS_Drafted);
|
||||||
reversal.setDocAction(DOCACTION_Complete);
|
reversal.setDocAction(DOCACTION_Complete);
|
||||||
reversal.setIsApproved (false);
|
reversal.setIsApproved (false);
|
||||||
|
@ -799,29 +820,24 @@ public class MInventory extends X_M_Inventory implements DocAction
|
||||||
if (!reversal.processIt(DocAction.ACTION_Complete))
|
if (!reversal.processIt(DocAction.ACTION_Complete))
|
||||||
{
|
{
|
||||||
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
reversal.closeIt();
|
reversal.closeIt();
|
||||||
reversal.setDocStatus(DOCSTATUS_Reversed);
|
reversal.setDocStatus(DOCSTATUS_Reversed);
|
||||||
reversal.setDocAction(DOCACTION_None);
|
reversal.setDocAction(DOCACTION_None);
|
||||||
reversal.saveEx();
|
reversal.saveEx();
|
||||||
m_processMsg = reversal.getDocumentNo();
|
|
||||||
|
|
||||||
// Update Reversed (this)
|
// Update Reversed (this)
|
||||||
msgd = new StringBuilder("(").append(reversal.getDocumentNo()).append("<-)");
|
msgd = new StringBuilder("(").append(reversal.getDocumentNo()).append("<-)");
|
||||||
addDescription(msgd.toString());
|
addDescription(msgd.toString());
|
||||||
// After reverseCorrect
|
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
|
||||||
if (m_processMsg != null)
|
|
||||||
return false;
|
|
||||||
setProcessed(true);
|
setProcessed(true);
|
||||||
//FR1948157
|
//FR1948157
|
||||||
setReversal_ID(reversal.getM_Inventory_ID());
|
setReversal_ID(reversal.getM_Inventory_ID());
|
||||||
setDocStatus(DOCSTATUS_Reversed); // may come from void
|
setDocStatus(DOCSTATUS_Reversed); // may come from void
|
||||||
setDocAction(DOCACTION_None);
|
setDocAction(DOCACTION_None);
|
||||||
|
|
||||||
return true;
|
return reversal;
|
||||||
} // reverseCorrectIt
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverse Accrual
|
* Reverse Accrual
|
||||||
|
@ -835,10 +851,16 @@ public class MInventory extends X_M_Inventory implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
MInventory reversal = reverse(true);
|
||||||
|
if (reversal == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
// After reverseAccrual
|
// After reverseAccrual
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
} // reverseAccrualIt
|
} // reverseAccrualIt
|
||||||
|
|
|
@ -2264,31 +2264,95 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
MPeriod.testPeriodOpen(getCtx(), getDateAcct(), getC_DocType_ID(), getAD_Org_ID());
|
MInvoice reversal = reverse(false);
|
||||||
|
if (reversal == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// After reverseCorrect
|
||||||
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
||||||
|
if (m_processMsg != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} // reverseCorrectIt
|
||||||
|
|
||||||
|
private MInvoice reverse(boolean accrual) {
|
||||||
|
Timestamp reversalDate = accrual ? Env.getContextAsDate(getCtx(), "#Date") : getDateAcct();
|
||||||
|
if (reversalDate == null) {
|
||||||
|
reversalDate = new Timestamp(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
Timestamp reversalDateInvoiced = accrual ? reversalDate : getDateInvoiced();
|
||||||
|
|
||||||
|
MPeriod.testPeriodOpen(getCtx(), reversalDate, getC_DocType_ID(), getAD_Org_ID());
|
||||||
//
|
//
|
||||||
MAllocationHdr[] allocations = MAllocationHdr.getOfInvoice(getCtx(),
|
MAllocationHdr[] allocations = MAllocationHdr.getOfInvoice(getCtx(),
|
||||||
getC_Invoice_ID(), get_TrxName());
|
getC_Invoice_ID(), get_TrxName());
|
||||||
for (int i = 0; i < allocations.length; i++)
|
for (int i = 0; i < allocations.length; i++)
|
||||||
{
|
{
|
||||||
allocations[i].setDocAction(DocAction.ACTION_Reverse_Correct);
|
if (accrual)
|
||||||
allocations[i].reverseCorrectIt();
|
{
|
||||||
allocations[i].saveEx(get_TrxName());
|
allocations[i].setDocAction(DocAction.ACTION_Reverse_Accrual);
|
||||||
|
allocations[i].reverseAccrualIt();
|
||||||
|
allocations[i].saveEx(get_TrxName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
allocations[i].setDocAction(DocAction.ACTION_Reverse_Correct);
|
||||||
|
allocations[i].reverseCorrectIt();
|
||||||
|
allocations[i].saveEx(get_TrxName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Reverse/Delete Matching
|
// Reverse/Delete Matching
|
||||||
if (!isSOTrx())
|
if (!isSOTrx())
|
||||||
{
|
{
|
||||||
MMatchInv[] mInv = MMatchInv.getInvoice(getCtx(), getC_Invoice_ID(), get_TrxName());
|
if (accrual)
|
||||||
for (int i = 0; i < mInv.length; i++)
|
|
||||||
mInv[i].delete(true);
|
|
||||||
MMatchPO[] mPO = MMatchPO.getInvoice(getCtx(), getC_Invoice_ID(), get_TrxName());
|
|
||||||
for (int i = 0; i < mPO.length; i++)
|
|
||||||
{
|
{
|
||||||
if (mPO[i].getM_InOutLine_ID() == 0)
|
MMatchInv[] mInv = MMatchInv.getInvoice(getCtx(), getC_Invoice_ID(), get_TrxName());
|
||||||
mPO[i].delete(true);
|
for (int i = 0; i < mInv.length; i++)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
mPO[i].setC_InvoiceLine_ID(null);
|
if (!mInv[i].reverse(reversalDate))
|
||||||
mPO[i].saveEx(get_TrxName());
|
{
|
||||||
|
m_processMsg = "Could not Reverse MatchInv";
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MMatchPO[] mPO = MMatchPO.getInvoice(getCtx(), getC_Invoice_ID(), get_TrxName());
|
||||||
|
for (int i = 0; i < mPO.length; i++)
|
||||||
|
{
|
||||||
|
if (mPO[i].getM_InOutLine_ID() == 0)
|
||||||
|
{
|
||||||
|
if (!mPO[i].reverse(reversalDate))
|
||||||
|
{
|
||||||
|
m_processMsg = "Could not Reverse MatchPO";
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mPO[i].setC_InvoiceLine_ID(null);
|
||||||
|
mPO[i].saveEx(get_TrxName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MMatchInv[] mInv = MMatchInv.getInvoice(getCtx(), getC_Invoice_ID(), get_TrxName());
|
||||||
|
for (int i = 0; i < mInv.length; i++)
|
||||||
|
{
|
||||||
|
mInv[i].deleteEx(true);
|
||||||
|
}
|
||||||
|
MMatchPO[] mPO = MMatchPO.getInvoice(getCtx(), getC_Invoice_ID(), get_TrxName());
|
||||||
|
for (int i = 0; i < mPO.length; i++)
|
||||||
|
{
|
||||||
|
if (mPO[i].getM_InOutLine_ID() == 0)
|
||||||
|
mPO[i].deleteEx(true);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mPO[i].setC_InvoiceLine_ID(null);
|
||||||
|
mPO[i].saveEx(get_TrxName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2298,13 +2362,13 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
// Deep Copy
|
// Deep Copy
|
||||||
MInvoice reversal = null;
|
MInvoice reversal = null;
|
||||||
if (MSysConfig.getBooleanValue(MSysConfig.Invoice_ReverseUseNewNumber, true, getAD_Client_ID()))
|
if (MSysConfig.getBooleanValue(MSysConfig.Invoice_ReverseUseNewNumber, true, getAD_Client_ID()))
|
||||||
reversal = copyFrom (this, getDateInvoiced(), getDateAcct(), getC_DocType_ID(), isSOTrx(), false, get_TrxName(), true);
|
reversal = copyFrom (this, reversalDateInvoiced, reversalDate, getC_DocType_ID(), isSOTrx(), false, get_TrxName(), true);
|
||||||
else
|
else
|
||||||
reversal = copyFrom (this, getDateInvoiced(), getDateAcct(), getC_DocType_ID(), isSOTrx(), false, get_TrxName(), true, getDocumentNo()+"^");
|
reversal = copyFrom (this, reversalDateInvoiced, reversalDate, getC_DocType_ID(), isSOTrx(), false, get_TrxName(), true, getDocumentNo()+"^");
|
||||||
if (reversal == null)
|
if (reversal == null)
|
||||||
{
|
{
|
||||||
m_processMsg = "Could not create Invoice Reversal";
|
m_processMsg = "Could not create Invoice Reversal";
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
reversal.setReversal(true);
|
reversal.setReversal(true);
|
||||||
|
|
||||||
|
@ -2323,7 +2387,7 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
if (!rLine.save(get_TrxName()))
|
if (!rLine.save(get_TrxName()))
|
||||||
{
|
{
|
||||||
m_processMsg = "Could not correct Invoice Reversal Line";
|
m_processMsg = "Could not correct Invoice Reversal Line";
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reversal.setC_Order_ID(getC_Order_ID());
|
reversal.setC_Order_ID(getC_Order_ID());
|
||||||
|
@ -2336,7 +2400,7 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
if (!reversal.processIt(DocAction.ACTION_Complete))
|
if (!reversal.processIt(DocAction.ACTION_Complete))
|
||||||
{
|
{
|
||||||
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
reversal.setC_Payment_ID(0);
|
reversal.setC_Payment_ID(0);
|
||||||
reversal.setIsPaid(true);
|
reversal.setIsPaid(true);
|
||||||
|
@ -2345,7 +2409,6 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
reversal.setDocStatus(DOCSTATUS_Reversed);
|
reversal.setDocStatus(DOCSTATUS_Reversed);
|
||||||
reversal.setDocAction(DOCACTION_None);
|
reversal.setDocAction(DOCACTION_None);
|
||||||
reversal.saveEx(get_TrxName());
|
reversal.saveEx(get_TrxName());
|
||||||
m_processMsg = reversal.getDocumentNo();
|
|
||||||
//
|
//
|
||||||
msgadd = new StringBuilder("(").append(reversal.getDocumentNo()).append("<-)");
|
msgadd = new StringBuilder("(").append(reversal.getDocumentNo()).append("<-)");
|
||||||
addDescription(msgadd.toString());
|
addDescription(msgadd.toString());
|
||||||
|
@ -2375,7 +2438,7 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
|
|
||||||
// Create Allocation
|
// Create Allocation
|
||||||
StringBuilder msgall = new StringBuilder().append(Msg.translate(getCtx(), "C_Invoice_ID")).append(": ").append(getDocumentNo()).append("/").append(reversal.getDocumentNo());
|
StringBuilder msgall = new StringBuilder().append(Msg.translate(getCtx(), "C_Invoice_ID")).append(": ").append(getDocumentNo()).append("/").append(reversal.getDocumentNo());
|
||||||
MAllocationHdr alloc = new MAllocationHdr(getCtx(), false, getDateAcct(),
|
MAllocationHdr alloc = new MAllocationHdr(getCtx(), false, reversalDate,
|
||||||
getC_Currency_ID(),
|
getC_Currency_ID(),
|
||||||
msgall.toString(),
|
msgall.toString(),
|
||||||
get_TrxName());
|
get_TrxName());
|
||||||
|
@ -2402,14 +2465,9 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
// end added
|
// end added
|
||||||
alloc.saveEx();
|
alloc.saveEx();
|
||||||
}
|
}
|
||||||
|
|
||||||
// After reverseCorrect
|
return reversal;
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
}
|
||||||
if (m_processMsg != null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} // reverseCorrectIt
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reverse Accrual - none
|
* Reverse Accrual - none
|
||||||
|
@ -2423,12 +2481,18 @@ public class MInvoice extends X_C_Invoice implements DocAction
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
MInvoice reversal = reverse(true);
|
||||||
|
if (reversal == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
// After reverseAccrual
|
// After reverseAccrual
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return false;
|
m_processMsg = reversal.getDocumentNo();
|
||||||
|
|
||||||
|
return true;
|
||||||
} // reverseAccrualIt
|
} // reverseAccrualIt
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -419,5 +419,30 @@ public class MMatchInv extends X_M_MatchInv
|
||||||
} // getInOutLine
|
} // getInOutLine
|
||||||
// end Bayu
|
// end Bayu
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse MatchPO.
|
||||||
|
* @param reversalDate
|
||||||
|
* @return message
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean reverse(Timestamp reversalDate)
|
||||||
|
{
|
||||||
|
if (this.isPosted())
|
||||||
|
{
|
||||||
|
MMatchInv reversal = new MMatchInv (getCtx(), 0, get_TrxName());
|
||||||
|
PO.copyValues(this, reversal);
|
||||||
|
reversal.setAD_Org_ID(this.getAD_Org_ID());
|
||||||
|
reversal.setDescription("(->" + this.getDocumentNo() + ")");
|
||||||
|
reversal.setQty(this.getQty().negate());
|
||||||
|
reversal.setDateAcct(reversalDate);
|
||||||
|
reversal.setDateTrx(reversalDate);
|
||||||
|
reversal.set_ValueNoCheck ("DocumentNo", null);
|
||||||
|
reversal.setPosted (false);
|
||||||
|
reversal.setReversal_ID(getM_MatchInv_ID());
|
||||||
|
this.setDescription("(" + this.getDocumentNo() + "<-)");
|
||||||
|
if (reversal.save() && this.save())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // MMatchInv
|
} // MMatchInv
|
||||||
|
|
|
@ -1165,5 +1165,34 @@ public class MMatchPO extends X_M_MatchPO
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse MatchPO.
|
||||||
|
* @param reversalDate
|
||||||
|
* @return boolean
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
public boolean reverse(Timestamp reversalDate)
|
||||||
|
{
|
||||||
|
if (this.isPosted())
|
||||||
|
{
|
||||||
|
MMatchPO reversal = new MMatchPO (getCtx(), 0, get_TrxName());
|
||||||
|
reversal.setC_InvoiceLine_ID(getC_InvoiceLine_ID());
|
||||||
|
reversal.setM_InOutLine_ID(getM_InOutLine_ID());
|
||||||
|
PO.copyValues(this, reversal);
|
||||||
|
reversal.setAD_Org_ID(this.getAD_Org_ID());
|
||||||
|
reversal.setDescription("(->" + this.getDocumentNo() + ")");
|
||||||
|
reversal.setQty(this.getQty().negate());
|
||||||
|
reversal.setDateAcct(reversalDate);
|
||||||
|
reversal.setDateTrx(reversalDate);
|
||||||
|
reversal.set_ValueNoCheck ("DocumentNo", null);
|
||||||
|
reversal.setPosted (false);
|
||||||
|
reversal.setReversal_ID(getM_MatchPO_ID());
|
||||||
|
this.setDescription("(" + this.getDocumentNo() + "<-)");
|
||||||
|
if (reversal.save() && this.save())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} // MMatchPO
|
} // MMatchPO
|
||||||
|
|
|
@ -2440,14 +2440,30 @@ public final class MPayment extends X_C_Payment
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!voidOnlinePayment())
|
StringBuilder info = reverse(false);
|
||||||
|
if (info == null) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// After reverseCorrect
|
||||||
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
||||||
|
if (m_processMsg != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_processMsg = info.toString();
|
||||||
|
return true;
|
||||||
|
} // reverseCorrectionIt
|
||||||
|
|
||||||
|
private StringBuilder reverse(boolean accrual) {
|
||||||
|
if (!voidOnlinePayment())
|
||||||
|
return null;
|
||||||
|
|
||||||
// Std Period open?
|
// Std Period open?
|
||||||
Timestamp dateAcct = getDateAcct();
|
Timestamp dateAcct = accrual ? Env.getContextAsDate(getCtx(), "#Date") : getDateAcct();
|
||||||
if (!MPeriod.isOpen(getCtx(), dateAcct,
|
if (dateAcct == null) {
|
||||||
isReceipt() ? X_C_DocType.DOCBASETYPE_ARReceipt : X_C_DocType.DOCBASETYPE_APPayment, getAD_Org_ID()))
|
|
||||||
dateAcct = new Timestamp(System.currentTimeMillis());
|
dateAcct = new Timestamp(System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
MPeriod.testPeriodOpen(getCtx(), dateAcct, getC_DocType_ID(), getAD_Org_ID());
|
||||||
|
|
||||||
// Auto Reconcile if not on Bank Statement
|
// Auto Reconcile if not on Bank Statement
|
||||||
boolean reconciled = getC_BankStatementLine_ID() == 0; //AZ Goodwill
|
boolean reconciled = getC_BankStatementLine_ID() == 0; //AZ Goodwill
|
||||||
|
@ -2491,7 +2507,7 @@ public final class MPayment extends X_C_Payment
|
||||||
if (!reversal.processIt(DocAction.ACTION_Complete))
|
if (!reversal.processIt(DocAction.ACTION_Complete))
|
||||||
{
|
{
|
||||||
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
m_processMsg = "Reversal ERROR: " + reversal.getProcessMsg();
|
||||||
return false;
|
return null;
|
||||||
}
|
}
|
||||||
reversal.closeIt();
|
reversal.closeIt();
|
||||||
reversal.setDocStatus(DOCSTATUS_Reversed);
|
reversal.setDocStatus(DOCSTATUS_Reversed);
|
||||||
|
@ -2540,7 +2556,7 @@ public final class MPayment extends X_C_Payment
|
||||||
// end added
|
// end added
|
||||||
alloc.saveEx(get_TrxName());
|
alloc.saveEx(get_TrxName());
|
||||||
//
|
//
|
||||||
StringBuffer info = new StringBuffer (reversal.getDocumentNo());
|
StringBuilder info = new StringBuilder(reversal.getDocumentNo());
|
||||||
info.append(" - @C_AllocationHdr_ID@: ").append(alloc.getDocumentNo());
|
info.append(" - @C_AllocationHdr_ID@: ").append(alloc.getDocumentNo());
|
||||||
|
|
||||||
// Update BPartner
|
// Update BPartner
|
||||||
|
@ -2549,15 +2565,11 @@ public final class MPayment extends X_C_Payment
|
||||||
MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName());
|
MBPartner bp = new MBPartner (getCtx(), getC_BPartner_ID(), get_TrxName());
|
||||||
bp.setTotalOpenBalance();
|
bp.setTotalOpenBalance();
|
||||||
bp.saveEx(get_TrxName());
|
bp.saveEx(get_TrxName());
|
||||||
}
|
}
|
||||||
// After reverseCorrect
|
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSECORRECT);
|
return info;
|
||||||
if (m_processMsg != null)
|
}
|
||||||
return false;
|
|
||||||
|
|
||||||
m_processMsg = info.toString();
|
|
||||||
return true;
|
|
||||||
} // reverseCorrectionIt
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Bank Statement Line of payment or 0
|
* Get Bank Statement Line of payment or 0
|
||||||
|
@ -2585,11 +2597,17 @@ public final class MPayment extends X_C_Payment
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
StringBuilder info = reverse(true);
|
||||||
|
if (info == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// After reverseAccrual
|
// After reverseAccrual
|
||||||
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
m_processMsg = ModelValidationEngine.get().fireDocValidate(this,ModelValidator.TIMING_AFTER_REVERSEACCRUAL);
|
||||||
if (m_processMsg != null)
|
if (m_processMsg != null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
m_processMsg = info.toString();
|
||||||
return false;
|
return false;
|
||||||
} // reverseAccrualIt
|
} // reverseAccrualIt
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class X_C_AllocationHdr extends PO implements I_C_AllocationHdr, I_Persis
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 20121031L;
|
private static final long serialVersionUID = 20121113L;
|
||||||
|
|
||||||
/** Standard Constructor */
|
/** Standard Constructor */
|
||||||
public X_C_AllocationHdr (Properties ctx, int C_AllocationHdr_ID, String trxName)
|
public X_C_AllocationHdr (Properties ctx, int C_AllocationHdr_ID, String trxName)
|
||||||
|
@ -475,4 +475,32 @@ public class X_C_AllocationHdr extends PO implements I_C_AllocationHdr, I_Persis
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public org.compiere.model.I_C_AllocationHdr getReversal() throws RuntimeException
|
||||||
|
{
|
||||||
|
return (org.compiere.model.I_C_AllocationHdr)MTable.get(getCtx(), org.compiere.model.I_C_AllocationHdr.Table_Name)
|
||||||
|
.getPO(getReversal_ID(), get_TrxName()); }
|
||||||
|
|
||||||
|
/** Set Reversal ID.
|
||||||
|
@param Reversal_ID
|
||||||
|
ID of document reversal
|
||||||
|
*/
|
||||||
|
public void setReversal_ID (int Reversal_ID)
|
||||||
|
{
|
||||||
|
if (Reversal_ID < 1)
|
||||||
|
set_Value (COLUMNNAME_Reversal_ID, null);
|
||||||
|
else
|
||||||
|
set_Value (COLUMNNAME_Reversal_ID, Integer.valueOf(Reversal_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Reversal ID.
|
||||||
|
@return ID of document reversal
|
||||||
|
*/
|
||||||
|
public int getReversal_ID ()
|
||||||
|
{
|
||||||
|
Integer ii = (Integer)get_Value(COLUMNNAME_Reversal_ID);
|
||||||
|
if (ii == null)
|
||||||
|
return 0;
|
||||||
|
return ii.intValue();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -33,7 +33,7 @@ public class X_M_MatchInv extends PO implements I_M_MatchInv, I_Persistent
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 20121031L;
|
private static final long serialVersionUID = 20121113L;
|
||||||
|
|
||||||
/** Standard Constructor */
|
/** Standard Constructor */
|
||||||
public X_M_MatchInv (Properties ctx, int M_MatchInv_ID, String trxName)
|
public X_M_MatchInv (Properties ctx, int M_MatchInv_ID, String trxName)
|
||||||
|
@ -415,4 +415,32 @@ public class X_M_MatchInv extends PO implements I_M_MatchInv, I_Persistent
|
||||||
return Env.ZERO;
|
return Env.ZERO;
|
||||||
return bd;
|
return bd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public org.compiere.model.I_M_MatchInv getReversal() throws RuntimeException
|
||||||
|
{
|
||||||
|
return (org.compiere.model.I_M_MatchInv)MTable.get(getCtx(), org.compiere.model.I_M_MatchInv.Table_Name)
|
||||||
|
.getPO(getReversal_ID(), get_TrxName()); }
|
||||||
|
|
||||||
|
/** Set Reversal ID.
|
||||||
|
@param Reversal_ID
|
||||||
|
ID of document reversal
|
||||||
|
*/
|
||||||
|
public void setReversal_ID (int Reversal_ID)
|
||||||
|
{
|
||||||
|
if (Reversal_ID < 1)
|
||||||
|
set_Value (COLUMNNAME_Reversal_ID, null);
|
||||||
|
else
|
||||||
|
set_Value (COLUMNNAME_Reversal_ID, Integer.valueOf(Reversal_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Reversal ID.
|
||||||
|
@return ID of document reversal
|
||||||
|
*/
|
||||||
|
public int getReversal_ID ()
|
||||||
|
{
|
||||||
|
Integer ii = (Integer)get_Value(COLUMNNAME_Reversal_ID);
|
||||||
|
if (ii == null)
|
||||||
|
return 0;
|
||||||
|
return ii.intValue();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -33,7 +33,7 @@ public class X_M_MatchPO extends PO implements I_M_MatchPO, I_Persistent
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = 20121031L;
|
private static final long serialVersionUID = 20121113L;
|
||||||
|
|
||||||
/** Standard Constructor */
|
/** Standard Constructor */
|
||||||
public X_M_MatchPO (Properties ctx, int M_MatchPO_ID, String trxName)
|
public X_M_MatchPO (Properties ctx, int M_MatchPO_ID, String trxName)
|
||||||
|
@ -487,4 +487,32 @@ public class X_M_MatchPO extends PO implements I_M_MatchPO, I_Persistent
|
||||||
return Env.ZERO;
|
return Env.ZERO;
|
||||||
return bd;
|
return bd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public org.compiere.model.I_M_MatchPO getReversal() throws RuntimeException
|
||||||
|
{
|
||||||
|
return (org.compiere.model.I_M_MatchPO)MTable.get(getCtx(), org.compiere.model.I_M_MatchPO.Table_Name)
|
||||||
|
.getPO(getReversal_ID(), get_TrxName()); }
|
||||||
|
|
||||||
|
/** Set Reversal ID.
|
||||||
|
@param Reversal_ID
|
||||||
|
ID of document reversal
|
||||||
|
*/
|
||||||
|
public void setReversal_ID (int Reversal_ID)
|
||||||
|
{
|
||||||
|
if (Reversal_ID < 1)
|
||||||
|
set_Value (COLUMNNAME_Reversal_ID, null);
|
||||||
|
else
|
||||||
|
set_Value (COLUMNNAME_Reversal_ID, Integer.valueOf(Reversal_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Get Reversal ID.
|
||||||
|
@return ID of document reversal
|
||||||
|
*/
|
||||||
|
public int getReversal_ID ()
|
||||||
|
{
|
||||||
|
Integer ii = (Integer)get_Value(COLUMNNAME_Reversal_ID);
|
||||||
|
if (ii == null)
|
||||||
|
return 0;
|
||||||
|
return ii.intValue();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -976,6 +976,7 @@ public class DocumentEngine implements DocAction
|
||||||
{
|
{
|
||||||
options[index++] = DocumentEngine.ACTION_Void;
|
options[index++] = DocumentEngine.ACTION_Void;
|
||||||
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
||||||
|
options[index++] = DocumentEngine.ACTION_Reverse_Accrual;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/********************
|
/********************
|
||||||
|
@ -988,6 +989,7 @@ public class DocumentEngine implements DocAction
|
||||||
{
|
{
|
||||||
options[index++] = DocumentEngine.ACTION_Void;
|
options[index++] = DocumentEngine.ACTION_Void;
|
||||||
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
||||||
|
options[index++] = DocumentEngine.ACTION_Reverse_Accrual;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/********************
|
/********************
|
||||||
|
@ -1000,6 +1002,7 @@ public class DocumentEngine implements DocAction
|
||||||
{
|
{
|
||||||
options[index++] = DocumentEngine.ACTION_Void;
|
options[index++] = DocumentEngine.ACTION_Void;
|
||||||
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
||||||
|
options[index++] = DocumentEngine.ACTION_Reverse_Accrual;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/********************
|
/********************
|
||||||
|
@ -1025,6 +1028,7 @@ public class DocumentEngine implements DocAction
|
||||||
{
|
{
|
||||||
options[index++] = DocumentEngine.ACTION_Void;
|
options[index++] = DocumentEngine.ACTION_Void;
|
||||||
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
||||||
|
options[index++] = DocumentEngine.ACTION_Reverse_Accrual;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//[ 1782412 ]
|
//[ 1782412 ]
|
||||||
|
@ -1061,6 +1065,7 @@ public class DocumentEngine implements DocAction
|
||||||
{
|
{
|
||||||
options[index++] = DocumentEngine.ACTION_Void;
|
options[index++] = DocumentEngine.ACTION_Void;
|
||||||
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
options[index++] = DocumentEngine.ACTION_Reverse_Correct;
|
||||||
|
options[index++] = DocumentEngine.ACTION_Reverse_Accrual;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/********************
|
/********************
|
||||||
|
@ -1244,4 +1249,33 @@ public class DocumentEngine implements DocAction
|
||||||
return error;
|
return error;
|
||||||
} // postImmediate
|
} // postImmediate
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Process document. This replaces DocAction.processIt().
|
||||||
|
* @param doc
|
||||||
|
* @param processAction
|
||||||
|
* @return true if performed
|
||||||
|
*/
|
||||||
|
public static boolean processIt(DocAction doc, String processAction) {
|
||||||
|
boolean success = false;
|
||||||
|
|
||||||
|
//ensure doc status not change by other session
|
||||||
|
if (doc instanceof PO) {
|
||||||
|
PO docPO = (PO) doc;
|
||||||
|
if (docPO.get_ID() > 0 && docPO.get_TrxName() != null && docPO.get_ValueOld("DocStatus") != null) {
|
||||||
|
DB.getDatabase().forUpdate(docPO, 30);
|
||||||
|
String docStatusOriginal = (String) docPO.get_ValueOld("DocStatus");
|
||||||
|
String currentStatus = DB.getSQLValueString((String)null,
|
||||||
|
"SELECT DocStatus FROM " + docPO.get_TableName() + " WHERE " + docPO.get_KeyColumns()[0] + " = ? ",
|
||||||
|
docPO.get_ID());
|
||||||
|
if (!docStatusOriginal.equals(currentStatus) && currentStatus != null) {
|
||||||
|
throw new IllegalStateException("Document status have been change by other session, please refresh your window and try again. " + docPO.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DocumentEngine engine = new DocumentEngine(doc, doc.getDocStatus());
|
||||||
|
success = engine.processIt(processAction, doc.getDocAction());
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
} // DocumentEnine
|
} // DocumentEnine
|
||||||
|
|
Loading…
Reference in New Issue